威三电子  

               威三电子

LVDS系列19:Xilinx Ultrascale系I/ODELAYE3级联(二)

2026-08-04 14:17:06

浏览:

Ø  级联的仿真验证:关于延迟线的延迟量设置,使用TIME模式时,DELAY_VALUE参数设置为一致,FIXED模式每级设置相同延时,VAR_LOAD和VAR

                               

Ø  级联的仿真验证:

关于延迟线的延迟量设置,

使用TIME模式时,DELAY_VALUE参数设置为一致,FIXED模式每级设置相同延时,VAR_LOADVARIABLE模式的DELAY_VALUE设置为一致,但是后续的CE/INCLOAD等修改延迟抽头的操作可以不同,但是如不需要如此精细化的操作,将每一级同步设置相同值即可,减少逻辑复杂度;

使用COUNT模式,设置都可以不同,但推荐每一级同步设置;

 

Ø  IDELAYE3的级联:

先进行TIME模式下延时类型为FIXED2级、3级、4级的级联仿真:

 

TIME模式2级:

代码:

module top_ultraplus_idelay_cascade(

  input   wire      clk_ref_300m,

  input   wire      clk,

  input   wire      rst,

  input   wire                       load_trg,

  input   wire                       datain,

  output  wire      dout

    );

wire                                                            idelayctrl_rdy;

wire                                                            casc_out_1;

wire                  [8:0]                   cntvalueout_1;

wire                                                            dout_1;

wire                                                            casc_in_1;

wire                                                            casc_return_1;

wire                                                            casc_out_2;

wire                  [8:0]                   cntvalueout_2;

wire                                                            dout_2;

wire                                                            casc_in_2;

wire                                                            casc_return_2;

 

// cascade link

assign dout = dout_1;

assign casc_in_2 = casc_out_1;

assign casc_return_1 = dout_2;

 

IDELAYCTRL #(

                .SIM_DEVICE('ULTRASCALE')  // Must be set to 'ULTRASCALE'

              )

              IDELAYCTRL_inst (

                .RDY(idelayctrl_rdy),       // 1-bit output: Ready output

                .REFCLK(clk_ref_300m), // 1-bit input: Reference clock input

                .RST(rst)        // 1-bit input: Active high reset input. Asynchronous assert, synchronous deassert to

                                 // REFCLK.

              );

 

