概述
在FPGA设计中,set_max_delay和set_min_delay是用于约束跨时钟域(CDC)路径、异步接口或组合逻辑环路的时序约束。它们允许设计者手动指定路径的延迟上下界,确保信号在目标时钟域内稳定采样。2026年,随着FPGA在AI加速、5G基带和雷达信号处理中的应用,这些约束在高速接口和多die设计中变得尤为重要。
应用场景
set_max_delay和set_min_delay常用于以下场景:
- 跨时钟域路径:如异步FIFO或握手逻辑,限制数据从源时钟域到目标时钟域的延迟。
- 异步端口:如外部输入信号,确保其在时钟沿前稳定。
- 组合逻辑环路:防止振荡或确保延迟在指定范围内。
- 高速串行接口:如JESD204B,匹配延迟以满足协议要求。
- 多die FPGA:如Xilinx Versal,约束die-to-die路径。
约束编写示例
以下是一个典型的XDC约束示例:
create_clock -name clk_a -period 10.0 [get_ports clk_a]
create_clock -name clk_b -period 15.0 [get_ports clk_b]
set_max_delay -from [get_cells -hierarchical -filter {NAME =~ *reg_a*}] -to [get_cells -hierarchical -filter {NAME =~ *sync_1*}] 8.0
set_min_delay -from [get_cells -hierarchical -filter {NAME =~ *reg_a*}] -to [get_cells -hierarchical -filter {NAME =~ *sync_1*}] 2.0该约束限制了从reg_a到sync_1的路径延迟在2ns到8ns之间,确保数据在clk_b周期内稳定。
注意事项
- set_max_delay和set_min_delay通常成对使用,覆盖setup和hold要求。
- 路径匹配语法必须正确,否则约束可能被忽略。
- set_max_delay不能替代同步器设计,必须配合两级寄存器或异步FIFO。
- 约束值需根据时钟周期和逻辑级数合理设置,避免过紧或过松。
2026年趋势
2026年,随着FPGA工艺进步和工具链优化,set_max_delay和set_min_delay的语法更加灵活,支持更复杂的路径匹配和动态调整。设计者应关注工具文档(如Xilinx UG903)以获取最新特性。



