加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

時序約束之Xilinx IDELAYE2應(yīng)用及仿真筆記

04/27 10:55
5043
閱讀需 23 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

引言:本文我們介紹下Xilinx SelectIO資源內(nèi)部IDELAYE2資源應(yīng)用。IDELAYE2原句配合IDELAYCTRL原句主要用于在信號通過引腳進(jìn)入芯片內(nèi)部之前,進(jìn)行延時調(diào)節(jié),一般高速端口信號由于走線延時等原因,需要通過IDELAYE2原語對數(shù)據(jù)做微調(diào),實(shí)現(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。

需要說明的一點(diǎn)是:當(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 = <iodelay_group_name> *) // 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   );

IDATAIN為延時前的輸入信號,DATAOUT為延時后的輸出信號。REFCLK_FREQUENCY參數(shù)為IDELAYCTRL原語的參考時鐘頻率,一般為200Mhz,最大頻率范圍根據(jù)器件手冊確定。IDELAY_VALUE參數(shù)用來設(shè)置延時的tap數(shù),范圍為1~31,每個tap數(shù)的延時時間和參考時鐘頻率有關(guān)。

4. IDELAYCTRL原句

IDELAYE2或者ODELAYE2原句例化時,IDELAYCTRL原句也必須例化。IDELAYCTRL通過參考時鐘REFCLK來校準(zhǔn)IDELAY2每個tap的延時值,減少處理、電壓和溫度的影響。該模塊使用REFCLK時鐘精細(xì)校準(zhǔn)。

   (* IODELAY_GROUP = <iodelay_group_name> *) // 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ù)???input?data_in_from_pins,??????//輸入Pins數(shù)據(jù)   output [4:0] tap_value_out,   output delay_ctrl_rdy,         //IDELAYCTRL 延遲校準(zhǔn)ready信號???output?data_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ù)???????#20?data_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=1302ps2. IDELAY_TYPE="VARIABLE"時,仿真結(jié)果如下圖所示。

圖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=1380ps3. IDELAY_TYPE="VAR_LOAD"時,使能LD信號,仿真結(jié)果如下圖所示。

圖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=990ps4. IDELAY_TYPE="VAR_LOAD"時,使能CE和INC信號,仿真結(jié)果如下圖所示。

圖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.

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
XC7A200T-2FBG484I 1 AMD Xilinx Field Programmable Gate Array, 16825 CLBs, 1286MHz, 215360-Cell, CMOS, PBGA484, FBGA-484

ECAD模型

下載ECAD模型
$325.32 查看
EP4CE6F17I7N 1 Intel Corporation Field Programmable Gate Array, 392 CLBs, 472.5MHz, 6272-Cell, PBGA256, 17 X 17 MM, 1 MM PITCH, LEAD FREE, FBGA-256
$44.04 查看
XC6SLX25-3FTG256I 1 AMD Xilinx Field Programmable Gate Array, 1879 CLBs, 862MHz, 24051-Cell, CMOS, PBGA256, 17 X 17 MM, 1 MM PITCH, LEAD FREE, FBGA-256

ECAD模型

下載ECAD模型
$344.14 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

專注FPGA技術(shù)開發(fā),涉及Intel FPGA、Xilinx FPGA技術(shù)開發(fā),開發(fā)環(huán)境使用,代碼風(fēng)格、時序收斂、器件架構(gòu)以及軟硬件項(xiàng)目實(shí)戰(zhàn)開發(fā),個人公眾號:FPGA技術(shù)實(shí)戰(zhàn)。