fpga系列 硬件(时序收敛):set_input_delay +最大输入延时&最小输入延时+建立时间&保持时间

Layer 1 建立时间 保持时间

最大输入延时

  • 对于最大输入延时,需确保数据在时钟的有效边沿之前已经稳定,并且满足寄存器的建立时间要求( T s e t u p T_{setup} Tsetup)。 可以表示为:
    最大输入延时 + T c l k − q + T s e t u p ≤ 时钟周期 \text{最大输入延时} + T_{clk-q} + T_{setup} \leq \text{时钟周期} 最大输入延时+Tclkq+Tsetup时钟周期

    • T c l k − q T_{clk-q} Tclkq:时钟上升沿(下降沿)到达FPGA,至FPGA内部触发器Q更新的时间。
    • T s e t u p T_{setup} Tsetup:FPGA内部触发器的建立时间
  • 如果这个条件不满足,则会产生建立时间违例(Setup Violation),表明数据可能无法在下一个时钟边沿前被正确采样。

最小输入延时

  • 对于最小输入延时,确保数据在时钟的有效边沿之后仍然保持稳定,并且满足寄存器的保持时间要求( T h o l d T_{hold} Thold)。 公式可以表示为:
    最小输入延时 ≥ T c l k − q + T h o l d \text{最小输入延时} \geq T_{clk-q} + T_{hold} 最小输入延时Tclkq+Thold

    • 如果这个条件不满足,则会产生保持时间违例(Hold Violation),表明数据可能在时钟边沿后过早变化,导致采样错误。

set_input_delay语法

  • set_input_delay用于指定输入数据引脚相对于其时钟沿的延时,主要用于数据路径中的pin2reg(输入端口到内部寄存器的延迟):
set_input_delay delay_value [-clock clock_name] [-reference_pin pin_name] [-max] [-min] [-rise] [-fall] [-add_delay] [-clock_fall] [-level_sensitive] port_list

参数说明

  • delay_value: 输入延迟的时间值,通常以纳秒(ns)为单位。
  • -clock clock_name: 指定与输入延迟相关的时钟信号。如果不指定,默认使用设计的主时钟。
  • -reference_pin pin_name: 指定参考引脚,延迟是相对于该引脚的。
  • -max: 设置最大延迟值。
  • -min: 设置最小延迟值。
  • -rise: 仅针对上升沿设置延迟。
  • -fall: 仅针对下降沿设置延迟。
  • -add_delay: 添加延迟值到现有的延迟上,而不是替换。
  • -clock_fall: 指定延迟相对于时钟的下降沿。
  • -level_sensitive: 指定延迟是电平敏感的。
  • port_list: 需要设置延迟的输入端口列表。
set_input_delay -clock { clock } -clock_fall -fall -max 20 foo // https://www.intel.cn/content/www/cn/zh/docs/programmable/683243/20-1/input-constraints-set-input-delay.html

FPGA工具将执行的操作:

  • 计算路径延时

    • 设置 set_input_delay 后,FPGA工具主要进行的是时序分析,计算从外部输入端口到内部寄存器的数据路径是否满足建立时间和保持时间的要求。
  • 生成时序报告

    • 然后工具会生成一个详细的时序报告,显示所有路径的延时情况,并指出是否满足建立时间和保持时间的要求。

set_input_delay示例

  • 假设时钟为100 MHz的(即周期为10 ns),FPGA内部寄存器的建立时间为0.5 ns。FPGA内部寄存器的保持时间为0.4 ns。外部设备到FPGA的数据传输延迟范围为2ns至6ns:
# 定义主时钟信号及其周期
create_clock -name clk_main -period 10.0 [get_ports clk] # 100MHz时钟

# 建立时间的偏移:
set_clock_uncertainty -setup 0.5 [get_clocks clk_main]  # https://www.intel.com/content/www/us/en/docs/programmable/683068/18-1/clock-uncertainty.html
#保持时间的偏移:
set_clock_uncertainty -hold 0.4 [get_clocks clk_main] 

# 设置输入延迟
set_input_delay -max 6 -clock clk_main [get_ports data_in*] # 最大输入延时
set_input_delay -min 2 -clock clk_main [get_ports data_in*] # 最小输入延时

