同步时序基础
一条同步路径
跳转到“一条同步路径”flowchart LR R1["源寄存器"] -->|"Tco"| L["组合逻辑 + 布线延迟"] --> R2["目的寄存器"] C["时钟"] --> R1 C --> R2建立检查要求数据在下一个有效时钟沿之前足够早地稳定:
Tclk >= Tco + Tlogic + Trouting + Tsetup + clock_uncertainty保持检查要求数据在当前采样沿之后继续稳定一小段时间。建立违例通常通过降低逻辑深度、流水化或改善布局解决;保持违例不能靠降低时钟频率解决。
读懂时序报告
跳转到“读懂时序报告”| 指标 | 含义 | 判断 |
|---|---|---|
| Slack | 要求时间减实际到达时间 | >= 0 才通过 |
| WNS | 最差负裕量 | 首先处理最差路径 |
| TNS | 所有负裕量之和 | 反映违例规模 |
| Unconstrained paths | 未被约束的路径 | 不能当作“无需检查” |
达到 0 负裕量只是最低签核条件,还要确认所有主时钟、生成时钟、I/O 和跨时钟路径都被正确识别。
亚稳态
跳转到“亚稳态”异步输入或跨时钟域信号可能在目的寄存器采样窗口内变化,使寄存器进入暂时不确定状态。亚稳态不能被逻辑完全消除,只能把传播概率降到可接受水平:
- 单比特电平:使用两级或更多级同步器。
- 脉冲:用握手、脉冲展宽或 toggle 同步。
- 多比特数据:用异步 FIFO 或握手保持数据稳定。
- 复位:通常异步置位、同步释放,并分别在各时钟域处理。
关键判断
跳转到“关键判断”- 功能仿真通过不代表时序通过。
- 时钟不是普通数据线;应使用专用时钟资源和正确约束。
set_false_path不是修复工具,只能用于确实不需要时序检查且结构已经安全的路径。- 时序收敛应从架构、流水和约束入手,而不是盲目增加综合“努力等级”。