set_input_delay的理解

本文详细解释了FPGA中的set_input_delay约束,涉及输入延迟的最小值(min)和最大值(max),强调了与LVDS接口的建立时间和保持时间的关系,以及如何确保数据传输的稳定性和正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,set_input_delay约束理解

input_delay是指输入的数据到达FPGA的pad引脚时相对于时钟边沿的延迟有多大,单位是ns,数值可以是正,也可以是负。通过set_input_delay约束告诉编译器输入时钟和输入数据的相位关系。如下图所示假设时钟是没有skew的,那么下图中的input_delay就等于Clock to Out+Trace Dealy,即上游器件的时钟到触发器输出的延时+PCB上的布线延迟,即Tco+Tdelay。

2,具体案例

2.1,input delya min设置

以LVDS输入为例子,LVDS双边沿采样,时钟周期为T=5ns,假设上游器件 建立时间Tsu=1.5ns,保持时间Tho=1.2ns,那上游器件的建立和保持时间会存在如下对应关系:

 

 从图中可以看出,数据相对于时钟的最小延时min=Tho,即P1到A点的时间长度刚好满足上游器件的保持时间:

set_input_delay -clock clk -min 1.2 [get_ports dat]

假如约束的最小值min<Tho,会出现如下图示情况:即P1到A`点的时间长度不满足上游器件的保持时间:

综合上述两图,input delay最小的延时时间就是上游器件的保持时间。

2.2,input delya max设置

数据dat往后延时最大值不能超过P2的时间边沿,如超过P2边沿,即max> T/2 - Tho,会出现如下情况(双边沿是T/2,单边沿就是T):

A``不能满足满足上游器件的建立时间,

综合上述两图,input delay最大的延时时间就是上游器件的T/2 (双边沿)减去 保持时间。

min delay  ~ max delay就是数据抖动时间

### 关于SDC `set_input_delay` 过滤器的使用 在Synopsys设计约束(SDC)文件中,`set_input_delay` 是一种用于定义输入端口相对于某个时钟边沿的时间延迟的关键命令。此命令通常用来模拟数据到达芯片输入引脚所需的实际时间,并帮助静态时序分析工具评估设计是否满足时序要求。 #### 使用过滤器的目的 通过使用过滤器选项,可以更精确地指定哪些信号或路径受到特定时序约束的影响。这有助于避免不必要的全局应用约束,从而提高时序收敛的可能性并减少误报[^4]。 以下是关于如何在 `set_input_delay` 中有效使用过滤器的一些示例和说明: --- ### 示例 1: 应用到具体端口上的延迟 如果只想对某些特定端口施加输入延迟,则可以通过 `-pin` 参数来实现这一点。 ```tcl set_input_delay -clock clk_name 5 [get_ports specific_port] ``` 上述语句表示将一个固定值为5单位时间的输入延迟应用于名为 `specific_port` 的端口上,该延迟基于时钟 `clk_name` 计算得出。 --- ### 示例 2: 利用通配符匹配多个端口 当存在一组具有相似命名模式的端口时,可利用TCL中的正则表达式功能简化操作过程。 ```tcl set_input_delay -clock clk_name 7 [get_ports "*_data_in"] ``` 这里,“*”作为通配字符代表任意长度字符串;因此这条指令会对所有名称结尾带有 `_data_in` 的端口设置相同的输入延时参数。 --- ### 示例 3: 结合例外情况排除部分端口 有时候需要给大部分端口设定统一的标准,但又希望个别特殊情况能够独立处理。这时就可以先普遍适用再单独移除不需要的部分。 ```tcl # 首先为所有input ports设定了默认delay value of 8 units. set_input_delay -clock clk_name 8 [all_inputs] # 接着针对special_case_port取消之前所赋予的那个general rule effect. remove_from_collection [all_inputs] [get_ports special_case_port] set_input_delay -clock clk_name 10 [get_ports special_case_port] ``` 以上代码片段展示了如何先整体配置后再局部调整的技术手段。 --- ### 示例 4: 多条件组合筛选复杂场景下的目标对象集合 对于更加复杂的项目需求来说,可能涉及到多层逻辑关系才能最终确定下来真正关心的数据流走向或者控制信号交互方式等等细节方面的东西。那么此时就需要借助更为强大的查询机制来进行精准定位了。 ```tcl set filtered_list [filter [all_registers -data_pins] "is_hierarchical==false && load>1"] foreach reg_pin $filtered_list { set_input_delay -clock clk_name 9 ${reg_pin} } ``` 在这个例子当中我们首先获取到了所有的寄存器输出节点列表(`-data_pins`)之后进一步限定了只保留那些非层次化结构并且扇出数量大于一的目标元素形成新的子集变量`filtered_list`,最后遍历这个新创建出来的数组逐一执行相应的`set_input_delay`动作完成定制化的约束部署工作流程. --- ### 注意事项 - 如果虚拟时钟被分配了一个 `create_clock` 命令,则它必须在其他地方由 `set_input_delay` 或者 `set_output_delay` 引用[^2]。 - 对于非50%占空比的支持,在实际分析过程中表现得与50%相同,因为下降沿不会影响结果计算。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值