CG

  • set_input_delay 并不是用来延迟信号的,它只是一个静态时序分析(STA)中的约束命令,用于告诉时序分析工具输入信号相对于时钟的延迟情况。它不会对设计中的信号产生任何实际的延迟效果。如果需要对输入信号进行实际延迟,必须使用 IODELAY 或其他延迟电路。
  • fpga系列 硬件(时序收敛):触发器&建立时间(setuptime)&保持时间
### 时序分析中 `set_input_delay` 命令的 `-max` 和 `-min` 参数含义 在使用PT(PrimeTime)工具进行静态时序分析(STA)时,`set_input_delay` 是一个重要的命令,用于定义输入端口相对于时钟边沿的时间约束。此命令中的 `-max` 和 `-min` 参数分别表示输入端口的最大最小延迟约束。 #### `-max` 参数 `-max` 参数定义了输入端口相对于时钟边沿的最大延迟时间。它确保数据信号到达FPGA或芯片内部逻辑的时间不会超过指定值。如果数据信号到达时间超过该值,则可能导致建立时间Setup Time)违例。 最大延迟计算公式如下: \[ \text{input delay max} = t - T_{su} \] 其中: - \( t \) 是从上游触发器的锁存(latch)到当前触发器的触发(launch)之间的间隔时间[^1]。 - \( T_{su} \) 是上游触发器的建立时间参数。 这意味着最大延迟是采集周期减去数据产生所需的建立时间。这种设定保证了即使在最大延迟情况下,数据也能满足FPGA内部逻辑的建立时间要求。 #### `-min` 参数 `-min` 参数定义了输入端口相对于时钟边沿的最小延迟时间。它确保数据信号到达FPGA或芯片内部逻辑的时间不会早于指定值。如果数据信号到达时间早于该值,则可能导致保持时间(Hold Time)违例。 最小延迟计算公式如下: \[ \text{input delay min} = T_h \] 其中: - \( T_h \) 是上游触发器的保持时间参数。 在这种情况下,最小延迟被设置为保证数据信号至少满足FPGA内部逻辑的保持时间要求。 #### `-add_delay` 参数的作用 `-add_delay` 参数通常用于双沿采样的场景。例如,在某些设计中,数据可能在时钟上升沿和下降沿都被采样。此时需要分别设置上升沿和下降沿的延迟约束。例如: ```tcl set_input_delay -clock clk -max 2.1 [get_ports data_in] set_input_delay -clock clk -max 1.9 [get_ports data_in] -clock_fall -add_delay ``` 上述命令分别为时钟上升沿和下降沿设置了不同的最大延迟约束[^2]。 #### `-source_latency_included` 的影响 在某些情况下,电路的延时不仅包括网络延时(Network Latency),还包括源延时(Source Latency)。通过使用 `-source_latency_included` 选项,可以将源延时纳入考虑范围。例如: ```tcl set_input_delay -source_latency_included -max 1.4 [get_ports data_in] ``` 这表示输入延迟的最大值已经包含了源延时的影响[^4]。 #### 输入端口的 Transition 时间 为了使逻辑综合工具、布局布线工具和STA工具能够精确计算输入端口后驱动单元的延迟,必须指定输入端口的Transition时间。Transition时间与Cell的延迟密切相关,因为它影响了输出负载的驱动能力[^5]。 ### 示例代码 以下是一个完整的 `set_input_delay` 示例: ```tcl # 设置输入端口的最大延迟 set_input_delay -clock clk -max 2.0 [get_ports data_in] # 设置输入端口的最小延迟 set_input_delay -clock clk -min 0.5 [get_ports data_in] # 如果需要考虑源延时 set_input_delay -source_latency_included -max 2.0 [get_ports data_in] set_input_delay -source_latency_included -min 0.5 [get_ports data_in] ``` #### 注意事项 - `-max` 和 `-min` 参数的值应根据具体设计的时序要求进行调整。 - 在双沿采样的场景中,需分别对时钟上升沿和下降沿设置延迟约束。 - 使用 `-source_latency_included` 时,确保输入延迟值已包含源延时的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值