时序约束告诉工具时钟频率和外部延迟,工具才能分析建立/保持时间;核心命令:create_clock 定义时钟、set_input_delay/set_output_delay 定义外部 IO 延迟、set_false_path 设伪路径;不加约束工具按默认分析,可能时序违规。
本文概述
时序约束是 FPGA 设计必备,面试常考:create_clock、input_delay、false_path。回答要讲清为什么要约束和怎么写。
核心要点
时序约束告诉工具时钟频率和外部延迟,用于建立/保持分析
create_clock:定义主时钟周期和波形
set_input_delay:输入数据相对时钟的延迟(外部 Tco + 走线)
set_output_delay:输出数据要求相对时钟的建立时间(外部建立)
set_false_path:跨时钟域或不需要分析的路径设为伪路径

面试官考察点
FPGA 基础题。面试官看你是否理解时序分析。重点听:工具需要知道时钟和外部延迟。
回答思路
讲工具默认不知道时钟频率和外部延迟,不约束就不分析或分析不准。
参考回答
为什么要约束。FPGA 综合/布局布线工具需要知道:
时钟频率多少(决定每个周期内逻辑能走多深);
外部 IO 延迟多少(输入数据什么时候到、输出要求什么时候稳定);
哪些路径不需要分析(跨时钟域、复位、测试逻辑)。
不写约束,工具按默认(通常 1GHz 或不分析),可能:
时序违规但工具没报,上板跑不通;
工具过度优化浪费资源;
IO 时序不对,和外部芯片通信失败。
核心约束命令。
# 1. 创建主时钟 50MHz(周期 20ns)
create_clock -name clk50 -period 20 [get_ports clk]
# 2. 输入延迟:外部数据相对时钟沿延迟 5ns
set_input_delay -clock clk50 -max 5 [get_ports data_in*]
set_input_delay -clock clk50 -min 1 [get_ports data_in*]
# 3. 输出延迟:外部芯片要求数据在时钟沿前 4ns 稳定
set_output_delay -clock clk50 -max 4 [get_ports data_out*]
# 4. 伪路径:跨时钟域不分析
set_false_path -from [get_clocks clk50] -to [get_clocks clk100]
# 5. 多周期路径:慢逻辑允许多个周期
set_multicycle_path 2 -setup -from [get_pins reg1/Q] -to [get_pins reg2/D]
| 命令 | 作用 | 典型值 |
|---|---|---|
| create_clock | 定义时钟 | 周期=1/频率 |
| set_input_delay | 输入外部延迟 | Tco+走线延迟 |
| set_output_delay | 输出外部建立 | 下游芯片建立时间 |
| set_false_path | 不分析的路径 | 跨时钟域、复位 |
| set_multicycle_path | 多周期路径 | 慢逻辑、CPU 配置 |
input_delay 怎么算。
外部芯片 Tco(时钟到输出)+ PCB 走线延迟。如 ADC Tco=3ns,走线 1ns,input_delay max=4ns。
output_delay 怎么算。
下游芯片建立时间 Tsu + 走线延迟。如 DAC Tsu=2ns,走线 1ns,output_delay max=3ns。
注意。
所有时钟都要约束(包括衍生时钟用 create_generated_clock);
跨时钟域一定要设 false_path 或异步时钟组,否则工具乱分析;
约束写完看时序报告(setup/hold slack),都要为正;
上板后用 ILA/逻辑分析仪验证实际时序。

扫码关注




