IDELAYE3 #(

  .CASCADE('MASTER'),          // Cascade setting (MASTER, NONE, SLAVE_END, SLAVE_MIDDLE)

  .DELAY_FORMAT('TIME'),     // Units of the DELAY_VALUE (COUNT, TIME)

  .DELAY_SRC('DATAIN'),     // Delay input (DATAIN, IDATAIN)

  .DELAY_TYPE('FIXED'),      // Set the type of tap delay line (FIXED, VARIABLE, VAR_LOAD)

  .DELAY_VALUE(1000),           // Input delay value setting

  .IS_CLK_INVERTED(1'b0),    // Optional inversion for CLK

  .IS_RST_INVERTED(1'b0),    // Optional inversion for RST

  .REFCLK_FREQUENCY(300.0),  // IDELAYCTRL clock input frequency in MHz (200.0-2667.0)

  .SIM_DEVICE('ULTRASCALE_PLUS'), // Set the device version (ULTRASCALE,ULTRASCALE_PLUS)

  .UPDATE_MODE('ASYNC')      // Determines when updates to the delay will take effect (ASYNC, MANUAL, SYNC)

) IDELAYE3_inst_1 (

  .CASC_OUT(casc_out_1),       // 1-bit output: Cascade delay output to ODELAY input cascade

  .CNTVALUEOUT(cntvalueout_1), // 9-bit output: Counter value output

  .DATAOUT(dout_1),         // 1-bit output: Delayed data output

  .CASC_IN(casc_in_1),         // 1-bit input: Cascade delay input from slave ODELAY CASCADE_OUT

  .CASC_RETURN(casc_return_1), // 1-bit input: Cascade delay returning from slave ODELAY DATAOUT

  .CE(0),                   // 1-bit input: Active high enable increment/decrement input

  .CLK(clk),                 // 1-bit input: Clock input

  .CNTVALUEIN(0),   // 9-bit input: Counter value input

  .DATAIN(datain),           // 1-bit input: Data input from the logic

  .EN_VTC(1),           // 1-bit input: Keep delay constant over VT

  .IDATAIN(),         // 1-bit input: Data input from the IOBUF

  .INC(0),                 // 1-bit input: Increment / Decrement tap delay input

  .LOAD(0),               // 1-bit input: Load DELAY_VALUE input

  .RST(rst)                  // 1-bit input: Asynchronous Reset to the DELAY_VALUE

);

 

ODELAYE3 #(

  .CASCADE('SLAVE_END'),          // Cascade setting (MASTER, NONE, SLAVE_END, SLAVE_MIDDLE)

  .DELAY_FORMAT('TIME'),     // (COUNT, TIME)

  .DELAY_TYPE('FIXED'),      // Set the type of tap delay line (FIXED, VARIABLE, VAR_LOAD)

  .DELAY_VALUE(1000),           // Output delay tap setting

  .IS_CLK_INVERTED(1'b0),    // Optional inversion for CLK

  .IS_RST_INVERTED(1'b0),    // Optional inversion for RST

  .REFCLK_FREQUENCY(300.0),  // IDELAYCTRL clock input frequency in MHz (200.0-2667.0).

  .SIM_DEVICE('ULTRASCALE_PLUS'), // Set the device version (ULTRASCALE)

  .UPDATE_MODE('ASYNC')      // Determines when updates to the delay will take effect (ASYNC, MANUAL, SYNC)

)

ODELAYE3_inst_2 (

  .CASC_OUT(casc_out_2),       // 1-bit output: Cascade delay output to IDELAY input cascade

  .CNTVALUEOUT(cntvalueout_2), // 9-bit output: Counter value output

  .DATAOUT(dout_2),         // 1-bit output: Delayed data from ODATAIN input port

  .CASC_IN(casc_in_2),         // 1-bit input: Cascade delay input from slave IDELAY CASCADE_OUT

  .CASC_RETURN(casc_return_2), // 1-bit input: Cascade delay returning from slave IDELAY DATAOUT

  .CE(0),                   // 1-bit input: Active high enable increment/decrement input

  .CLK(clk),                 // 1-bit input: Clock input

  .CNTVALUEIN(0),   // 9-bit input: Counter value input

  .EN_VTC(1),           // 1-bit input: Keep delay constant over VT

  .INC(0),                 // 1-bit input: Increment/Decrement tap delay input

  .LOAD(0),               // 1-bit input: Load DELAY_VALUE input

  .ODATAIN(),         // 1-bit input: Data input

  .RST(rst)                  // 1-bit input: Asynchronous Reset to the DELAY_VALUE

);

endmodule

代码中第1级为IDELAYE3CASCADE设置为MATER,第2级为ODELAYE3CASCADE设置为SLAVE_END

 

可以看到总延时1.933ns,设置的两级级联,每级为1000ps,不过仿真中idelaye3没有仿真体现出align_delay的延时;

1级输入datain到第2级输入casc_in_2的输入延时为45ps

2级的输入casc_in_2到输出dout_2的延时为0.944ns

2级的输出dout_2到***级的输出dout的延时为0.944ns

 

TIME模式3级:

3级延时在2级基础上,添加一个IDELAYE3作为第3级,其中CASCADE设置为,第1MASTER,第2SLAVE_MIDDLE,第3SLAVE_END

添加代码如图:

 

仿真结果:

延时2.922ns,其中dataincasc_in_3延时90ps,每级延时0.944ns

 

TIME模式4级:

4级延时在3级基础上,添加一个ODELAYE3作为第4级,其中CASCADE设置为,第1MASTER,第2SLAVE_MIDDLE,第3SLAVE_ MIDDLE,第3SLAVE_END

代码修改:

 

仿真结果:

延时3.911ns,其中dataincasc_in_4延时135ps,每级延时0.944ns

 

 

Ø  ODELAYE3的级联:

ODELAY级联就是把之前IDELAYE3的每级的IDELAYE3换成ODELAYE3ODELAYE3换成IDELAYE3,这里简单看下TIME模式下FIXED延时4ODELAYE3的仿真:

 

代码:

其中第13级为ODELAY24级为IDELAY

module top_ultraplus_odelay_cascade(

  input   wire      clk_ref_300m,

  input   wire      clk,

  input   wire      rst,

  input   wire                       load_trg,

  input   wire                       datain,

  output  wire      dout

 

    );

wire                                                            idelayctrl_rdy;

wire                                                            casc_out_1;

wire                  [8:0]                   cntvalueout_1;

wire                                                            dout_1;

wire                                                            casc_in_1;

wire                                                            casc_return_1;

wire                                                            casc_out_2;

wire                  [8:0]                   cntvalueout_2;

wire                                                            dout_2;

wire                                                            casc_in_2;

wire                                                            casc_return_2;

wire                                                            casc_out_3;

wire                  [8:0]                   cntvalueout_3;

wire                                                            dout_3;

wire                                                            casc_in_3;

wire                                                            casc_return_3;

wire                                                            casc_out_4;

wire                  [8:0]                   cntvalueout_4;

wire                                                            dout_4;

wire                                                            casc_in_4;

wire                                                            casc_return_4;

 

// cascade link

assign dout = dout_1;

assign casc_in_2 = casc_out_1;

assign casc_return_1 = dout_2;

assign casc_in_3 = casc_out_2;

assign casc_return_2 = dout_3;

assign casc_in_4 = casc_out_3;

assign casc_return_3 = dout_4;

 

IDELAYCTRL #(

                .SIM_DEVICE('ULTRASCALE')  // Must be set to 'ULTRASCALE'

              )

              IDELAYCTRL_inst (

                .RDY(idelayctrl_rdy),       // 1-bit output: Ready output

                .REFCLK(clk_ref_300m), // 1-bit input: Reference clock input

                .RST(rst)        // 1-bit input: Active high reset input. Asynchronous assert, synchronous deassert to

                                 // REFCLK.

              );

 

ODELAYE3 #(

  .CASCADE('MASTER'),          // Cascade setting (MASTER, NONE, SLAVE_END, SLAVE_MIDDLE)

  .DELAY_FORMAT('TIME'),     // (COUNT, TIME)

  .DELAY_TYPE('FIXED'),      // Set the type of tap delay line (FIXED, VARIABLE, VAR_LOAD)

  .DELAY_VALUE(1000),           // Output delay tap setting

  .IS_CLK_INVERTED(1'b0),    // Optional inversion for CLK

  .IS_RST_INVERTED(1'b0),    // Optional inversion for RST

  .REFCLK_FREQUENCY(300.0),  // IDELAYCTRL clock input frequency in MHz (200.0-2667.0).

  .SIM_DEVICE('ULTRASCALE_PLUS'), // Set the device version (ULTRASCALE)

  .UPDATE_MODE('ASYNC')      // Determines when updates to the delay will take effect (ASYNC, MANUAL, SYNC)

)

ODELAYE3_inst_1 (

  .CASC_OUT(casc_out_1),       // 1-bit output: Cascade delay output to IDELAY input cascade

  .CNTVALUEOUT(cntvalueout_1), // 9-bit output: Counter value output

  .DATAOUT(dout_1),         // 1-bit output: Delayed data from ODATAIN input port

  .CASC_IN(casc_in_1),         // 1-bit input: Cascade delay input from slave IDELAY CASCADE_OUT

  .CASC_RETURN(casc_return_1), // 1-bit input: Cascade delay returning from slave IDELAY DATAOUT

  .CE(0),                   // 1-bit input: Active high enable increment/decrement input

  .CLK(clk),                 // 1-bit input: Clock input

  .CNTVALUEIN(0),   // 9-bit input: Counter value input

  .EN_VTC(1),           // 1-bit input: Keep delay constant over VT

  .INC(0),                 // 1-bit input: Increment/Decrement tap delay input

  .LOAD(0),               // 1-bit input: Load DELAY_VALUE input

  .ODATAIN(datain),         // 1-bit input: Data input

  .RST(rst)                  // 1-bit input: Asynchronous Reset to the DELAY_VALUE

);

 

IDELAYE3 #(

  .CASCADE('SLAVE_MIDDLE'),          // Cascade setting (MASTER, NONE, SLAVE_END, SLAVE_MIDDLE)

  .DELAY_FORMAT('TIME'),     // Units of the DELAY_VALUE (COUNT, TIME)

  .DELAY_SRC('DATAIN'),     // Delay input (DATAIN, IDATAIN)

  .DELAY_TYPE('FIXED'),      // Set the type of tap delay line (FIXED, VARIABLE, VAR_LOAD)

  .DELAY_VALUE(1000),           // Input delay value setting

  .IS_CLK_INVERTED(1'b0),    // Optional inversion for CLK

  .IS_RST_INVERTED(1'b0),    // Optional inversion for RST

  .REFCLK_FREQUENCY(300.0),  // IDELAYCTRL clock input frequency in MHz (200.0-2667.0)

  .SIM_DEVICE('ULTRASCALE_PLUS'), // Set the device version (ULTRASCALE,ULTRASCALE_PLUS)

  .UPDATE_MODE('ASYNC')      // Determines when updates to the delay will take effect (ASYNC, MANUAL, SYNC)

) IDELAYE3_inst_2 (

  .CASC_OUT(casc_out_2),       // 1-bit output: Cascade delay output to ODELAY input cascade

  .CNTVALUEOUT(cntvalueout_2), // 9-bit output: Counter value output

  .DATAOUT(dout_2),         // 1-bit output: Delayed data output

  .CASC_IN(casc_in_2),         // 1-bit input: Cascade delay input from slave ODELAY CASCADE_OUT

  .CASC_RETURN(casc_return_2), // 1-bit input: Cascade delay returning from slave ODELAY DATAOUT

  .CE(0),                   // 1-bit input: Active high enable increment/decrement input

  .CLK(clk),                 // 1-bit input: Clock input

  .CNTVALUEIN(0),   // 9-bit input: Counter value input

  .DATAIN(),           // 1-bit input: Data input from the logic

  .EN_VTC(1),           // 1-bit input: Keep delay constant over VT

  .IDATAIN(),         // 1-bit input: Data input from the IOBUF

  .INC(0),                 // 1-bit input: Increment / Decrement tap delay input

  .LOAD(0),               // 1-bit input: Load DELAY_VALUE input

  .RST(rst)                  // 1-bit input: Asynchronous Reset to the DELAY_VALUE

);

 

ODELAYE3 #(

  .CASCADE('SLAVE_MIDDLE'),          // Cascade setting (MASTER, NONE, SLAVE_END, SLAVE_MIDDLE)

  .DELAY_FORMAT('TIME'),     // (COUNT, TIME)

  .DELAY_TYPE('FIXED'),      // Set the type of tap delay line (FIXED, VARIABLE, VAR_LOAD)

  .DELAY_VALUE(1000),           // Output delay tap setting

  .IS_CLK_INVERTED(1'b0),    // Optional inversion for CLK

  .IS_RST_INVERTED(1'b0),    // Optional inversion for RST

  .REFCLK_FREQUENCY(300.0),  // IDELAYCTRL clock input frequency in MHz (200.0-2667.0).

  .SIM_DEVICE('ULTRASCALE_PLUS'), // Set the device version (ULTRASCALE)

  .UPDATE_MODE('ASYNC')      // Determines when updates to the delay will take effect (ASYNC, MANUAL, SYNC)

)

ODELAYE3_inst_3 (

  .CASC_OUT(casc_out_3),       // 1-bit output: Cascade delay output to IDELAY input cascade

  .CNTVALUEOUT(cntvalueout_3), // 9-bit output: Counter value output

  .DATAOUT(dout_3),         // 1-bit output: Delayed data from ODATAIN input port

  .CASC_IN(casc_in_3),         // 1-bit input: Cascade delay input from slave IDELAY CASCADE_OUT

  .CASC_RETURN(casc_return_3), // 1-bit input: Cascade delay returning from slave IDELAY DATAOUT

  .CE(0),                   // 1-bit input: Active high enable increment/decrement input

  .CLK(clk),                 // 1-bit input: Clock input

  .CNTVALUEIN(0),   // 9-bit input: Counter value input

  .EN_VTC(1),           // 1-bit input: Keep delay constant over VT

  .INC(0),                 // 1-bit input: Increment/Decrement tap delay input

  .LOAD(0),               // 1-bit input: Load DELAY_VALUE input

  .ODATAIN(),         // 1-bit input: Data input

  .RST(rst)                  // 1-bit input: Asynchronous Reset to the DELAY_VALUE

);

 

IDELAYE3 #(

  .CASCADE('SLAVE_END'),          // Cascade setting (MASTER, NONE, SLAVE_END, SLAVE_MIDDLE)

  .DELAY_FORMAT('TIME'),     // Units of the DELAY_VALUE (COUNT, TIME)

  .DELAY_SRC('DATAIN'),     // Delay input (DATAIN, IDATAIN)

  .DELAY_TYPE('FIXED'),      // Set the type of tap delay line (FIXED, VARIABLE, VAR_LOAD)

  .DELAY_VALUE(1000),           // Input delay value setting

  .IS_CLK_INVERTED(1'b0),    // Optional inversion for CLK

  .IS_RST_INVERTED(1'b0),    // Optional inversion for RST

  .REFCLK_FREQUENCY(300.0),  // IDELAYCTRL clock input frequency in MHz (200.0-2667.0)

  .SIM_DEVICE('ULTRASCALE_PLUS'), // Set the device version (ULTRASCALE,ULTRASCALE_PLUS)

  .UPDATE_MODE('ASYNC')      // Determines when updates to the delay will take effect (ASYNC, MANUAL, SYNC)

) IDELAYE3_inst_4 (

  .CASC_OUT(casc_out_4),       // 1-bit output: Cascade delay output to ODELAY input cascade

  .CNTVALUEOUT(cntvalueout_4), // 9-bit output: Counter value output

  .DATAOUT(dout_4),         // 1-bit output: Delayed data output

  .CASC_IN(casc_in_4),         // 1-bit input: Cascade delay input from slave ODELAY CASCADE_OUT

  .CASC_RETURN(casc_return_4), // 1-bit input: Cascade delay returning from slave ODELAY DATAOUT

  .CE(0),                   // 1-bit input: Active high enable increment/decrement input

  .CLK(clk),                 // 1-bit input: Clock input

  .CNTVALUEIN(0),   // 9-bit input: Counter value input

  .DATAIN(),           // 1-bit input: Data input from the logic

  .EN_VTC(1),           // 1-bit input: Keep delay constant over VT

  .IDATAIN(),         // 1-bit input: Data input from the IOBUF

  .INC(0),                 // 1-bit input: Increment / Decrement tap delay input

  .LOAD(0),               // 1-bit input: Load DELAY_VALUE input

  .RST(rst)                  // 1-bit input: Asynchronous Reset to the DELAY_VALUE

);

 

endmodule

 

可以看到仿真结果与IDELAYE34级级联延时效果基本一致;

 

 

Ø  综合看下布局布线结果:

在综合时,级联代码中不使用casc_in或是casc_out或是casc_return等管脚,未使用的不要连接,保持悬空,不然就会报以下错误,而且其级联之间的高速连线也不要去用ila抓,否则也会布局布线失败报错;

 

综合一个IDELAYE34级级联,TIME模式FIXED延时,可以看到布线结果如下图:

下图中白色线就是其cascade级联线,可以看到上下两块就是相邻的两个RXTX_BITSLICE

可以看到每个RXTX_BITSLICE里面有IDELAYODELAYISERDESOSERDES等组件原语存在;

且这个4级级联使用的2idelay2odelay,它们处在的RXTX_BITSLICE是相邻的,处在X0Y408X0Y409

且第1级的IDELAY和第2级的ODELAY处在X0Y409的一个BITSLICE中,第3级的IDELAY和第4级的ODELAY处在X0Y408的一个BITSLICE中;

 

综合一个2级级联:

使用同一个RXTX_BITSLICE的输入输出延迟;

 

3级级联:

使用相邻两个RXTX_BITSLICE的输入输出延迟;

当然也可以使用约束指定其位置;

 

本文章由威三学院出品

对课程感兴趣可以私信联系

0
LVDS系列19:Xilinx Ultrascale系I/ODELAYE3级联(二)
Ø  级联的仿真验证:关于延迟线的延迟量设置,使用TIME模式时,DELAY_VALUE参数设置为一致,FIXED模式每级设置相同延时,VAR_LOAD和VAR
长按图片保存/分享

北京威三电子科技有限公司

突破技术壁垒,芯创智联领航未来

 


北京威三电子科技有限公司 版权所有
京ICP备2026012969号
 

热线:

159-2199-9232

 

图片展示

淘宝店铺:

威三科教

地址:

北京市延庆区辰龙国际6号楼406室

微信公众号:

北京威三电子科技有限公司 

热线:159-2199-9232

淘宝店铺:威三科教

地址:北京市延庆区辰龙国际6号楼406


微信公众号

图片展示
北京威三电子科技有限公司 版权所有| 京ICP备2026012969号
微信公众号
客服中心
热线电话
15921999232
上班时间
周一到周五
二维码
扫码关注
客服中心
热线电话
15921999232
上班时间
周一到周五
二维码
扫码关注
添加微信好友,详细了解产品
使用企业微信
“扫一扫”加入群聊
复制成功!
添加微信好友,详细了解产品
我知道了