引言:本文我們介紹下Xilinx SelectIO資源內(nèi)部IDELAYE2資源應(yīng)用。IDELAYE2原句配合IDELAYCTRL原句主要用于在信號通過引腳進(jìn)入芯片內(nèi)部之前,進(jìn)行延時調(diào)節(jié),一般高速端口信號由于走線延時等原因,需要通過IDELAYE2原語對數(shù)據(jù)做微調(diào),實現(xiàn)時鐘與數(shù)據(jù)的源同步時序要求。
1. IDELAYE2在SelectIO中的位置
7系列FPGA SelectIO中HR Bank和HP bank中都有IDELAYE2模塊,其在SelectIO路徑位置如下圖所示。
圖1:7系列FPGA HP Bank I/O Tile
圖2:7系列FPGA HR Bank I/O tile
2. IDELAYE2延遲特性
Kintex-7器件DC and AC 開關(guān)特性手冊中介紹了IDELAY延遲分辨率及最大工作時鐘,如下表所示。
表1:IDELAY延遲分辨率及最大工作時鐘
根據(jù)上圖延遲分辨率,例如當(dāng)參考時鐘為200MHz時,根據(jù)公式計算:
平均抽頭延遲單位為Tidelayresoluion=1/(32×2×200MHz)≈78ps。
需要說明的一點是:
當(dāng)抽頭系數(shù)Tap=0時,輸入和輸出延遲時間并非為0ps,而是600ps;
當(dāng)抽頭系數(shù)Tap=1~31時,TapDelayTime=600ps+Tidelayresoluion*Tap。
3. IDELAYE2原句
在Vivado Language Templates中搜索IDELAY,在Verilog目錄中根據(jù)工程器件家族Kintex-7選擇IDELAYE2原句模板,如下圖所示。
圖3:IDELAYE2原句模板
(* IODELAY_GROUP =IDATAIN為延時前的輸入信號,DATAOUT為延時后的輸出信號。REFCLK_FREQUENCY參數(shù)為IDELAYCTRL原語的參考時鐘頻率,一般為200Mhz,最大頻率范圍根據(jù)器件手冊確定。IDELAY_VALUE參數(shù)用來設(shè)置延時的tap數(shù),范圍為1~31,每個tap數(shù)的延時時間和參考時鐘頻率有關(guān)。*) // Specifies group name for associated IDELAYs/ODELAYs and IDELAYCTRL IDELAYE2 #( .CINVCTRL_SEL("FALSE"), // Enable dynamic clock inversion (FALSE, TRUE) .DELAY_SRC("IDATAIN"), // Delay input (IDATAIN, DATAIN) .HIGH_PERFORMANCE_MODE("FALSE"), // Reduced jitter ("TRUE"), Reduced power ("FALSE") .IDELAY_TYPE("FIXED"), // FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE .IDELAY_VALUE(0), // Input delay tap setting (0-31) .PIPE_SEL("FALSE"), // Select pipelined mode, FALSE, TRUE .REFCLK_FREQUENCY(200.0), // IDELAYCTRL clock input frequency in MHz (190.0-210.0, 290.0-310.0). .SIGNAL_PATTERN("DATA") // DATA, CLOCK input signal ) IDELAYE2_inst ( .CNTVALUEOUT(CNTVALUEOUT), // 5-bit output: Counter value output .DATAOUT(DATAOUT), // 1-bit output: Delayed data output .C(C), // 1-bit input: Clock input .CE(CE), // 1-bit input: Active high enable increment/decrement input .CINVCTRL(CINVCTRL), // 1-bit input: Dynamic clock inversion input .CNTVALUEIN(CNTVALUEIN), // 5-bit input: Counter value input .DATAIN(DATAIN), // 1-bit input: Internal delay data input .IDATAIN(IDATAIN), // 1-bit input: Data input from the I/O .INC(INC), // 1-bit input: Increment / Decrement tap delay input .LD(LD), // 1-bit input: Load IDELAY_VALUE input .LDPIPEEN(LDPIPEEN), // 1-bit input: Enable PIPELINE register to load data input .REGRST(REGRST) // 1-bit input: Active-high reset tap-delay input );
4. IDELAYCTRL原句
IDELAYE2或者ODELAYE2原句例化時,IDELAYCTRL原句也必須例化。IDELAYCTRL通過參考時鐘REFCLK來校準(zhǔn)IDELAY2每個tap的延時值,減少處理、電壓和溫度的影響。該模塊使用REFCLK時鐘精細(xì)校準(zhǔn)。
(* IODELAY_GROUP =*) // Specifies group name for associated IDELAYs/ODELAYs and IDELAYCTRL IDELAYCTRL IDELAYCTRL_inst ( .RDY(RDY), // 1-bit output: Ready output .REFCLK(REFCLK), // 1-bit input: Reference clock input .RST(RST) // 1-bit input: Active high reset input );
5. IDELAYE2原句工程源碼與仿真測試
5.1 開發(fā)環(huán)境
硬件平臺:XC7Z035FFG676-2
軟件環(huán)境:Vivado 2017.4
仿真軟件:Vivado Simulator
5.2 軟件代碼
IDELAYE2工程源碼:
module IDELAYE2_Test( input clk_in_50M, //時鐘 input rst_n, //復(fù)位 input ld, input ce, input inc, input [4:0] tap_value_in, //設(shè)置延遲抽頭系數(shù) inputdata_in_from_pins,//輸入Pins數(shù)據(jù) output [4:0] tap_value_out, output delay_ctrl_rdy, //IDELAYCTRL 延遲校準(zhǔn)ready信號 outputdata_in_from_pins_delay//輸出Pins延遲數(shù)據(jù) ); wire pll_locked; wire clk_200M; wire clk_50M; wire REFCLK; wire RST; //IDELAYCTRL 時鐘及復(fù)位 assign REFCLK = clk_200M; assign RST = pll_locked ? ~rst_n : 1'b1; //復(fù)位DELAYCTRL原句 // ======== 例化PLL時鐘 ======== clk_wiz_0 pll0 ( // Clock out ports .clk_out1(clk_200M), // output clk_out1 .clk_out2(clk_50M), // output clk_out2 // Status and control signals .locked(pll_locked), // output locked // Clock in ports .clk_in1(clk_in_50M)); // input clk_in1 // ======== 例化 IDELAYCTRL 和 IDELAYE2 ======== (* IODELAY_GROUP = "IODELAY_Test_IO" *) // 指定關(guān)聯(lián)的IDELAY/ODELAY和IDELAYCTRL的組名 IDELAYCTRL IDELAYCTRL_inst ( .RDY(delay_ctrl_rdy), // 1-bit output: Ready output .REFCLK(REFCLK), // 1-bit input: Reference clock input .RST(RST) // 1-bit input: Active high reset input ); (* IODELAY_GROUP = "IODELAY_Test_IO" *) //指定關(guān)聯(lián)的IDELAY/ODELAY和IDELAYCTRL的組名 IDELAYE2 #( .CINVCTRL_SEL("FALSE"), // Enable dynamic clock inversion (FALSE, TRUE) .DELAY_SRC("IDATAIN"), // Delay input (IDATAIN, DATAIN) .HIGH_PERFORMANCE_MODE("FALSE"), // Reduced jitter ("TRUE"), Reduced power ("FALSE") .IDELAY_TYPE("VAR_LOAD"), // FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE 操作模式選擇 .IDELAY_VALUE(5'd9), // Input delay tap setting (0-31) 固定延遲Tap .PIPE_SEL("FALSE"), // Select pipelined mode, FALSE, TRUE .REFCLK_FREQUENCY(200.0), // IDELAYCTRL clock input frequency in MHz (190.0-210.0, 290.0-310.0).時鐘常量 .SIGNAL_PATTERN("DATA") // DATA, CLOCK input signal ) IDELAYE2_inst ( .CNTVALUEOUT(tap_value_out), // 5-bit output: Counter value output .DATAOUT(data_in_from_pins_delay), // 1-bit output: Delayed data output .C(clk_50M), // 1-bit input: Clock input,該時鐘用于驅(qū)動IDELAYE2內(nèi)部控制信號 .CE(ce), // 1-bit input: Active high enable increment/decrement input .CINVCTRL(1'b0), // 1-bit input: Dynamic clock inversion input .CNTVALUEIN(tap_value_in), // 5-bit input: Counter value input .DATAIN(1'b0), // 1-bit input: Internal delay data input .IDATAIN(data_in_from_pins), // 1-bit input: Data input from the I/O .INC(inc), // 1-bit input: Increment / Decrement tap delay input .LD(ld), // 1-bit input: Load IDELAY_VALUE input .LDPIPEEN(1'b0), // 1-bit input: Enable PIPELINE register to load data input .REGRST(RST) // 1-bit input: Active-high reset tap-delay input );
IDELAYE2 Testbench部分源碼:
initial begin //1. 測試IDELAYE2模式為"FIXED"--------.IDELAY_TYPE("FIXED") #10000 data_in_from_pins = 1'b1; //輸入脈沖 #20 data_in_from_pins = 1'b0; //2.測試IDELAYE2模式為"VARIABLE"--------.IDELAY_TYPE("VARIABLE") #200 ld = 1'b1; //控制信號 #50 ld = 1'b0; #20 //"VARIABLE"模式下,使能ce和inc,Tap=Current Value + 1 ce = 1'b1; inc = 1'b1; #40 ce = 1'b0; inc = 1'b0; #20 data_in_from_pins = 1'b1; //輸入數(shù)據(jù) #20 data_in_from_pins = 1'b0; //3.測試IDELAYE2模式為"VAR_LOAD"--------.IDELAY_TYPE("VAR_LOAD") #20 tap_value_in = 5'd5; //控制信號 #100 ld = 1'b1; //"VARIABLE"模式下,使能ld,Tap= CNTVALUEIN值 #50 ld = 1'b0; #20 data_in_from_pins = 1'b1; //輸入數(shù)據(jù) #20 data_in_from_pins = 1'b0; #20 //“VAR_LOAD”模式下,使能ce和inc,Tap=Current Value + 1 ce = 1'b1; inc = 1'b1; #40 ce = 1'b0; inc = 1'b0; #20 data_in_from_pins = 1'b1; //輸入數(shù)據(jù) #20data_in_from_pins=1'b0; end
5.3 仿真結(jié)果
1. IDELAY_TYPE="FIXED"時,仿真結(jié)果如下圖所示。
圖4:IDELAY_TYPE="FIXED"仿真結(jié)果
.IDELAY_TYPE("FIXED"), // FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE 操作模式選擇 .IDELAY_VALUE(5'd9), // Input delay tap setting (0-31) 固定延遲Tap如圖所示,當(dāng)IDELAY_TYPE="FIXED"時: data_in_from_pins_delay信號延遲:TapDelayTime=600ps+78ps*9=1302ps
2. IDELAY_TYPE="VARIABLE"時,仿真結(jié)果如下圖所示。
![867b11d4-036a-11ef-a297-92fbcf53809c.png](https://file1.elecfans.com/web2/M00/DA/FE/wKgZomYrIXmAcs1XAAEg7PiyTOw008.png)
圖5:IDELAY_TYPE="VARIABLE"仿真結(jié)果
.IDELAY_TYPE("VARIABLE"), // FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE 操作模式選擇 .IDELAY_VALUE(5'd9), // Input delay tap setting (0-31) 固定延遲Tap如圖所示,當(dāng)IDELAY_TYPE="VARIABLE"時,控制信號正向觸發(fā)一次,Tap值=Current Value + 1,如圖tap_value_out = 10,故:
data_in_from_pins_delay信號延遲:TapDelayTime=600ps+78ps*10=1380ps
3. IDELAY_TYPE="VAR_LOAD"時,使能LD信號,仿真結(jié)果如下圖所示。
![8696ed5a-036a-11ef-a297-92fbcf53809c.png](https://file1.elecfans.com/web2/M00/DA/FE/wKgZomYrIXmAbW6MAACaBnppIgc539.png)
圖6:IDELAY_TYPE="VAR_LOAD"仿真結(jié)果
.IDELAY_TYPE("VAR_LOAD"), // FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE 操作模式選擇 .IDELAY_VALUE(5'd9), // Input delay tap setting (0-31) 固定延遲Tap如圖所示,當(dāng)IDELAY_TYPE="VAR_LOAD"時,使能ld,Tap= CNTVALUEIN(tap_valude_in)值,如圖tap_value_out = 5,故:
data_in_from_pins_delay信號延遲:TapDelayTime=600ps+78ps*5=990ps
4. IDELAY_TYPE="VAR_LOAD"時,使能CE和INC信號,仿真結(jié)果如下圖所示。
![86a9b49e-036a-11ef-a297-92fbcf53809c.png](https://file1.elecfans.com/web2/M00/DA/FE/wKgZomYrIXmAZ2rSAACMfdCjCoI918.png)
圖7:IDELAY_TYPE="VAR_LOAD"仿真結(jié)果
.IDELAY_TYPE("VAR_LOAD"), // FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE 操作模式選擇 .IDELAY_VALUE(5'd9), // Input delay tap setting (0-31) 固定延遲Tap如圖所示,當(dāng)IDELAY_TYPE="VAR_LOAD"時,使能ce和inc,Tap= Current Value + 1=6,如圖tap_value_out = 6,故:
data_in_from_pins_delay信號延遲:TapDelayTime=600ps+78ps*6=1068ps.
審核編輯:劉清
-
FPGA
+關(guān)注
關(guān)注
1630文章
21799瀏覽量
606196 -
時鐘信號
+關(guān)注
關(guān)注
4文章
453瀏覽量
28670 -
Vivado
+關(guān)注
關(guān)注
19文章
815瀏覽量
66911
原文標(biāo)題:時序約束之Xilinx IDELAYE2應(yīng)用及仿真筆記
文章出處:【微信號:FPGA技術(shù)實戰(zhàn),微信公眾號:FPGA技術(shù)實戰(zhàn)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
Xilinx系列FPGA SelectIO簡介
![<b class='flag-5'>Xilinx</b>系列FPGA <b class='flag-5'>SelectIO</b>簡介](https://file.elecfans.com/web2/M00/1F/60/poYBAGGYHReAFuOHAAHyjgid_W8405.png)
FPGA | Xilinx ISE14.7 LVDS應(yīng)用
xilinx selectio IPcore使用的問題
使用synplify和生成器網(wǎng)表文件合成VIRTEX 7時報告嚴(yán)重警告
如何讓輸入驅(qū)動器到4個IDELAYE2的輸入每行都具有相同的延遲?
如何正確配置ISERDESE2?
請問如何在同一家銀行中限制IDELAYE2和IBUFDS?
一起使用DDR3控制器和IDELAYE2時發(fā)生錯誤的原因?
F240X系列DSP內(nèi)部資源介紹
Xilinx時鐘資源 ISE時序分析器
Xilinx FPGA底層資源架構(gòu)與設(shè)計規(guī)范
![<b class='flag-5'>Xilinx</b> FPGA底層<b class='flag-5'>資源</b>架構(gòu)與設(shè)計規(guī)范](https://file.elecfans.com/web1/M00/4C/02/pIYBAFqx9n2AAFEQAABDp45Yi9Q913.png)
賽靈思為各企業(yè)提供的專業(yè)的關(guān)于Xilinx的資源培訓(xùn)介紹
![賽靈思為各企業(yè)提供的專業(yè)的關(guān)于<b class='flag-5'>Xilinx</b>的<b class='flag-5'>資源</b>培訓(xùn)<b class='flag-5'>介紹</b>](https://file.elecfans.com/web1/M00/52/E5/o4YBAFsZJxGASryoAAAh0Q6uILQ601.jpg)
SelectIO體系結(jié)構(gòu)及高速SelectIO向?qū)У谋緳C(jī)模式介紹
Xilinx SelectIO IP的GUI參數(shù)詳解及應(yīng)用設(shè)計
![<b class='flag-5'>Xilinx</b> <b class='flag-5'>SelectIO</b> IP的GUI參數(shù)詳解及應(yīng)用設(shè)計](https://file.elecfans.com/web2/M00/05/5F/pYYBAGDe44mABEXzAACbc_wjiY0420.png)
《Xilinx—UG471中文翻譯》(1)IDELAYE2原語介紹
![《<b class='flag-5'>Xilinx</b>—UG471中文翻譯》(1)<b class='flag-5'>IDELAYE2</b>原語<b class='flag-5'>介紹</b>](https://file.elecfans.com/web2/M00/30/D3/pYYBAGIMopCASqA4AACEnkkpTYs178.png)
評論