• input_delay


    0 前言

    时序分析基础,底层原则:
    时序要满足latch的setup&hold时间。在要求的稳定窗口内数据不能变化。
    基本时序模型
    Stack(setup)= T-Tsu-Tco-Tdata 相邻2个时钟
    Stack(hold )= Tco + Tdata - Thd 同1个时钟
    如果 Tco 和 Tdata 延迟变大,保持时间 Stack (hold) 裕度越大
    当出现hold违例,可以增加Tdata走线长度来消除。
    如果 Tco 和 Tdata 延迟变大,建立时间 Stack (setup) 裕度越小


    1 input delay分析


    input delay 描述数据port在latch时钟沿来看,数据延后了多久才稳定。
    max_delay(分析setup)
    min_delay(分析hold )

    1.1 input delay的分类

    系统同步分为3种:(SDR上升沿、SDR下降沿、DDR)x(边沿对齐)
    源同步分为6种 :(SDR上升沿、SDR下降沿、DDR)x(中心对齐、边沿对齐)
    外部器件可能会提供 Tco\setup\hold\shew
    需要注意的隐含点:

    1. 源同步边沿对齐默认在接收侧(FPGA)内存在PLL进行移相180度。
      2.系统同步只有边沿对齐,没有中心对齐。

    1.2 Tdly 的定义

    在进行intput delay计算的时候需要考虑时钟路径的延时和数据路径的延时,
    而FPGA来看,只需要知道数据相对于时钟的延时,那么可以将时钟延时看做0,
    并且将时钟路径延时补偿到数据路径延时中得到Tdly,Tdly=数据路径-时钟路径。这样能够减少分析的变量。

    2 具体内容

    2.1 系统同步

    系统同步的数据都是出现在launch沿之后,latch是下一个沿

    2.1.1 SDR上升沿

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    已知:
    时钟名   : clk_in
    数据port : din
    T   =10ns
    Tco =1~2ns
    Tdly=0.3~0.4ns
    得到:
    set_input_delay  -clock clk_in  -max  2.4  [get_ports  din]
    set_input_delay  -clock clk_in  -min  1.3  [get_ports  din]
    需要注意是 -max 2.4 而不是  -max_delay 2.4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.1.2 SDR下降沿

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    已知:
    时钟名   : clk_in
    数据port : din
    T   =10ns
    Tco =1.5~2ns
    Tdly=0.3~0.4ns
    得到:
    set_input_delay  -clock clk_in  -max 2.4  [get_ports  din] -clock_fall 
    set_input_delay  -clock clk_in  -min 1.8  [get_ports  din] -clock_fall 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.1.2 DDR

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    已知:
    时钟名 : clk_in
    数据port : din
    T =10ns
    Tco =1.0~2ns 上升沿
    Tco =1.5~2ns 下降沿
    Tdly=0.3~0.4ns
    得到:
    set_input_delay -clock clk_in -max 2.4 [get_ports din]
    set_input_delay -clock clk_in -min 1.3 [get_ports din]
    set_input_delay -clock clk_in -max 2.4 [get_ports din] -clock_fall -add_delay
    set_input_delay -clock clk_in -min 1.8 [get_ports din] -clock_fall -add_delay
    //有个知识点:下降沿发起的数据是在下个上升沿采样。所以data path是从5开始。

    在这里插入图片描述

    2.1 源同步 中心对齐 上升沿

    在这里插入图片描述

    set_input_delay -clock [get_clocks clk_in] -min -add_delay 1.0 [get_ports din]
    set_input_delay -clock [get_clocks clk_in] -max -add_delay 9.0 [get_ports din]

    2.2 源同步 中心对齐 下降沿

    在这里插入图片描述
    set_input_delay -clock [get_clocks clk_in] -clock_fall -min -add_delay 1.0 [get_ports din]
    set_input_delay -clock [get_clocks clk_in] -clock_fall -max -add_delay 9.0 [get_ports din]

    2.3 源同步 中心对齐 DDR

    在这里插入图片描述
    set_input_delay -clock [get_clocks clk_in] -clock_fall -min -add_delay 1.0 [get_ports din]
    set_input_delay -clock [get_clocks clk_in] -clock_fall -max -add_delay 4.0 [get_ports din]
    set_input_delay -clock [get_clocks clk_in] -min -add_delay 1.0 [get_ports din]
    set_input_delay -clock [get_clocks clk_in] -max -add_delay 4.0 [get_ports din]

    2.4 源同步 边沿MMCM对齐 上升沿

    在这里插入图片描述
    set_input_delay -clock [get_clocks clk_in] -min -add_delay -1.0 [get_ports din]
    set_input_delay -clock [get_clocks clk_in] -max -add_delay 1.0 [get_ports din]

    2.5 源同步 边沿MMCM对齐 下降沿

    2.6 源同步 边沿MMCM对齐 DDR

    在这里插入图片描述
    set_input_delay -clock [get_clocks clk_in] -clock_fall -min -add_delay -1.0 [get_ports din]
    set_input_delay -clock [get_clocks clk_in] -clock_fall -max -add_delay 1.0 [get_ports din]
    set_input_delay -clock [get_clocks clk_in] -min -add_delay -1.0 [get_ports din]
    set_input_delay -clock [get_clocks clk_in] -max -add_delay 1.0 [get_ports din]

    2.7 源同步 边沿直接对齐 上升沿

    在这里插入图片描述
    set_input_delay -clock [get_clocks clk_in] -min -add_delay 9.0 [get_ports din]
    set_input_delay -clock [get_clocks clk_in] -max -add_delay 11.0 [get_ports din]

    2.8 源同步 边沿直接对齐 下降沿

    2.9 源同步 边沿直接对齐 DDR

    在这里插入图片描述
    set_input_delay -clock [get_clocks clk_in] -clock_fall -min -add_delay 4.0 [get_ports din]
    set_input_delay -clock [get_clocks clk_in] -clock_fall -max -add_delay 6.0 [get_ports din]
    set_input_delay -clock [get_clocks clk_in] -min -add_delay 4.0 [get_ports din]
    set_input_delay -clock [get_clocks clk_in] -max -add_delay 6.0 [get_ports din]

    实验

    未约束input_delay 的编译结果

    未添加约束,slack =无穷,也就是无法分析。
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    添加DDR input delay 约束

    vivado分析最差路径(上升沿和下降沿的hold都能满足)也就是下降沿发送数据,上升沿采样。
    data path的起点launch沿是5.0ns表示分析的是下降沿发起的数据。进过3.091ns到达reg.D
    从destination clock path 窗口看到,latch沿是10.0ns,正好符合下降沿发送数据,上升沿采样。
    时钟从clk_in port 经过bufg等延时,再减去setup就能得到required time。可以看到setup很小只有0.007ns。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    参考

    https://my.oschina.net/msxbo/blog/3122304

  • 相关阅读:
    系统安全分析与设计
    Kafka入门
    js数据类型和判断数据类型的方法
    【开发记录】基于C++,使用QT+VS编写软件
    文心一言 VS 讯飞星火 VS chatgpt (115)-- 算法导论10.2 8题
    基于Transformer的目标检测:原理、应用与未来展望
    初探Git:理解和使用版本控制的魔法
    基于 ARM + FPGA 的 EtherCAT 主站设计及实现
    南大通用的GBase 8s 图形化管理工具介绍
    类型转换
  • 原文地址:https://blog.csdn.net/qq_32752869/article/details/125616702