在ISE时代,很多工程师习惯使用SmartExplorer的方法实现时序收敛。首先,这种方法适用于时序接近收敛的情形;同时,这种方法其实是一种扫描策略的方法,无需工程师过多关注。因此,在很多案例中,这种方法就显得简单且高效,但其不利之处在于工程师们并没有真正找到导致时序违例的根本原因。
Vivado则不同。Vivado提供了一套完备的时序收敛方法,也就是我们这里说的Baseline,使得时序收敛变得有章可循,这得益于Vivado强大的设计分析能力。不得不说的是这个能力的亮点之一是Vivado支持Tcl脚本,工程师除了使用已有Tcl命令外,还可自己编写脚本进行深入分析。
Baseline分两个阶段。第一阶段是创建基本的约束,也就是Baseline约束。这个过程比较简单:首先打开综合后的网表,然后使用Timing Constraints Wizard设置约束。只用设置两类约束:
- 基本时钟周期约束
- 跨时钟域约束
这里对于跨时钟域约束,先把关注点放在异步跨时钟域路径上,对于同步跨时钟域路径,工具会自动约束。此外,对于IP的约束,用户无需做任何改动和设置。还可以看到,这个阶段并不需要添加I/O约束。这是因为很多情况下时序违例都是出现在同一时钟域路径上。做好这两个基本约束,即可生成综合后的时序报告进行分析。这一点尤其重要。在ISE时代,工程师们习惯了在布线后才查看时序报告,但在Vivado下,综合后就要分析时序报告。对于UltraScale系列和UltraScale Plus系列芯片,要确保综合后的WNS大于-300ps,然后再执行布局布线。这里体现的思想是尽可能早地发现设计潜在的问题,越早发现越容易解决。而且,后期布局布线会有很多优化,可能会把真正的关键路径掩盖掉,例如:布局布线后发现逻辑级数为1的路径时序违例,反倒是逻辑级数较高的路径时序收敛了。
Baseline的第二阶段是执行布局布线,且在每一步都要生成时序报告,分析时序结果。具体流程如下图所示(图片来源:Figure 112,ug949)。这里需要注意的是在每一步都要查看时序报告,确保WNS大于-300ps,然后再执行下一步。
这里有个问题,如何在每一步都生成时序报告,其实只需要设置Report Strategy,如下图所示。
这个阶段关注的是设计的内部路径。如果内部路径收敛,那么就可以添加I/O约束,再执行上图所示的步骤,确保内部路径和I/O路径时序收敛。最后,如果需要,可以对约束进行微调,比如添加多周期路径约束。由此可见,Baseline的方法是分阶段有目的的添加约束,不同阶段关注不同类型的路径,再逐步完善约束,最终达到时序收敛。