建立时间(setup time)
建立时间Tsu: 时钟沿到达前,数据在输入端达到稳定的最小时间。当建立时间不合格时,可以采用降频的方式使得系统正常工作。
其中REG1为源寄存器,REG2为目的寄存器。源寄存器和目的寄存器之间存在组合逻辑电路,要使目的寄存器能够正确的接收到源寄存器的数据,则需要满足建立时间。
-
时钟偏移Tskew
由于时钟到达各个寄存器的引线长度不相同,这导致了达到各个寄存器的时钟信号的时间不相同,时钟的偏移会使得电路的建立时间和保持时间被打破,将导致数据错误和输入\输出的时序容限减少。时钟信号CLK到达源寄存器和达到目的寄存器的时间差。
-
发射沿(launch edge)和捕获沿(latch edge)
launch edge: 源寄存器开始发送数据的时钟沿
latch edge : 目的寄存器采样到数据的时钟沿
-
寄存输出时延 Tco
从时钟上升沿(下降沿)到达寄存器的时钟端,到数据从寄存器输出的时间(寄存器的固有时间,和工艺有关)
-
路径时延Tdata
数据从源寄存器Q端出发,到达目的寄存器D端所需的时间。(当路径时延过大时,可以在组合逻辑中插入寄存器,以提高建立时间余量)
-
建立时间分析
要使得目的寄存器能够正确的接收源寄存器发送的数据需要满足的条件为:
T c l k 1 + T c o + T d a t a < = T c l k + T c l k 2 − T s u T_{clk1}+ T_{co}+T_{data} <= T_{clk}+T_{clk2}-T_{su} Tclk1+Tco+Tdata<=Tclk+Tclk2−Tsu
则有:
$T_{clk}+T_{skew}-T_{su}-T_{co}-T_{data} >= 0 $
令:
s l a c k = T c l k + T s k e w − T c o − T s u − T d a t a slack = T_{clk}+T_{skew}-T_{co}-T_{su}-T_{data} slack=Tclk+Tskew−Tco−Tsu−Tdata
slack为建立时间余量,当slack大于等于0 时,则目的寄存器能够正确的接收源寄存器。若小于0,则表示目的寄存器不能够正确的接收源寄存器的数据。
-
数据到达时间(data arrival time)
敏感沿到达源寄存器,数据到达目的寄存器D端的时间
dataarrival time = launch edge + T c l k 1 + T c o + T d a t a T_{clk1}+ T_{co}+T_{data} Tclk1+Tco+Tdata
-
数据需求时间(data require time)
数据被存入目的寄存器的最短时间
data require time = latch edge + T c l k 2 T_{clk2} Tclk2
-
建立时间余量slack
slack = data require time - data arrival time =relationship+$T_{skew}-T_{su}-T_{co}-T_{data} =T_{clk}+T_{skew}-T_{su}-T_{co}-T_{data} $
relationship : latch edge 与launch edge的差值,一般为时钟的周期。
-
Fmax
Fmax是时钟约束中的一个重要参数,表示由时钟CLK驱动的寄存器中,最坏路径(在所有路径中数据延迟最大的路径)能够正常运行的最大频率。由时序图可以看出,
F m a x = 1 / ( T c l k − T s l a c k ) F_{max} = 1/(T_{clk}-T_{slack}) Fmax=1/(Tclk−Tslack)
保持时间Th(hold time)
时钟沿到达后,数据在输入端需要保持稳定的最小时间。当保持时间无法满足时,将会出现寄存失败。
- 保持时间时序分析
在保持时间分析中,launch edge和 latch edge是同一个边沿。在上图中电路是满足保持时间的。
在上图中,电路是不满足保持时间的。 由于数据比下一个上升沿到达的早,使得上升沿到来时,目的寄存器D端的数据马上要改变,在保持时间内已经不是稳定的。
-
数据到达时间
敏感沿到达源寄存器,数据到达目的寄存器D端的时间
data arrival time = launch edge + T c l k 1 + T c o + T d a t a T_{clk1}+ T_{co}+T_{data} Tclk1+Tco+Tdata
-
数据需求时间
data require time = latch edge + T c l k 2 + T h T_{clk2}+ T_{h} Tclk2+Th
-
保持时间余量
保持时间余量(hold time slack) = 数据到达时间(data arrival time ) - 数据需求时间(data require time) 即:
T h s l a c k = T d a t a + T c o − T s k e w − T h Th_{slack} = T_{data}+T_{co} -T_{skew}-T_{h} Thslack=Tdata+Tco−Tskew−Th其中 T s k e w = T c l k 2 − T c l k 1 T_{skew} = T_ {clk2}-T_{clk1} Tskew=Tclk2−Tclk1
当slack大于等于0,目的寄存器能够正确的接收源寄存器的发送的数据;当小于零时,目的寄存器不能正确的接收源寄存器的发送的数据。
由公式可以得到,保持时间余量只有组合逻辑路径时延 T d a t a T_{data} Tdata以及时钟偏斜 T s k e w T_{skew} Tskew有关( T c o T_{co} Tco和 T h T_{h} Th由寄存器的工艺决定,在选定型号后是不能改变的),与时钟频率无关,所以不满足保持时间余量系统是无法像建立时间余量那样通过降低时钟频率来使得系统正常工作;提高保持时间余量方法除了采用高性能的寄存器以降低 T h T_{h} Th,同时可以采用高质量的时钟信号,同时可以在源寄存器和目的寄存器之间增加缓冲(buffer,由两个反相器组成)以提高 T d a t a T_{data} Tdata。
-
总结
由建立时间余量和保持时间余量可知,两者是存在矛盾,建立时间要求 T d a t a T_{data} Tdata(数据传输时延)足够小,但是保持时间要求 T d a t a T_{data} Tdata(数据传输时延)足够大,所以在设计中要综合考虑 T d a t a T_{data} Tdata,以同时满足建立时间和保持时间。