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

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

3天内不再提示

Idelay对时序的补救

冬至子 来源:Bug记录 作者:woodfan 2023-06-16 11:26 次阅读

在高速信号采集的过程中,经常会因为电路设计或者其他原因,原本设计好对应的data_clk与data经过线路传输之后在接收端时序上不能很好的对应,这可能会造成采样数据的错位。

如果用了各种物理电路上的办法都没法解决后,可以尝试使用Idelay(针对Xilinx,Altera应该也有相应的原语)。

Xilinx每个系列可能Idelay的名字会有一些差异,但差异不大,在K7系列下,Idelay的原语叫做Idelay2。

Idelay2原语示例:

(* IODELAY_GROUP = "RX_FRAME" *) // Specifies group name for associated IDELAYs/ODELAYs and IDELAYCTRL
 IDELAYE2 #(
 .CINVCTRL_SEL("FALSE"), // Enable dynamic clock inversion (FALSE, TRUE)
 .DELAY_SRC("DATAIN"), // 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(INIT_VALUE), // 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(cnt_value), // 5-bit output: Counter value output
 .DATAOUT(rx_frame_dly), // 1-bit output: Delayed data output
 .C(sys_clk), // 1-bit input: Clock input
 .CE(1'b0), // 1-bit input: Active high enable increment/decrement input
 .CINVCTRL(1'b0), // 1-bit input: Dynamic clock inversion input
 .CNTVALUEIN(tap_value), // 5-bit input: Counter value input
 .DATAIN(rx_frame), // 1-bit input: Internal delay data input
 .IDATAIN(1'b0), // 1-bit input: Data input from the I/O
 .INC(1'b0), // 1-bit input: Increment / Decrement tap delay input
 .LD(1'b1), // 1-bit input: Load IDELAY_VALUE input
 .LDPIPEEN(1'b0), // 1-bit input: Enable PIPELINE register to load data input
 .REGRST(1'b0) // 1-bit input: Active-high reset tap-delay input
 );

针对其中经常用到的变量,功能如下:

  • DELAY_SRC常量,这个常量可以选DATAIN或IDATAIN,区别在于IDATAIN的数据输入要求经过BUF产生,常用于BUF的输出信号,Input端口信号;DATAIN只要求FPGA内部逻辑产生的信号就可以。
  • IDELAY_TYPE,设置IDELAY2的模式;FIXED代表延时值固定,一般用在确定好参数后使用,VARIBLE,VAR_LOAD,VAR_LOAD_PIPE都是动态改变延时值,VARIBLE可以自动增大减小,后两个是根据CINVALUEIN端口动态改变延时值,一般选用VAR_LOAD。
  • IDELAY_VALUE,是初始化的值,在FIXED模式下,就是固定的延时值
  • REFCLK_FREQUENCY,指的Idelay的参考时钟的频率,一般选用200M,这个后面会具体讲。
  • SIGNAL_PATTERN,这个有DATA和CLOCK两个选项,影响Vivado对信号时序分析的路径。

端口中,

  • CNTVALUEIN是设置延时值,用于手动调试;
  • CNTVALUEOUT输出当前延时值,便于调试观测;
  • C是数据时钟,但CE不是时钟使能,而是延时值tap自动增加减少使能,所以我选择拉低;
  • CINVCTRL,INC,LDPIPEEIN,REGRST不怎么用,全拉低;
  • 在上面的DELAY_SRC选择了哪一个,就在对应的数据端口连接数据,另一个数据端口拉低,比如DELAY_SRC设定为"DATAIN",选择DATAIN端口输入数据,IDATAIN端口拉低;
  • 因为需要手动调节延时值,所以LD拉高,只有LD拉高才能动态载入CNTVALUEIN的延时值

前面说到参考时钟,Idelay之所以延时,CINVALUEIN对应的延时值多少就跟这个地方有关系了,参考时钟不是随便设的,这跟另一个原语IDELAYCTRL有关:

(* IODELAY_GROUP = "RX_FRAME" *) // Specifies group name for associated IDELAYs/ODELAYs and IDELAYCTRL
 IDELAYCTRL IDELAYCTRL_inst (
 .RDY(idelay_rdy), // 1-bit output: Ready output
 .REFCLK(ref_clk), // 1-bit input: Reference clock input
 .RST(rst) // 1-bit input: Active high reset input
 );

这个原语端口很少,连接对应200M的参考时钟,复位信号,输出一个ready信号;

看起来这个原语并没有什么有用的输出;但其实它的作用是给Idelay2提供了延时的依据;之所以可以精确延时并不是说我们在REFCLK_FREQUENCY填一个200就可以了,而是这个IDELAYCTRL 的作用,通过(* IODELAY_GROUP = "RX_FRAME" *)将IDELAYCTRL 和Idelay2连接起来,"RX_FRAME"类似于组名,可以随意改,同一组的组名要一样。

200MHz 对应1个时钟周期5ns,Idelay将其分为64tap,每个tap延时值大概是78ps,Idelay可调的最大tap为31,也就是延时值控制在0-31tap;

同样,为了减小相同参考时钟下Idelay2与IDELAYCTRL 的FPGA内部走线延时,必须使用IODELAY_GROUP将它们绑定在一起,使用方法参考上面的做法。

注意,IDELAYCTRL 的REFCLK输入时钟一定要经过BUFG输出再接入。

效果:

没加Idelay

图片

没有加Idelay,并串转换中找不到帧头

加入Idelay

图片

加了Idelay,找到帧头

总结:

  • 使用方法都在上面,对于多bit信号可以使用generate for 生成块。
  • 调试这个的时候遇到过一个问题,C端口没有连接到正常的时钟,连接到一个根本没有定义的信号,Vivado做好事不留名的直接帮我拉低到地,导致我在VAR_LOAD模式下一直无法正常改变延时值,CNTVALUEOUT与CINVALUEIN不正确,最后打开Schematic看RTL图才找到问题。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA设计
    +关注

    关注

    9

    文章

    428

    浏览量

    26549
  • RTL
    RTL
    +关注

    关注

    1

    文章

    385

    浏览量

    59841
  • 串行通信
    +关注

    关注

    4

    文章

    576

    浏览量

    35443
  • SRC
    SRC
    +关注

    关注

    0

    文章

    60

    浏览量

    18007
  • lvds接口
    +关注

    关注

    1

    文章

    128

    浏览量

    17430
收藏 人收藏

    评论

    相关推荐

    xilinx FPGA中oddr,idelay的用法详解

    idelay2中按推荐配置,从DATAIN还是从IDATAIN输入区别为是内部延时还是从IO输入,FIXED固定延时,idelay value先输入0,,时钟是200M,其他全部接0。
    的头像 发表于 11-25 14:35 1.1w次阅读

    时钟偏移对时序收敛有什么影响呢?

    FPGA设计中的绝大部分电路为同步时序电路,其基本模型为“寄存器+组合逻辑+寄存器”。同步意味着时序路径上的所有寄存器在时钟信号的驱动下步调一致地运作。
    的头像 发表于 08-03 09:27 1444次阅读
    时钟偏移<b class='flag-5'>对时序</b>收敛有什么影响呢?

    如何为设计计算IDELAY_VALUE的值?

    我在sp601板上使用tri-ethernet-mac示例。gmii接收器接口使用IODELAY2原语来延迟接收器侧的输入信号。vhdl代码提到应该根据设计在ucf中更改IDELAY_VALUE。我
    发表于 05-28 06:40

    如何将IDELAY与IOBUF一起使用?

    大家好,我正在使用IDELAY原语来实现DDR的DQ和DQS延迟。这是我的代码:IOBUF pad_xb_dq7(.O(bus_data_in_flh [7]),. IO(xb_dq [7
    发表于 06-01 16:57

    怎么利用CPLD数字控制技术对时序电路进行改进

    本文利用CPLD数字控制技术对时序电路进行改进。CPLD(Complex Programmable Logic Device)是新一代的数字逻辑器件,具有速度快、集成度高、可靠性强、用户可重复编程或
    发表于 05-06 09:44

    随机噪声对时序抖动的影响—理论与实践

    有若干因素会对随机时序抖动产生影响,其中包括相位噪声、宽带噪声、杂散信号、压摆率、带宽。本文探究了这些噪声源,同时给出了把噪声转换为时序抖动的公式。
    发表于 05-07 13:16 756次阅读

    TFT-LCD系统时序控制模块的设计

    TFT-LCD系统时序控制模块的设计 摘要:说明时序控制模块和LCD系统中其它子模块之间的关系,对时序控制模块所要解决的时序问题进行分析。在分析问题的基础上提出一种适
    发表于 01-16 09:54 4739次阅读
    TFT-LCD系统<b class='flag-5'>时序</b>控制模块的设计

    静态时序分析在高速 FPGA设计中的应用

    介绍了采用STA (静态时序分析)对FPGA (现场可编程门阵列)设计进行时序验证的基本原理,并介绍了几种与STA相关联的时序约束。针对时序不满足的情况,提出了几种常用的促进
    发表于 05-27 08:58 70次下载
    静态<b class='flag-5'>时序</b>分析在高速 FPGA设计中的应用

    后端时序修正基本思路

    后端时序修正基本思路,后端对时序的影响从0.18开始,在整体影响中的比重也在随着工艺的变化而变得敏感。
    发表于 10-26 09:28 2931次阅读
    后端<b class='flag-5'>时序</b>修正基本思路

    深入了解时序约束以及如何利用时序约束实现FPGA 设计的最优结果

    作为赛灵思用户论坛的定期访客(见 ),我注意到新用户往往对时序收敛以及如何使用时序约束来达到时序收敛感到困惑。为帮助 FPGA设计新手实现时序收敛,让我们来深入了解
    发表于 11-24 19:37 5498次阅读
    深入了解<b class='flag-5'>时序</b>约束以及如何利用<b class='flag-5'>时序</b>约束实现FPGA 设计的最优结果

    在写Verilog时对时序约束的四大步骤的详细资料说明

    本文档的主要内容详细介绍的是在写Verilog时对时序约束的四大步骤的详细资料说明包括了:一、 时钟,二、 Input delays,三、 Output delays,四、 时序例外
    发表于 08-30 08:00 32次下载
    在写Verilog时<b class='flag-5'>对时序</b>约束的四大步骤的详细资料说明

    宽带噪声对时序抖动的影响资料下载

    电子发烧友网为你提供宽带噪声对时序抖动的影响资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
    发表于 04-29 08:46 15次下载
    宽带噪声<b class='flag-5'>对时序</b>抖动的影响资料下载

    使用Idelay对接收端时序进行补救

    同样,为了减小相同参考时钟下Idelay2与IDELAYCTRL 的FPGA内部走线延时,必须使用IODELAY_GROUP将它们绑定在一起,使用方法参考上面的做法。
    的头像 发表于 08-20 10:50 4514次阅读
    使用<b class='flag-5'>Idelay</b>对接收端<b class='flag-5'>时序</b>进行<b class='flag-5'>补救</b>

    时序约束连载03~约束步骤总结

    本小节对时序约束做最终的总结
    的头像 发表于 07-11 17:18 651次阅读
    <b class='flag-5'>时序</b>约束连载03~约束步骤总结

    某些应用下对时序要求比较高,串口输出log占用时间太长怎么办?

    某些应用下对时序要求比较高,串口输出log占用时间太长怎么办? 在某些应用场景中,对于时序的要求非常高,这就要求我们必须避免使用过多的时间来进行一些必要但是时间长的操作。其中一个典型的例子就是输出
    的头像 发表于 10-31 14:37 506次阅读