Vivado运行完Implementation后,Design Runs都会有如下的提示:

Vivado 随笔(6) Timing Summary 相关讨论(一)_时序约束

当然Timing Summary中也会有:

Vivado 随笔(6) Timing Summary 相关讨论(一)_时序分析_02

从上面的Design Timing Summary中可以看出,WNS以及TNS是针对Setup Time Check的,而WHS以及TNS是针对Hold Time Check的,

Design Timing Summary对应的Tcl命令为:report_timing_summary.

Vivado 随笔(6) Timing Summary 相关讨论(一)_自动生成_03

WNS以及TNS,WHS以及THS是我们需要着重关注的时序报告:

WNS 代表最差负时序裕量 (Worst Negative Slack)

TNS 代表总的负时序裕量 (Total Negative Slack),也就是负时序裕量路径之和。

WHS 代表最差保持时序裕量 (Worst Hold Slack)

THS 代表总的保持时序裕量 (Total Hold Slack),也就是负保持时序裕量路径之和。

这些参数为正表示时序正常,没有违规,否则,表示时序不满足要求,时序违规。

可进一步看具体的违规路径:

Vivado 随笔(6) Timing Summary 相关讨论(一)_路径分析_04

Vivado 随笔(6) Timing Summary 相关讨论(一)_时序约束_05

可见,有两种时序路径最为重要,分别为Intra-Clock Paths和Inter-Clock Paths。

具体什么意思呢?

首先,Inter-Clock Paths表示跨时钟域路径,我们在静态时序分析时候,也就是添加时序约束时候(综合后,或者实现后),可以将其设置为伪路径,不进行时序分析。

具体来说就是:

Vivado 随笔(6) Timing Summary 相关讨论(一)_时序分析_06

直接进行伪路径设置。

而Intra-Clock是同时钟之间的时序路径分析,这里是需要实打实解决的地方。(改善设计,改变综合实现策略等等)

引用链接:

inter clock & 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.

下面双击具体的违规路径:

可以看到这条路径上的更多的信息。包括裕量的计算,时钟路径,数据路径等。

Vivado 随笔(6) Timing Summary 相关讨论(一)_时序约束_07

最后,需要注意时序总结是添加时序约束后才有的报告,因此需要学会如何对时序进行约束?

但这并非易事,哪怕你知道了如何进行时序约束:

约束主时钟;

create_clock;

约束再生时钟;

create_generated_clock

输入输出延迟约束;

时序例外;

set_clock_groups

set_false_path

但需要对一个项目具体的时钟运用了如指掌是时序约束的前提,时钟关系只要设计者最明白。

这里还需要说明一点,对于主时钟的约束,有的时候是不需要手动约束的,这是建立在你对这个主时钟使用了MMCM或者PLL之类的时钟管理资源的基础上,在这些IP核定制的过程中,需要输入时钟的频率,IP生成的时候,会自动生成对输入时钟的约束,因此,如果你再次在XDC中约束一遍,会出现Warning,显示该主时钟已经约束过了,在某某XDC文件中。

好了,针对如何进行静态时序约束呢?

这里就不写了,因为已经有很多不错的博客了。

如:

FPGA时序约束教程

VIVADO时序约束及STA基础

Vivado入门与提高