IOPLL動態重配

?

連接

?

?Avalon -MM接口

mgmt_waitrequest:PLL 重配置進程開始后,此端口變高并在 PLL 重配置期間保持高電平。

PLL 重配置進程完成后,此端口變低。

?

I/O PLL重配寫操作步驟:

1、? 為mgmt_address和mgmt_writedata設置有效值,并且使能mgmt_write一個mgmt_clk周期

2、? 重復步驟1共8次

3、? 為mgmt_address設置啟動地址9’b000000000,mgmt._writedata任意,并且使能mgmt_write一個mgmt_clk周期

4、? 當配置完成后mgmt_waitrequest拉低

注:(1)如果發送的命令超過8個,內部的FIFO會溢出。

(2)每個命令(地址數據對)屬于以下三種之一:

???????? 1、計數器重配設置

???????? 2、帶寬重配設置

???????? 3、動態相位移動

1、計數器重配設置寄存器

?

?

1、? 動態相位移動

?

3、帶寬重配設置

?

環路濾波器和充電泵設置

CP :Charge pump setting

BP :Loop filter setting

?

?

對于PLL的帶寬選擇有三種—在PLL的參數設置中可以選擇,它們是Low,Medium和High。可以來看下手冊上對它們的說明:

? Low—PLL with a low bandwidth has better jitter rejection but a slower lock time.
? High—PLL with a high bandwidth has a faster lock time but tracks more jitter.
? Medium—A medium bandwidth offers a balance between lock time and jitter rejection.

帶寬應該指的是環路濾波帶寬,帶寬越小就越不容易鎖定,太寬了時鐘抖動會比較大。

VCO的設置范圍為600~1434M

?

其中M,N,C的參數分別對應上面,C0表示輸出通道0,C1表示輸出通道1,以此類推。

?

