在上一篇文章中讲述了静态时序分析的概念,以及其分类,即主要分为四种:reg2reg、reg2pin、pin2reg、pin2pin,这一篇文章就来细致分析一下reg2reg的时序分析。
首先看上面这张图,给出以下定义:
reg1:源寄存器,即信号发出端
reg2:目标寄存器,即信号接收端
Tclk1:时钟源到达reg1的延迟
Tclk2:时钟源到达reg2的延迟
Tdata:数据从源寄存器到目标寄存器的传播延时
Tco:Tclk1到达源寄存器至信号发出之间的延时
Tsu:数据建立时间
Th:数据保持时间
这里解释一下时钟延时,时钟走全局时钟网络,希望时钟到达寄存器的时间保持一致,但是现实不是这样的,到达各个寄存器的时间不同,我们称时钟到达目标寄存器和源端寄存器之间的时钟差称为时钟偏斜即Tclk2-Tclk1,称为时钟延迟。
建立时间裕量分析
数据到达时间,指的是源时钟的上升沿与数据到达目标寄存器之间的时间差,由下图分析可以得出公式:
数据到达时间(data arrival time):Tclk1+Tco+Tdata
数据到达需求时间,指的是在满足建立时间的情况下目标寄存器能够准确采样的时间,在这个事件之前,上一个时钟所发出的Q在此时间必须到达目标寄存器的D端。由下图分析可以得出公式:
数据到达需求时间(data require time)=Tcycle+Tclk2-Tsu
建立时间裕量(setup slack):在满足准确采样要求的情况下还有的余量,即数据需求时间-数据到达时间:
setup slack=Tcycle+Tclk2-Tsu-(Tclk1+Tco+Tdata)
建立时间裕量分析如下图:
下面给出一个例题:
例:已知Tcycle=10ns,pin2PLL=2ns,PLL2clk1=3ns,PLL2clk2=2ns,Tdata=3ns,Tsu=0.5ns,Tco=1ns。求setup slack、Fmax
解:由于提可知两个始终都是从PLL端出来的,那么PLL端之前的就不需要分析了,即pin2PLL无需理会,那么:
setup slack=10ns+2ns-3ns-0.5ns-1ns-3ns=4.5ns
Fmax=1/数据需求时间=222MHz
保持时间裕量分析:
数据结束时间(data finish time):数据开始时间往后延一个时钟周期,就是下一个信号到来的时间,也就是前一个信号的结束时间。由下图分析可得公式:
数据结束时间=Tclk1+Tco+Tdata+Tcycle
数据结束需求时间(Require finish time):在保持时间内保持稳定,由下图分析可得下式:
数据结束需求时间=Tclk2+Th+Tcycle
所以保持时间裕量为:
hold slack(Data finish time-Require finish time)= Tclk1+Tco+Tdata-Th-Tclk2
保持时间裕量分析如下图:
可以看出,数据保持时间的要求与Tcycle无关,所以提升时钟速率并不会影响到保持时间的裕量。
练习:已知Tcycle=10ns,pin2PLL=2ns,PLL2clk1=3ns,PLL2clk2=2ns,Tdata=3ns,Th=0.5ns,Tco=1ns,求hold slack?
hold slack=10ns+3ns+1ns+3ns-10ns-2ns-0.5ns=4.5ns
以上这个计算过程就是vivado静态时序分析的过程。
以上所述内容参考了b站尤老师的时序分析课程,如有不足之处,望不吝赐教!