FPGA设计 / 工程师面试高频题 /
FPGA工程完成综合后看起来没有功能错误,但实现后的Timing Summary出现负Slack。面试官问Setup和Hold有什么区别,不能只回答一个是建立时间、一个是保持时间,还要说清数据路径最大/最小延迟和时钟偏斜的影响。
面试先说结论
Setup检查数据是否能在采样时钟边沿到来前稳定,主要受数据路径最大延迟影响;Hold检查数据是否能在采样边沿之后保持足够时间,主要受数据路径最小延迟影响。Setup违例通常需要缩短组合逻辑或布线延迟、优化流水线和时钟约束;Hold违例通常需要增加数据路径延迟或由实现工具插入延迟单元,同时检查时钟偏斜和约束是否正确。
一、核心原理与工程判断

Setup检查的是数据能不能及时到达
Setup要求数据在捕获时钟有效边沿到来前,至少提前满足器件规定的建立时间。若组合逻辑级数太多、布线太长、负载太大或时钟周期太短,数据可能赶不上采样边沿,产生Setup违例。分析时要看最大延迟路径、起点终点、逻辑级数、布线占比和时钟不确定度。
Hold检查的是数据会不会来得太快
Hold要求捕获时钟边沿之后,数据还要保持一段时间不变化。若数据路径最小延迟太短,或者时钟偏斜使捕获时钟相对提前,就可能发生Hold违例。Hold问题与时钟周期是否足够长不是同一回事,单纯降低工作频率通常不能解决Hold违例。
Vivado报告应该看哪些信息
先查看report_timing_summary中的WNS/TNS和WHS/THS,再针对失败路径执行最大延迟和最小延迟报告。重点看起点/终点、launch/capture clock、clock skew、clock uncertainty、cell delay和routing delay。若大量路径同时违例,要先检查时钟定义、generated clock、input/output delay和时钟组约束是否正确。
Setup和Hold的修复方向不同
Setup通常从减少逻辑级数、优化算法、增加流水线、降低扇出、改善布局布线和合理调整时钟频率入手。Hold通常由工具在数据路径插入延迟单元或调整布局布线来修复,也要检查时钟树和约束。不要为了消除Hold告警随意增加组合逻辑,也不要把真实路径一股脑设置为false path。
二、实际排查与设计步骤
先运行report_timing_summary,区分Setup与Hold失败数量、最差Slack和涉及时钟域。
针对Setup失败路径查看最大延迟报告,定位逻辑深度、扇出、布线和时钟约束问题;针对Hold失败路径查看最小延迟报告。
核对create_clock、create_generated_clock、set_input_delay、set_output_delay、时钟组和例外约束,确保没有错误地屏蔽真实路径。
按违例类型优化设计或实现:Setup关注缩短最大延迟,Hold关注增加最小延迟并由实现工具完成修复;最终重新实现并复核全局时序报告。
三、面试中的常见失分点
误区1:认为Setup和Hold都可以通过降低时钟频率解决,忽略Hold由最小路径延迟和时钟关系决定。
误区2:只看WNS一个数字,不查看具体失败路径、时钟偏斜和约束是否正确。
四、面试官可能继续追问
面试追问:如果Setup全部通过,但Hold还有少量负Slack,是否可以直接交付?
不能只看Setup。Hold违例同样可能造成硬件采样错误,必须通过实现工具修复并复核。还要确认所有目标时钟域、接口约束和不同工作条件下的时序报告都满足要求,不能把剩余负Slack当成无关告警。
相关业务与课程
围绕电子工程师岗位能力,了解对应方向的系统课程。

扫码关注






























