zoukankan      html  css  js  c++  java
  • Vivado中怎么做set_input_delay约束

    前言
    在STA中,要分析上游器件和FPGA之间的时序关系就得指定input delay。

    流程
    什么是input delay:约定上游芯片输出及时钟之间的关系。约束的目的就是看适配后的时序关系是什么样的。
    以下以源同步接口举例,上游芯片发送data和随路时钟到下游FPGA芯片端口进行接收,使用解串原语对数据进行解串。


    这里使用的DCLK为:4.464ns。时钟与数据关系是DDR中心对齐。
    40M下的建立保持时间如下:Tsu=0.72ns,Tho = 0.82ns。
    上vivado中语言模板中找模板。把Tsu、Tho抄进去对应dv_bre、dv_are、dv_bfe、dv_afe。dv_bre指的是时钟沿前稳定的时间,这个时间可以用示波器测出来,或者看datasheet上的建立保持时间(这之间的数据肯定是稳定的)。
    得到:min=Tho=0.82ns,max=T/2-Tsu=4.464/2-0.72=1.512ns;这里假定时钟和数据到FPGA的路径长度是一致的(由PCB布线保证)。
    set_input_delay -clock [get_clocks adc_dco_clk] -clock_fall -min -add_delay 0.820 [get_ports i_data_ch0_p]
    set_input_delay -clock [get_clocks adc_dco_clk] -clock_fall -max -add_delay 1.512 [get_ports i_data_ch0_p]
    set_input_delay -clock [get_clocks adc_dco_clk] -min -add_delay 0.820 [get_ports i_data_ch0_p]
    set_input_delay -clock [get_clocks adc_dco_clk] -max -add_delay 1.512 [get_ports i_data_ch0_p]

    编译分析STA结果:
    本次时钟路径:IBUFDS→BUFIO→ISERDESE  差分时钟经过IBUFDS变为单端,经过IOB中的BUFIO送入ISERDESE。

    本次数据路径:IBUFDS→ISERDESE 差分数据经过IBUFDS变成单端送入ISERDESE。
    则要求数据在2.904ns时候到来,但数据抵达时刻是1.559ns,出现了保持违例:1.559-2.904 = -1.345ns。
    也就是说数据来早了,提前撤销导致了保持违例。另一个角度说是时钟来晚了。
    所以要解决这个问题,可以让数据晚点来,或者让时钟早点来。
    对于片内逻辑间的保持不满足可以插LUT1,但接口IOB部分就没法插了,于是上网上找方法。

    参考前面参考链接可知:可使用IODELAY原语对数据进行相应的延时,达到保持时间的满足。
    这里1.345ns/78ps=18拍,即IODELAY至少需要延迟18拍;
    时序约束文件中参考下述图片写,但我还没有验证过,待验证,理论可行,估计就可以STA通过了。

    这个延时可以通过时序训练或者手动调节,找寻合适点。具体可参考:xapp524-serial-lvds-adc-interface.pdf
    如果是动态调节TAP值,那么STA就没卵用了,STA的前提是假定TAP值为定值。

    以上。







  • 相关阅读:
    Java从入门到实战之(22)数组之练习
    LeetCode343. 整数拆分
    LeetCode64. 最小路径和
    LeetCode120. 三角形最小路径和
    LeetCode37. 解数独
    实验:通过Telnet访问路由器
    telnet 命令使用方法详解,telnet命令怎么用?
    COBIT、ITIL
    500 internal privoxy error错误怎么解决?
    iPhone12有充电器和耳机吗
  • 原文地址:https://www.cnblogs.com/kingstacker/p/13433676.html
Copyright © 2011-2022 走看看