总体延时分为两部分 :1时钟的延时 tclk2- tclk1,也被称为时钟偏斜。
2 在两个寄存器之间 Tdata 既包括路径上的延时也可能包括做组合逻辑运算的延时。
所以我们要做时序分析就是要比对 上述两种延时的差值。
首先我们看数据到达时间 data arrival time如图红线所示
data arrival time = tclk1 +tco +tdata
接着看时钟的延时
Tsu 上升沿(采样沿)到来之前 数据建立保持时间,
clock arrival time (时钟到达时间)
data arrival time= t cycle(一个时钟周期) +tclk 2- tsu
将两种到达时间的时序放在同一张图中
把两种到达时间的差值 称为 建立时间余量 setup slack
setup slack = tcycle + tclk2 -tsu -(tclk1 +tco +tdata)
理论知识简单如上所述 接着用vivado 打开一个采用了两级寄存器的例子
首先根据上述 setup slack公式 tcycle ,对于时序分析软件来说 他就是一个未知量,所以我们建立一个约束文件 将clk 绑到相应的晶振管脚上,
添加约束文件后生成bit文件 ,完成后打开布局布线完成好的映射文件,(open inplemented design)在里面可以添加时钟约束文件,编辑时序约束。
之后回到源文件 cotrol+s保存 来保存自己对时钟的约束 可以看到下面会生成
create_clock -period 8.000 -name rx_clk -waveform {0.000 4.000} [get_ports rx_clk]
就是自己对时钟的约束。
之后 在run inplementeation 后可以看到 timing reporting 在setup中可以看到最糟糕的建立时间余量 是 6.044ns
report_timing_summary
之后右键下面的 timing summary 关闭窗口 在新生成的窗口类 report timing
Timing Summary报告把路径按照时钟域分类,每个组别下缺省会报告Setup、Hold以及Pulse Width检查最差的各10条路径,还可以看到每条路径的具体延时报告,并支持与Device View、Schematic View等窗口之间的交互。
每条路径具体的报告会分为Summary、Source Clock Path、Data Path和Destination Clock Path几部分,详细报告每部分的逻辑延时与连线延时。用户首先要关注的就是Summary中的几部分内容,发现问题后再根据具体情况来检查详细的延时数据。其中,Slack显示路径是否有时序违例,Source和Destination显示源驱动时钟和目的驱动时钟及其时钟频率, Requirement显示这条路径的时序要求是多少,Data Path显示数据路径上的延时,Logic Level显示这条路径的逻辑级数,而Clock Path Skew和 Clock Uncertainty则显示时钟路径上的不确定性。
当想要查看某一路径时 右键该路径 选择高亮 可以回到主菜单看到 布局布线之后的 device 中看到该路线 如下图所示
然后也可以双击其中一路径 然后查看具体的delay类型和时间
我们可以按照setup slack = tcycle + tclk2 -tsu -(tclk1 +tco +tdata)这个公式 来验证 set up slack的计算结果 是否一致 期间 有 clock pessimism 时钟悲观度 和 clock uncertainly 时钟不确定度 时钟悲观度 即为 共同路径 最大延时 -最小延时 而时钟不确定度由芯片决定。仔细观察时序报告便可以发现在报告路径的Slack之前有一行显示clock pessimism已经被考虑在内,在进行Setup Check时会加上一定的clock pessimism,而Hold Check时则会减去一定的clock pessimism。
CPPR(CRPR)。全称Clock Path Pessimism Removal(Clock Reconvergence Pessimism Removal),中文名“共同路径悲观去除”。它的作用是去除clock path上的相同路径上的悲观计算量。