0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Xilinx SelectIO资源内部的IDELAYE2应用介绍

FPGA技术实战 来源:FPGA技术实战 2024-04-26 11:33 次阅读

引言:本文我们介绍下Xilinx SelectIO资源内部IDELAYE2资源应用。IDELAYE2原句配合IDELAYCTRL原句主要用于在信号通过引脚进入芯片内部之前,进行延时调节,一般高速端口信号由于走线延时等原因,需要通过IDELAYE2原语对数据做微调,实现时钟与数据的源同步时序要求。

1. IDELAYE2在SelectIO中的位置

7系列FPGA SelectIO中HR Bank和HP bank中都有IDELAYE2模块,其在SelectIO路径位置如下图所示。

85f1e8be-036a-11ef-a297-92fbcf53809c.jpg

图1:7系列FPGA HP Bank I/O Tile

86165ff0-036a-11ef-a297-92fbcf53809c.jpg

图2:7系列FPGA HR Bank I/O tile

2. IDELAYE2延迟特性

Kintex-7器件DC and AC 开关特性手册中介绍了IDELAY延迟分辨率及最大工作时钟,如下表所示。

表1:IDELAY延迟分辨率及最大工作时钟

8632ef26-036a-11ef-a297-92fbcf53809c.png

根据上图延迟分辨率,例如当参考时钟为200MHz时,根据公式计算:

平均抽头延迟单位为Tidelayresoluion=1/(32×2×200MHz)≈78ps。

需要说明的一点是:

当抽头系数Tap=0时,输入和输出延迟时间并非为0ps,而是600ps;

当抽头系数Tap=1~31时,TapDelayTime=600ps+Tidelayresoluion*Tap。

3. IDELAYE2原句

在Vivado Language Templates中搜索IDELAY,在Verilog目录中根据工程器件家族Kintex-7选择IDELAYE2原句模板,如下图所示。

86469e22-036a-11ef-a297-92fbcf53809c.png

图3:IDELAYE2原句模板

   (* IODELAY_GROUP =  *) // 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参数为IDELAYCTRL原语的参考时钟频率,一般为200Mhz,最大频率范围根据器件手册确定。IDELAY_VALUE参数用来设置延时的tap数,范围为1~31,每个tap数的延时时间和参考时钟频率有关。

4. IDELAYCTRL原句

