凡亿教育-小文
凡事用心,一起进步
打开APP
公司名片
凡亿课堂 | 面试指南
当前位置: 首页 面试指南
FPGA时序约束怎么写?create_clock、set_input_delay、setup/hold怎么分析?FPGA面试
浏览量:228
2026-10-07 10:02:54
一句话答案

时序约束告诉工具时钟频率和 IO 时序,create_clock 定义主时钟,create_generated_clock 定义派生时钟;set_input_delay/set_output_delay 约束外部 IO 时序;工具分析 setup(建立时间,数据要在时钟沿前稳定)和 hold(保持时间,数据要在时钟沿后保持);违例要降频、改流水线、优化路径。

本文概述

时序约束是 FPGA 设计必备,面试常考:create_clock、input_delay、setup/hold、违例解决。回答要给约束命令和分析。

核心要点

  • create_clock 定义主时钟:周期、占空比、波形(上升沿/下降沿位置)

  • create_generated_clock 定义派生时钟(分频/倍频/PLL 输出)

  • set_input_delay:输入数据相对于时钟的延迟(外部 Tco+板级延迟)

  • set_output_delay:输出数据要求相对于时钟的延迟(外部建立时间)

  • setup 检查:数据在下一个时钟沿前到达(Tdata < Tclk - Tsu);hold 检查:数据在当前时钟沿后保持(Tdata > Th)

FPGA 时序约束界面,create_clock、set_input_delay,时序报告 setup/hold 违例

面试官:setup 和 hold 违例分别怎么解决?为什么 hold 不能降频?

面试官考察点

FPGA 时序核心题。面试官看你是否理解时序分析。重点听:setup/hold 公式、违例解决。

回答思路

讲时序约束命令,setup/hold 公式,违例解决方法。

参考回答

基本时钟约束。

# 主时钟 50MHz,周期 20ns
create_clock -name clk -period 20 [get_ports clk]

# 派生时钟:2 分频(PLL 输出)
create_generated_clock -name clk_div2 -source [get_pins pll/CLKOUT0] \
  -divide_by 2 [get_pins reg/clk]

# 虚拟时钟(外部时钟,用于 IO 约束)
create_clock -name clk_ext -period 10

IO 约束。

# 输入延迟:外部器件 Tco=3ns + 板级 1ns = 4ns
set_input_delay -clock clk -max 4 [get_ports data_in]
set_input_delay -clock clk -min 1 [get_ports data_in]

# 输出延迟:下游器件建立时间 2ns + 板级 1ns = 3ns
set_output_delay -clock clk -max 3 [get_ports data_out]
set_output_delay -clock clk -min -1 [get_ports data_out]

  • -max 用于 setup 分析(最坏情况,延迟最大);

  • -min 用于 hold 分析(最好情况,延迟最小);

  • 输入延迟 = 外部器件时钟到输出延迟(Tco)+ 板级走线延迟;

  • 输出延迟 = 下游器件建立时间 + 板级走线延迟。

setup 和 hold 公式。

检查公式含义
Setup(建立)Tclk + Tskew ≥ Tco + Tdata + Tsu数据要在下一个时钟沿前稳定
Hold(保持)Tco + Tdata ≥ Th + Tskew数据要在当前时钟沿后保持

Setup 裕量 = Tclk - (Tco + Tdata + Tsu - Tskew)
Hold 裕量 = (Tco + Tdata) - (Th + Tskew)
裕量 > 0 满足,< 0 违例

Setup 违例解决。

  1. 降频:增大 Tclk,最直接(但可能不允许);

  2. 流水线:把长组合逻辑拆成多级,插入寄存器;

  3. 优化逻辑:减少组合逻辑层级,状态机编码优化;

  4. 物理约束:set_max_delay、关键路径布局约束;

  5. 换更快的器件/速度等级。

Hold 违例解决。

  1. 加延迟:在数据路径插入缓冲器(set_min_delay 或手动加 LUT);

  2. 降频无效:hold 检查不涉及 Tclk(同一沿发射和捕获),降频不改变 hold 裕量;

  3. 减少时钟偏斜:时钟树平衡,用全局时钟网络;

  4. 同步器:跨时钟域路径用打两拍,不做 hold 检查(set_false_path 或 set_clock_groups)。

注意。

  • 所有时钟都要约束,未约束时钟工具不分析(默认 1GHz 假定时钟);

  • 跨时钟域路径要 set_clock_groups 或 set_false_path,否则工具会分析(可能误报违例);

  • 异步复位路径不做时序分析(set_false_path through 复位);

  • 看时序报告:report_timing -setup/-hold,找最差路径。

面试官可能追问

追问 1:为什么 hold 违例不能降频?
hold 检查是同一个时钟沿发射和捕获数据(launch edge = latch edge),不涉及时钟周期 Tclk。降频增大 Tclk 但 hold 公式里没有 Tclk,所以无效。hold 违例只能加数据路径延迟或减时钟偏斜。
追问 2:set_false_path 和 set_clock_groups 区别?
set_false_path 禁用特定路径的时序分析;set_clock_groups 禁用两个时钟域之间所有路径的分析。跨时钟域用 set_clock_groups 更简洁,异步复位用 set_false_path。
追问 3:input_delay 的 max/min 怎么取?
max = 外部器件最大 Tco + 板级最大延迟(setup 用);min = 外部器件最小 Tco + 板级最小延迟(hold 用)。没有数据时用估算,留余量。
追问 4:多周期路径是什么?
set_multicycle_path 允许数据经过 N 个时钟周期才到达,用于慢逻辑(如乘法器)。setup 设 N,hold 设 N-1。减少不必要的时序压力。
追问 5:时序约束不写会怎样?
工具默认未约束时钟为 1GHz(非常严),可能报大量违例;或者工具不优化时序,实际电路可能跑不到目标频率。必须写约束。

常见失分表达

✗ 时钟不约束 — 工具不分析或默认 1GHz,时序不可控。
✗ hold 违例降频 — hold 和频率无关,降频没用。
✗ 跨时钟域不设 false_path — 工具分析异步路径,误报违例。

准备动作

1
写过 create_clock 和 input_delay 约束
2
分析过 setup/hold 违例
3
准备一个 setup 违例最终加流水线解决的案例

核心关键词

FPGA时序约束create_clockset_input_delaysetuphold时序违例set_false_path


声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。仅供学习交流使用,不构成商业目的。版权归原作者所有,如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时删除。 侵权投诉

相关文章

面试官问:PCB布局布线时,你一般按什么顺序摆放器件?

2026-10-29 23:04:27

IBIS模型怎么理解与使用?PCB仿真工程师面试SPICE与IBIS对比

2026-09-01 13:50:52

FPGA面试:外部接口的输入/输出延迟约束怎么设?时钟、地址和数据有效窗口怎么对齐

2026-10-23 14:08:19

技术岗谈薪时怎样问清楚薪资结构?工程师谈薪注意事项指南

2026-08-08 15:17:33

电子工程师面试:拿到一块完全不开机的板子怎么排?排查顺序比会不会换芯片更重要

2026-10-17 15:38:13