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)&保持时间
参考资源链接:[Vivado XDC约束技巧之I/O篇:时序约束与实现](https://wenku.youkuaiyun.com/doc/6412b791be7fbd1778d4ac24?utm_source=wenku_answer2doc_content) 在使用Vivado进行FPGA设计时,掌握XDC约束的使用是至关重要的,尤其是在进行时序分析时。XDC约束通过一系列命令来指导工具如何处理时序问题,确保设计满足特定的时间要求。下面将结合具体的XDC命令和时序分析的要求,给出一个应用示例。 首先,我们需要了解set_input_delayset_output_delay这两个命令。set_input_delay用于设置输入端口的时序要求,而set_output_delay用于设置输出端口的时序要求。这两个命令的基本语法如下: set_input_delay -clock [clock_name] -max [max_delay] -min [min_delay] [input_ports] set_output_delay -clock [clock_name] -max [max_delay] -min [min_delay] [output_ports] 在实际应用中,你可能会遇到这样的情况:输入信号需要在特定的时钟边沿前到达FPGA输入端口,而输出信号则需要在特定的时钟边沿后被驱动。例如,假设有一个外部时钟clk_ext,频率为100MHz,即周期为10ns,我们需要为FPGA输入端口input_port设置一个最大延时为2ns,最小延时为1ns的约束,以确保信号能在时钟的上升沿前到达: set_input_delay -clock clk_ext -max 2.0 -min 1.0 [get_ports input_port] 对于输出端口,假设有一个输出信号output_port需要在下一个时钟周期的上升沿后至少1.5ns输出: set_output_delay -clock clk_ext -max 1.5 [get_ports output_port] 除了对输入输出端口直接进行时序约束外,还可以使用set_max_delayset_min_delay命令来指定不经过时序元件的组合逻辑路径的时序要求。例如,如果某个组合逻辑路径在实现时被识别为问题路径,我们可以指定其最大延迟为5ns: set_max_delay -from [get_ports input_port] -to [get_ports output_port] 5.0 使用这些命令时,需要确保为所有关键的输入输出端口添加约束,并针对每一个端口具体分析其在实际电路中的时序要求。同时,也需要注意FPGA的板级走线和外部器件可能引入的延时。 在进行时序分析时,Vivado会根据这些约束进行检查,确保设计满足时序要求。如果发现违反约束的路径,Vivado会报告相关的时序违规,并且可以提供修复建议。 为了更深入地掌握XDC约束和时序分析技巧,建议阅读《Vivado XDC约束技巧之I/O篇:时序约束与实现》一书。这本书详细介绍了XDC约束在I/O时序控制方面的高级应用,将帮助你更好地理解XDC约束的细节以及如何有效地应用于你的FPGA设计中,从而提升设计的整体性能和可靠性。 参考资源链接:[Vivado XDC约束技巧之I/O篇:时序约束与实现](https://wenku.youkuaiyun.com/doc/6412b791be7fbd1778d4ac24?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值