IDELAYE2或者ODELAYE2原句例化时,IDELAYCTRL原句也必须例化。IDELAYCTRL通过参考时钟REFCLK来校准IDELAY2每个tap的延时值,减少处理、电压和温度的影响。该模块使用REFCLK时钟精细校准。
   (* 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 开发环境

硬件平台:XC7Z035FFG676-2

软件环境:Vivado 2017.4

仿真软件:Vivado Simulator

5.2 软件代码

IDELAYE2工程源码:

module IDELAYE2_Test(
   input clk_in_50M, //时钟
   input rst_n,   //复位
   input ld,
   input ce,
   input inc,
   input [4:0] tap_value_in,     //设置延迟抽头系数
inputdata_in_from_pins,//输入Pins数据
   output [4:0] tap_value_out,
   output delay_ctrl_rdy,         //IDELAYCTRL 延迟校准ready信号
outputdata_in_from_pins_delay//输出Pins延迟数据
    );


wire pll_locked;
wire clk_200M;
wire clk_50M;
wire REFCLK;
wire RST;


//IDELAYCTRL 时钟及复位   
assign REFCLK = clk_200M; 
assign RST = pll_locked ? ~rst_n : 1'b1; //复位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" *) // 指定关联的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" *) //指定关联的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,该时钟用于驱动IDELAYE2内部控制信号
       .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; //输入数据
       #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; //输入数据
       #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; //输入数据
#20data_in_from_pins=1'b0;
end

5.3 仿真结果

1. IDELAY_TYPE="FIXED"时,仿真结果如下图所示。

8667a644-036a-11ef-a297-92fbcf53809c.png

图4:IDELAY_TYPE="FIXED"仿真结果

       .IDELAY_TYPE("FIXED"),           // FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE 操作模式选择
       .IDELAY_VALUE(5'd9),                // Input delay tap setting (0-31) 固定延迟Tap
如图所示,当IDELAY_TYPE="FIXED"时: data_in_from_pins_delay信号延迟:TapDelayTime=600ps+78ps*9=1302ps

2. IDELAY_TYPE="VARIABLE"时,仿真结果如下图所示。

867b11d4-036a-11ef-a297-92fbcf53809c.png

图5:IDELAY_TYPE="VARIABLE"仿真结果

       .IDELAY_TYPE("VARIABLE"),           // FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE 操作模式选择
       .IDELAY_VALUE(5'd9),                // Input delay tap setting (0-31) 固定延迟Tap
如图所示,当IDELAY_TYPE="VARIABLE"时,控制信号正向触发一次,Tap值=Current Value + 1,如图tap_value_out = 10,故:

data_in_from_pins_delay信号延迟:TapDelayTime=600ps+78ps*10=1380ps

3. IDELAY_TYPE="VAR_LOAD"时,使能LD信号,仿真结果如下图所示。

8696ed5a-036a-11ef-a297-92fbcf53809c.png

图6:IDELAY_TYPE="VAR_LOAD"仿真结果

       .IDELAY_TYPE("VAR_LOAD"),           // FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE 操作模式选择
       .IDELAY_VALUE(5'd9),                // Input delay tap setting (0-31) 固定延迟Tap
如图所示,当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信号,仿真结果如下图所示。

86a9b49e-036a-11ef-a297-92fbcf53809c.png

图7:IDELAY_TYPE="VAR_LOAD"仿真结果

       .IDELAY_TYPE("VAR_LOAD"),           // FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE 操作模式选择
       .IDELAY_VALUE(5'd9),                // Input delay tap setting (0-31) 固定延迟Tap
如图所示,当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
    +关注

    关注

    1629

    文章

    21735

    浏览量

    603179
  • 时钟信号
    +关注

    关注

    4

    文章

    448

    浏览量

    28559
  • Vivado
    +关注

    关注

    19

    文章

    812

    浏览量

    66501

原文标题:时序约束之Xilinx IDELAYE2应用及仿真笔记

文章出处:【微信号:FPGA技术实战,微信公众号:FPGA技术实战】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Xilinx系列FPGA SelectIO简介

    FPGA是电子器件中的万能芯片,Xilinx FPGA处于行业龙头地位更是非常灵活。FPGA管脚兼容性强,能跟绝大部分电子元器件直接对接。Xilinx SelectIO支持电平标准多,除MIPI
    发表于 08-02 09:31 6233次阅读
    <b class='flag-5'>Xilinx</b>系列FPGA <b class='flag-5'>SelectIO</b>简介

    FPGA | Xilinx ISE14.7 LVDS应用

    利用FPGA内部自带的SelectIO资源,利用ISERDESE2、 OSERDESE2,实现串-并,并-串的转换,理论速度可达到750Mb
    发表于 06-13 16:28

    xilinx selectio IPcore使用的问题

    `我在顶层简单例化了selectio IPcore,在testbench中我将差分输出端接到本身的差分输入端,得到的结果是:接收数据是发送数据的4倍,不知道哪里出了问题,用过xilinx selectio IPcore的请帮忙解
    发表于 06-08 16:33

    使用synplify和生成器网表文件合成VIRTEX 7时报告严重警告

    相匹配,应在源网表中更改SIM_DEVICE的值。未能正确设置SIM_DEVICE将阻止此设计生成比特流。严重警告[Netlist 29-335]'IDELAYE2'类型的实例'u_idelaye1'可能
    发表于 10-29 14:17

    如何让输入驱动器到4个IDELAYE2的输入每行都具有相同的延迟?

    我有一个从一个输入驱动器到4个IDELAYE2的输入,我希望每行都有相同的延迟。我认为这就是我们所说的偏斜?为什么每个端点都存在偏斜值。这是由温度引起的变化吗?我预计只有一个值。从延迟(ns)偏斜
    发表于 10-25 09:26

    如何正确配置ISERDESE2

    关于正确配置ISERDESE2进行操作,我有一个问题。我之前有一个IDELAYE2,因此输入被路由到DDLY输入。当置位复位时,所有Q输出变为低电平。当复位无效时,4个输出变为高电平,4个输出变为
    发表于 07-22 12:28

    请问如何在同一家银行中限制IDELAYE2和IBUFDS?

    我使用xc7z010来实现lvds。1.据我所知,IDELAYE2和ibufds应自动在同一区域,但如图所示,ibufds位于bank34中,idelaye2位于bank35中。2.当我使用以
    发表于 08-18 08:28

    一起使用DDR3控制器和IDELAYE2时发生错误的原因?

    你好。我最近第一次对待Vivado。我想使用DDR3内存和IDELAYE2。该设备是Kintex-7。当我一起使用DDR3控制器和IDELAYE2时发生错误,并且无法形成位文件。当我丢失
    发表于 08-20 09:40

    F240X系列DSP内部资源介绍

    F240X系列DSP内部资源介绍,喜欢的朋友下载来学习学习。
    发表于 01-06 14:41 21次下载

    Xilinx时钟资源 ISE时序分析器

    1. Xilinx 时钟资源 xilinx 时钟资源分为两种:全局时钟和第二全局时钟。 1. 全局时钟资源
    发表于 02-09 08:43 1669次阅读

    Xilinx FPGA底层资源架构与设计规范

    这一次给大家分享的内容主要涉及Xilinx FPGA内的CLBs,SelectIO和Clocking资源,适合对FPGA设计有时序要求,却还没有足够了解的朋友。
    发表于 03-21 14:48 5015次阅读
    <b class='flag-5'>Xilinx</b> FPGA底层<b class='flag-5'>资源</b>架构与设计规范

    赛灵思为各企业提供的专业的关于Xilinx资源培训介绍

    介绍赛灵思为各企业提供的专业的关于Xilinx资源培训,以及课程内容
    的头像 发表于 05-22 13:47 3416次阅读
    赛灵思为各企业提供的专业的关于<b class='flag-5'>Xilinx</b>的<b class='flag-5'>资源</b>培训<b class='flag-5'>介绍</b>

    SelectIO体系结构及高速SelectIO向导的本机模式介绍

    了解SelectIO体系结构的详细信息,包括使用纯模式或组件模式以及如何开始使用纯模式或组件模式进行设计。 该视频还介绍了高速SelectIO向导的本机模式,即t
    的头像 发表于 11-29 06:22 2514次阅读

    Xilinx SelectIO IP的GUI参数详解及应用设计

    雷达信号处理离不开高速ADC/DAC的使用,而高速ADC/DAC的信号处理对时序的要求非常苛刻。Xilinx SelectIO IP的出现满足了大多数芯片对于时序的处理需求,开发者可以高效的完成ADC/DAC驱动设计。
    的头像 发表于 07-02 17:57 5005次阅读
    <b class='flag-5'>Xilinx</b> <b class='flag-5'>SelectIO</b> IP的GUI参数详解及应用设计

    Xilinx—UG471中文翻译》(1)IDELAYE2原语介绍

    SelectIO,就是I/O接口以及I/O逻辑的总称。《UG471--SelectIO》 篇可以分成3部分:第1部分介绍I/O的电气特性,第2部分
    的头像 发表于 02-16 16:21 4431次阅读
    《<b class='flag-5'>Xilinx</b>—UG471中文翻译》(1)<b class='flag-5'>IDELAYE2</b>原语<b class='flag-5'>介绍</b>