Vivado运行完Implementation后,Design Runs都会有如下的提示:
当然Timing Summary中也会有:
从上面的Design Timing Summary中可以看出,WNS以及TNS是针对Setup Time Check的,而WHS以及TNS是针对Hold Time Check的,
Design Timing Summary对应的Tcl命令为:report_timing_summary.
WNS以及TNS,WHS以及THS是我们需要着重关注的时序报告:
WNS 代表最差负时序裕量 (Worst Negative Slack)
TNS 代表总的负时序裕量 (Total Negative Slack),也就是负时序裕量路径之和。
WHS 代表最差保持时序裕量 (Worst Hold Slack)
THS 代表总的保持时序裕量 (Total Hold Slack),也就是负保持时序裕量路径之和。
这些参数为正表示时序正常,没有违规,否则,表示时序不满足要求,时序违规。
可进一步看具体的违规路径:
可见,有两种时序路径最为重要,分别为Intra-Clock Paths和Inter-Clock Paths。
具体什么意思呢?
首先,Inter-Clock Paths表示跨时钟域路径,我们在静态时序分析时候,也就是添加时序约束时候(综合后,或者实现后),可以将其设置为伪路径,不进行时序分析。
具体来说就是:
直接进行伪路径设置。
而Intra-Clock是同时钟之间的时序路径分析,这里是需要实打实解决的地方。(改善设计,改变综合实现策略等等)
引用链接:
There are a number of timing constraints that apply to flip-flops (or other elements) that are all relative to the same clock signal. These are called intra-clock constraints, or timing, etc.
Sometimes there are timing paths or constraints that cross from one clock to another. These are called inter-clock constraints, or timing.
下面双击具体的违规路径:
可以看到这条路径上的更多的信息。包括裕量的计算,时钟路径,数据路径等。
最后,需要注意时序总结是添加时序约束后才有的报告,因此需要学会如何对时序进行约束?
但这并非易事,哪怕你知道了如何进行时序约束:
约束主时钟;
create_clock;
约束再生时钟;
create_generated_clock
输入输出延迟约束;
时序例外;
set_clock_groups
set_false_path
但需要对一个项目具体的时钟运用了如指掌是时序约束的前提,时钟关系只要设计者最明白。
这里还需要说明一点,对于主时钟的约束,有的时候是不需要手动约束的,这是建立在你对这个主时钟使用了MMCM或者PLL之类的时钟管理资源的基础上,在这些IP核定制的过程中,需要输入时钟的频率,IP生成的时候,会自动生成对输入时钟的约束,因此,如果你再次在XDC中约束一遍,会出现Warning,显示该主时钟已经约束过了,在某某XDC文件中。
好了,针对如何进行静态时序约束呢?
这里就不写了,因为已经有很多不错的博客了。
如:
FPGA时序约束教程
Vivado入门与提高