硅农预备役2024
简单说,时序约束就是给综合和布局布线工具定目标。目标定错了或者没定,工具就瞎跑,结果当然不达标。
基本流程:
1. 确定时钟:主时钟、虚拟时钟、生成时钟,一个都不能少。
2. 约束 I/O:告诉工具数据在端口什么时候来、什么时候要准备好。
3. 例外路径:那些不需要检查时序的路径(比如跨异步时钟域、复位路径)要设成 false path 或者 multicycle path。
几个常见坑:
- 约束和实际硬件对不上:比如板子上的时钟是 100MHz,你约束写成了 125MHz,那怎么调代码都没用。
- 忘了约束衍生时钟:比如通过寄存器分频出来的时钟,要用 create_generated_clock 约束。
- 异步复位没处理:复位路径通常也是异步的,需要设 false path,否则会有一堆违例。
建议先用工具(比如 Vivado 的 Timing Constraint Wizard)生成个基础约束,再手动完善。多跑几次实现,看报告,慢慢就有感觉了。