module mr_reconfig_master_pll #(parameter MIF_OFFSET               = 7,  // total cram address that differ resulted from PLL mif files comparisonparameter ADDR_WIDTH_FOR_VALUEMASK = 6,  // number of bits representation for total ROM depth for PLL valuemask parameter ADDR_WIDTH_FOR_DPRIOADDR = 3,  // number of bits representation for total CRAM address that differparameter DPRIO_ADDRESS_WIDTH      = 9,  //parameter DPRIO_DATA_WIDTH         = 32  //          
) (input  wire    clock,input  wire    reset,input  wire    reconfig_request,     // from main state machine - request for reconfigoutput reg     reconfig_done,        // to main state machine - indicate reconfig is completedinput  wire  clr_reconfig_done,  // from main state machine - full handshake signal to acknowledge reconfig_done (both rx & pll) is servicedinput  wire [ADDR_WIDTH_FOR_VALUEMASK-1:0] offset_pointer, // from main state machine - indicate which rom address (mif range) to be readoutput wire [ADDR_WIDTH_FOR_VALUEMASK-1:0] valuemask_addr_ptr, // to value mask rom - start from offset_pointer & increment by 1 for each cycle & increment for MIF_OFFSET timesoutput wire [ADDR_WIDTH_FOR_DPRIOADDR-1:0] dprioaddr_addr_ptr, // to dprio addr rom - start from 0 & increment by 1 for each cycle & increment for MIF_OFFSET times input  wire [7:0]   dprio_offset,   // from dprio addr rom - indicate which cram address to write toinput  wire [31:0]   field_valuemask, // from value mask rom - indicate the value of cram bit to write to (in 8-bitmask format)input  wire        reconfig_waitrequest, // output reg         reconfig_write,       // Reconfig signals to/from PLL reconfig controlleroutput reg  [DPRIO_ADDRESS_WIDTH-1:0]      reconfig_address,     //output reg  [DPRIO_DATA_WIDTH-1:0]         reconfig_writedata    //      
);localparam [2:0]IDLE        = 0,MOD         = 1,        WR          = 2,TRANS       = 3,START       = 4,WAITREQUEST = 5,DONE        = 6;reg  [2:0]           next_state; 
reg  [2:0]           current_state;
wire [DPRIO_DATA_WIDTH-1:0]         data_to_write;             // data to be written to PLL
reg  [ADDR_WIDTH_FOR_DPRIOADDR-1:0] num_exec;     // offset start from 0 & increment by 1 & for MIF_OFFSET times                   
reg  [ADDR_WIDTH_FOR_VALUEMASK-1:0] pointer;       // get the pointer start offset from main state machine
reg                last_offset;               // indicate if the current offset is the last or not
wire              reconfig_waitrequest_sync; // synchronize waitrequest signal from the PLL reconfig controlleraltera_std_synchronizer #(.depth(3)) u_reconfig_waitrequest_sync (.clk(clock),.reset_n(1'b1),.din(reconfig_waitrequest),.dout(reconfig_waitrequest_sync));always @ (posedge clock or posedge reset)   
beginif (reset) begincurrent_state <= IDLE;end else begincurrent_state <= next_state;end       
endalways @ (*)
beginnext_state = current_state;case (current_state)IDLE: beginif (reconfig_request) begin //由主狀態機發出重配請求next_state = MOD;end        endMOD: beginnext_state = WR;end    // reconfig write       WR: begin   if (~reconfig_request) begin//如果重配請求清除則返回IDLE狀態next_state = IDLE;end else beginnext_state = TRANS;end             end// cycle to next offset before it hits MIF_OFFSET times
//TRANS state:TRANS: beginif (last_offset) beginnext_state = START;end else beginnext_state = MOD;end        end// write to start register to initiate the PLL reconfig// then wait for waitrequest signal to be asserted     //發送啟動地址0x000   START: beginif (reconfig_waitrequest_sync) beginnext_state = WAITREQUEST;end else if (~reconfig_request) begin      next_state = IDLE;end    end// once waitrequest is deasserted, PLL reconfig is complete   //等待PLL重配完成   WAITREQUEST: beginif (~reconfig_waitrequest_sync) beginnext_state = DONE;end else if (~reconfig_request) begin      next_state = IDLE;endend// full handshaking between this master and main state machine      DONE: beginif (~reconfig_request) beginnext_state = IDLE;end        end        endcase   
end//mun_exec是參數ROM模塊的讀地址
always @ (posedge clock or posedge reset)
beginif (reset) beginnum_exec <= {ADDR_WIDTH_FOR_DPRIOADDR{1'b0}};pointer <= {ADDR_WIDTH_FOR_VALUEMASK{1'b0}};last_offset <= 1'b0;end else beginif (next_state == IDLE) beginnum_exec <= {ADDR_WIDTH_FOR_DPRIOADDR{1'b0}};pointer <= offset_pointer;     end else if (next_state == TRANS && ~last_offset) beginnum_exec <= num_exec + {{{ADDR_WIDTH_FOR_DPRIOADDR-1}{1'b0}}, 1'b1};pointer <= pointer + {{{ADDR_WIDTH_FOR_VALUEMASK-1}{1'b0}}, 1'b1};     endlast_offset <= num_exec == (MIF_OFFSET - 1);end
end// mgmt_write signal 
always @ (posedge clock or posedge reset)
beginif (reset) beginreconfig_write <= 1'b0; end else beginif (next_state == WR || next_state == START) begin  reconfig_write <= 1'b1; end else begin reconfig_write <= 1'b0; endend
end
//write address to pll mgmt_address
always @ (posedge clock or posedge reset)
beginif (reset) beginreconfig_address <= {DPRIO_ADDRESS_WIDTH{1'b0}}; end else beginif (next_state == WR) beginreconfig_address <= {1'b0, dprio_offset};end else if (next_state == START) beginreconfig_address <= {1'b0, 8'h00};end    end
end
//write data to pll mgmt_writedata
assign data_to_write = field_valuemask;always @ (posedge clock or posedge reset)
beginif (reset) beginreconfig_writedata <= {DPRIO_DATA_WIDTH{1'b0}}; end else beginif (next_state == WR) beginreconfig_writedata <= data_to_write;end else if (next_state == START) beginreconfig_writedata <= 32'd0;end    end
end
// reconfigure done signal
always @ (posedge clock or posedge reset)
beginif (reset) beginreconfig_done <= 1'b0;end else beginif (clr_reconfig_done) beginreconfig_done <= 1'b0;end else if (next_state == DONE) beginreconfig_done <= 1'b1;end    end       
endassign dprioaddr_addr_ptr = num_exec;
assign valuemask_addr_ptr = pointer;endmodule    關于TX IOPLL(用于配置HDMI)的參數設置
void GPLL_RECONFIG(int GPLL_RANGE, int COLOR_DEPTH)
{IOWR(WD_TIMER_BASE, 0x0, 0x0); // clear timeout flagIOWR(WD_TIMER_BASE, 0x2, 0x1); // reset internal counterIOWR(WD_TIMER_BASE, 0x1, 0x4); // start timerswitch (GPLL_RANGE){case 0: // <50MHzGPLL_RCFG_WRITE(0x90, 0x00000F0F);                            // m 30GPLL_RCFG_WRITE(0xA0, 0x00010000);                            // n 1GPLL_RCFG_WRITE(0xC0, 0x00000303);                            // c0 6GPLL_RCFG_WRITE(0xC1, 0x00001E1E);                            // c1 60if      (COLOR_DEPTH == 0) GPLL_RCFG_WRITE(0xC2, 0x00001E1E); // c2 60else if (COLOR_DEPTH == 1) GPLL_RCFG_WRITE(0xC2, 0x00002625); // c2 75else if (COLOR_DEPTH == 2) GPLL_RCFG_WRITE(0xC2, 0x00002D2D); // c2 90else                       GPLL_RCFG_WRITE(0xC2, 0x00003C3C); // c2 120GPLL_RCFG_WRITE(0x20, 0x00000010);                            // cpGPLL_RCFG_WRITE(0x40, 0x00000100);                            // bwGPLL_RCFG_WRITE(0x00, 0x00000001);                            // Write triggerbreak;case 1: // <70MHzGPLL_RCFG_WRITE(0x90, 0x00000A0A);                            // m 20GPLL_RCFG_WRITE(0xA0, 0x00010000);                            // n 1GPLL_RCFG_WRITE(0xC0, 0x00000202);                            // c0 4GPLL_RCFG_WRITE(0xC1, 0x00001414);                            // c1 40if      (COLOR_DEPTH == 0) GPLL_RCFG_WRITE(0xC2, 0x00001414); // c2 40else if (COLOR_DEPTH == 1) GPLL_RCFG_WRITE(0xC2, 0x00001919); // c2 50else if (COLOR_DEPTH == 2) GPLL_RCFG_WRITE(0xC2, 0x00001E1E); // c2 60else                       GPLL_RCFG_WRITE(0xC2, 0x00002828); // c2 80GPLL_RCFG_WRITE(0x20, 0x0000000B);                            // cpGPLL_RCFG_WRITE(0x40, 0x000000C0);                            // bwGPLL_RCFG_WRITE(0x00, 0x00000001);                            // Write triggerbreak;case 2: // <100MHzGPLL_RCFG_WRITE(0x90, 0x00000505);                            // m 10GPLL_RCFG_WRITE(0xA0, 0x00010000);                            // n 1GPLL_RCFG_WRITE(0xC0, 0x00000101);                            // c0 2GPLL_RCFG_WRITE(0xC1, 0x00000A0A);                            // c1 20if      (COLOR_DEPTH == 0) GPLL_RCFG_WRITE(0xC2, 0x00000A0A); // c2 20else if (COLOR_DEPTH == 1) GPLL_RCFG_WRITE(0xC2, 0x00000D0C); // c2 25else if (COLOR_DEPTH == 2) GPLL_RCFG_WRITE(0xC2, 0x00000F0F); // c2 30else                       GPLL_RCFG_WRITE(0xC2, 0x00001414); // c2 40GPLL_RCFG_WRITE(0x20, 0x00000010);                            // cpGPLL_RCFG_WRITE(0x40, 0x000000C0);                            // bwGPLL_RCFG_WRITE(0x00, 0x00000001);                            // Write triggerbreak;case 3: // <170MHzGPLL_RCFG_WRITE(0x90, 0x00000404);                            // m 8GPLL_RCFG_WRITE(0xA0, 0x00010000);                            // n 1GPLL_RCFG_WRITE(0xC0, 0x00000404);                            // c0 8GPLL_RCFG_WRITE(0xC1, 0x00000808);                            // c1 16if      (COLOR_DEPTH == 0) GPLL_RCFG_WRITE(0xC2, 0x00000808); // c2 16else if (COLOR_DEPTH == 1) GPLL_RCFG_WRITE(0xC2, 0x00000A0A); // c2 20else if (COLOR_DEPTH == 2) GPLL_RCFG_WRITE(0xC2, 0x00000C0C); // c2 24else                       GPLL_RCFG_WRITE(0xC2, 0x00001010); // c2 32GPLL_RCFG_WRITE(0x20, 0x00000010);                            // cpGPLL_RCFG_WRITE(0x40, 0x000000C0);                            // bwGPLL_RCFG_WRITE(0x00, 0x00000001);                            // Write triggerbreak;case 4: // <340MHzGPLL_RCFG_WRITE(0x90, 0x00000404);                            // m 8GPLL_RCFG_WRITE(0xA0, 0x00010000);                            // n 1GPLL_RCFG_WRITE(0xC0, 0x00000202);                            // c0 4GPLL_RCFG_WRITE(0xC1, 0x00000404);                            // c1 8if      (COLOR_DEPTH == 0) GPLL_RCFG_WRITE(0xC2, 0x00000404); // c2 8else if (COLOR_DEPTH == 1) GPLL_RCFG_WRITE(0xC2, 0x00000505); // c2 10else if (COLOR_DEPTH == 2) GPLL_RCFG_WRITE(0xC2, 0x00000606); // c2 12else                       GPLL_RCFG_WRITE(0xC2, 0x00000808); // c2 16GPLL_RCFG_WRITE(0x20, 0x00000010);                            // cpGPLL_RCFG_WRITE(0x40, 0x000000C0);                            // bwGPLL_RCFG_WRITE(0x00, 0x00000001);                            // Write triggerbreak;case 5: // <600MHzGPLL_RCFG_WRITE(0x90, 0x00000404);                            // m 8GPLL_RCFG_WRITE(0xA0, 0x00010000);                            // n 1GPLL_RCFG_WRITE(0xC0, 0x00000101);                            // c0 2GPLL_RCFG_WRITE(0xC1, 0x00000202);                            // c1 4if      (COLOR_DEPTH == 0) GPLL_RCFG_WRITE(0xC2, 0x00000202); // c2 4else if (COLOR_DEPTH == 1) GPLL_RCFG_WRITE(0xC2, 0x00000302); // c2 5else if (COLOR_DEPTH == 2) GPLL_RCFG_WRITE(0xC2, 0x00000303); // c2 6else                       GPLL_RCFG_WRITE(0xC2, 0x00000404); // c2 8GPLL_RCFG_WRITE(0x20, 0x00000010);                            // cpGPLL_RCFG_WRITE(0x40, 0x000000C0);                            // bwGPLL_RCFG_WRITE(0x00, 0x00000001);                            // Write triggerbreak;default: // <600MHzGPLL_RCFG_WRITE(0x90, 0x00000404);                            // m 8GPLL_RCFG_WRITE(0xA0, 0x00010000);                            // n 1GPLL_RCFG_WRITE(0xC0, 0x00000101);                            // c0 2GPLL_RCFG_WRITE(0xC1, 0x00000202);                            // c1 4if      (COLOR_DEPTH == 0) GPLL_RCFG_WRITE(0xC2, 0x00000202); // c2 4else if (COLOR_DEPTH == 1) GPLL_RCFG_WRITE(0xC2, 0x00000302); // c2 5else if (COLOR_DEPTH == 2) GPLL_RCFG_WRITE(0xC2, 0x00000303); // c2 6else                       GPLL_RCFG_WRITE(0xC2, 0x00000404); // c2 8GPLL_RCFG_WRITE(0x20, 0x00000010);                            // cpGPLL_RCFG_WRITE(0x40, 0x000000C0);                            // bwGPLL_RCFG_WRITE(0x00, 0x00000001);                            // Write triggerbreak;}READ_GPLL_RCFG_READY ();IOWR(WD_TIMER_BASE, 0x1, 0x8); // stop the timerIOWR(WD_TIMER_BASE, 0x0, 0x0); // clear timeout flagIOWR(WD_TIMER_BASE, 0x2, 0x1); // reset internal counter
}
在上面的程序中,關于COLOR_DEPTH,根據HDMI IP里面gcp的定義00:8位,01:10位,10:12位,11:16位,Nios程序中給出COLOR_DEPTH參數0,說明輸出時是按8位定義的。

?

轉載于:https://www.cnblogs.com/zhongguo135/p/9458878.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397244.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397244.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397244.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android 的屬性動畫

public void zyluoti(View v){ValueAnimator animator ValueAnimator.ofFloat(0,screenHeight - mImageView.getHeight());//設置屬性動畫的值&#xff0c;值的類型為floatanimator.setDuration(1000);//動畫的作用時間animator.setTarget(mImageView);//設置動畫的作用目標an…

qt中如何模擬按鈕點擊_如何快速在 Shopify 中加入按鈕

假如你會 CSS , HTML , JS 三件套&#xff0c;那么修改 Shopify 代碼將不會太難&#xff08;畢竟一個模板中的代碼量還是挺多的&#xff0c;除非深入研究了代碼&#xff0c;不然改起來還是會比較麻煩的&#xff09;。但挺多玩家是不會這三件套的&#xff0c;修改代碼來達到添加…

clear ,refresh,free

itab 即是內表也是工作區的情況下&#xff0c;即with header line. clear itab&#xff0c;僅清空HEADER LINE&#xff0c;對內表數據存儲空間不影響&#xff0c;保留內存區。 refresh itab&#xff0c;不清空HEADER LINE&#xff0c;清除內表數據存儲空間&#xff0c;但保存內…

淺談關于java中的深淺拷貝

一.淺拷貝(shallow copy) 1.如何實現淺拷貝? Object類 是所有類的直接或間接父類,Object中存在clone方法,如下 protected native Object clone() throws CloneNotSupportedException; 如果想要使一個類的對象能夠調用clone方法 ,則需要實現Cloneable接口, 并重寫 clone方法: p…

iOS開發-Protocol協議及委托代理(Delegate)傳值

前言&#xff1a;因為Object&#xff0d;C是不支持多繼承的&#xff0c;所以很多時候都是用Protocol&#xff08;協議&#xff09;來代替。Protocol&#xff08;協議&#xff09;只能定義公用的一套接口&#xff0c;但不能提供具體的實現方法。也就是說&#xff0c;它只告訴你要…

git 查看分支編碼_12個常用的Git命令,趕緊記一波!

今天齊姐簡單講下 Git 的實現原理&#xff0c;知其所以然才能知其然&#xff1b;并且梳理了日常最常用的 12 個命令&#xff0c;分為三大類分享給你。本文的結構如下&#xff1a;作者和開發原由Git 的數據模型常用命令資源推薦作者和開發原由Talk is cheap. Show me the code.這…

在域環境下搭建samba服務器

環境&#xff1a;samba&#xff1a;smbserver&#xff1a; 192.168.0.18AD:rise.com&#xff1a;192.168.0.37組&#xff1a;zixun xingzheng teacher class admin共享目錄:zixun xingzheng xueshu other一.安裝Samba服務器yum install -y samba二.把linux加入到ad中1.先…

Android NDK編程,引入第三方.so庫

android自帶的編譯工具NDK進行編譯時&#xff08;非單純的調用第三方.so而是進行ndk編程&#xff09;&#xff0c;armeabi以及armeabi-v7a文件夾下的第三方so文件將會被刪除&#xff0c;只會產生編譯后的so文件&#xff0c;其他的so文件將無法引入,現在我們就來解決&#xff1a…

會做飯的機器人曰記_顏真卿《麻姑仙壇記》:蒼勁古樸,體態沉雄,氣象宏大...

《麻姑仙壇記》&#xff0c;全稱《有唐撫州南城縣麻姑山仙壇記》&#xff0c;或稱《麻姑山仙壇記》。顏真卿撰并書于大歷六年&#xff08;771&#xff09;四月。此碑有大、中、小三種刻本&#xff0c;且原石均佚&#xff0c;原拓佳本亦難得。大字本&#xff0c;字徑約5厘米&…

IBM服務器硬盤出現Other Error可能原因

除了確實物理等因素外&#xff0c;可能還因為&#xff1a;Other Errors的 很有可能也是固件(firmware)版本太低造成。 固件版本太低的話&#xff0c;硬盤自身有power safe模式&#xff0c;在硬盤長時間沒有I/O情況下&#xff0c;硬盤會自動斷電&#xff0c;而系統本身誤以為是硬…

怪異模式

眾所周知,HTML文檔結構可分為:文檔聲明<!DOCTYPE HTML>、HTML元素&#xff08;根元素/根標記/根標簽/祖先元素&#xff09;、head元素、body元素。 文檔聲明是用來通知瀏覽器&#xff0c;目前的文檔正使用哪個HTML版本&#xff0c;如果我們不寫文檔聲明<!DCOTYPE HTML…

Metro UI 菜單(Winform)

我有個項目需要要到菜單導航&#xff0c;就自己動作做了一個&#xff0c;感覺還可以&#xff0c;分享給大家。下載地址:http://files.cnblogs.com/files/dyj057/MetroUIMenu.zip 主要代碼&#xff1a; private void SetElements(){if (Elements null) return;int eWidth Bord…

echarts 山東地圖_用Python畫中國地圖,實現各省份數據可視化

第一步&#xff1a;安裝pyechartspyecharts是一款將python與echarts結合的強大的數據可視化工具&#xff0c;本文使用了0.1.9.4版本pip install pyecharts0.1.9.4第二步&#xff1a;讀取數據我的數據是在Excel表格里&#xff0c;如下圖&#xff1a;Execel數據使用xlrd(沒有就通…

mysql 中某個字段相同的數據拼接起來

2019獨角獸企業重金招聘Python工程師標準>>> mysql> select name, GROUP_CONCAT( age SEPARATOR ‘#’) from student group by name; ——————————————————— | name | GROUP_CONCAT( age SEPARATOR ‘#’) | ———————————————…

微信紅包系統架構的設計和優化分享

微信紅包系統架構的設計和優化分享 編者按&#xff1a;經過2014年一年的醞釀&#xff0c;2015微信紅包總量創下歷史新高&#xff0c;峰值1400萬次/秒&#xff0c;8.1億次每分鐘&#xff0c;微信紅包收發達10.1億次&#xff0c;系統整體運行平穩, 在這里我分享下微信紅包背后的技…

Jquery各版本下載

jquery-2.1.4 (注&#xff01;jquery-2.0以上版本不再支持IE 6/7/8) 百度引用地址 (推薦目前最穩定的&#xff0c;不會出現延時打不開情況) 百度壓縮版引用地址: <script src"http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script> 微軟壓縮版引…

python list方法操作_Python 列表(List)操作方法詳解

參考文獻來源于腳本之家列表是Python中最基本的數據結構&#xff0c;列表是最常用的Python數據類型&#xff0c;列表的數據項不需要具有相同的類型。列表中的每個元素都分配一個數字 - 它的位置&#xff0c;或索引&#xff0c;第一個索引是0&#xff0c;第二個索引是1&#xff…

FastDFS單機版安裝教程

安裝清單如下&#xff1a; 一、安裝FastDFS 1. 安裝libfastcommon 先解壓安裝包到目錄 # unzip libfastcommon-1.0.36.zip 安裝編譯工具及環境&#xff08;后面Nginx也會用到這些依賴環境&#xff09; # yum -y install gcc gcc gcc-c openssl openssl-devel pcre pcre-deve #…

【原創】Chrome最新版(53-55)再次爆出BUG!

2019獨角獸企業重金招聘Python工程師標準>>> 前言 今年十月份&#xff0c;我曾發布一篇文章《Chrome53 最新版驚現無厘頭卡死 BUG&#xff01;》&#xff0c;不過那個BUG在最新的 Chrome 54 中已經修正。 而今天即將發布的Chrome弱智BUG&#xff1a; 僅 Chrome 53 -…

ThinkPHP 發送post請求

function post($url, $paramarray()){ if(!is_array($param)){ throw new Exception("參數必須為array"); } $httph curl_init($url); curl_setopt($httph, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($httph, CURLOPT_SSL_VERIFYHOST, 1); curl_setopt($httph,CURLOP…