建立时间和保持时间是什么?
更新时间:2026-09-21。问题驱动短答页。直观推导见 时序为什么不满足,深入见 建立保持与亚稳态 与 静态时序分析。
一句话回答
建立时间 setup 是数据在时钟采样沿「到来之前」必须提前稳定的最短时间;保持时间 hold 是数据在沿「到来之后」还必须继续保持稳定的最短时间。 两者是触发器可靠采样的时间窗口,违背它轻则采样错误,重则进入亚稳态。
寄存器到寄存器路径
一个时钟周期里,数据从源触发器出发,经 clk→Q 延迟(Tco)、组合逻辑、布线到达目的触发器:
bash
建立要求:Tco + T_logic + T_route + T_setup ≤ T_period
保持要求:Tco + T_logic + T_route ≥ T_hold- 建立检查关心「这一拍的新数据能否在下一个沿前算稳」,决定电路最高频率。
- 保持检查关心「这一拍的数据是否在沿后停留够久、没被过快地冲掉」。
两种违例,修法相反
| setup 违例 | hold 违例 | |
|---|---|---|
| 含义 | 数据来得太晚 | 数据变得太快 |
| 降频有用吗 | 有用,周期变长即可 | 没用,与周期无关 |
| 常见修法 | 流水线切分、降频、优化关键路径、换更快单元 | 插入延迟缓冲、缩短过短路径 |
| 严重度 | 限频但可救 | 哪怕 1Hz 也错,必须修 |
hold 违例最容易被新手忽视:相邻触发器之间若只有一根直连线、延迟极小,新数据在下一级还没「Hold 住」旧值时就冲进来,即便把时钟降到极慢仍出错,所以hold 必须无条件收敛。
常见坑
- 以为降频能解决一切:hold 违例与频率无关。
- setup 紧就盲目加缓冲:加延迟只会让 setup 更差,应先优化逻辑/插寄存器。
- hold 违例靠加流水线寄存器修:方向反了,通常是在短路径插 buffer。
- 忽视时钟偏斜(skew):目的时钟偏早到会吃掉保持余量,STA 已计入,但理解它有助于看懂报告。
- 把 setup/hold 当软件可调参数:它们是物理时序约束,靠综合/布局布线收敛。
总结
setup 是数据在采样沿前要提前稳定的时间、约束 Tco+逻辑+布线+setup 不超过周期,违例说明路径太慢、决定最高频率,可通过流水线、优化、降频解决;hold 是沿后数据还需保持的时间、与时钟周期无关,违例说明数据冲得太快,再怎么降频也没用,必须在过短路径插缓冲延迟;两类违例修法相反且 hold 必须无条件收敛,时钟偏斜会同时影响两者,最终靠 STA 报告量化余量。