时序分析和时序约束基础
时序分析和时序约束基础
1. 时序分析
以下图所示的电路为例,电路由两个 D 触发器 Reg1 和 Reg2 组成,数据从 Reg1 的 D 端口输入,经过 Reg1 的寄存从 Reg1 的 Q 端口输出,再经过一段组合逻辑电路,输入 Reg2 的 D 端寄存。
为了能够使数据正确的被 Reg2 寄存,需要满足以下时序。
- 建立时间
T
s
u
T_{su}
Tsu
数据在时钟上升沿 (假设使用的时钟边沿为上升沿) 到来前需要稳定一段时间,这段时间的最小值即为建立时间,当稳定时间小于建立时间时数据无法被寄存。 - 保持时间
T
h
T_h
Th
数据在时钟上升沿 (假设使用的时钟边沿为上升沿) 到来后需要保持一段时间,这段时间的最小值即为保持时间,当稳定时间小于保持时间时数据无法被寄存。 - 传播延时
T
c
o
T_{co}
Tco
当时钟上升沿到来时,数据从同一个寄存器的 D 端口稳定传输到 Q 端口所需要的时间。即 Q 端口并不是在时钟上升沿到来时立刻变化。 - 数据组合逻辑传输时间
T
d
a
t
a
T_{data}
Tdata
数据在组合逻辑电路中传输耗费的时间。 - 时钟偏斜
T
s
k
e
w
T_{skew}
Tskew
同一时钟信号到达源寄存器 (Reg1) 和目的寄存器 (Reg2) 的差值,一般为到达目的寄存器的时间减去到达源寄存器的时间。 - 时间裕度
T
s
l
a
c
k
T_{slack}
Tslack
当数据到达 Reg2 的 D 端口时,此时还未到达 Reg2 的建立时间,中间的差值即为时间裕度。
所有的参数在下图的时序图中标出,其中 Clk1、D1、Q1 分别为 Reg1 的时钟信号、D 端口信号、Q 端口信号,Clk2、D2、Q2 分别为 Reg2 的时钟信号、D 端口信号、Q 端口信号。
经过简单分析可以得到下面的公式,其中
T
c
l
k
T_{clk}
Tclk 为时钟周期。
T
c
o
+
T
d
a
t
a
+
T
s
l
a
c
k
+
T
s
u
−
T
s
k
e
w
=
T
c
l
k
T_{co} + T_{data} + T_{slack} + T_{su} - T_{skew} = T_{clk}
Tco+Tdata+Tslack+Tsu−Tskew=Tclk
-
为了满足建立时间,需要让 D2 端口的信号比 Reg2 的时钟沿提前一个建立时间到达,需要满足
T c o + T d a t a < T c l k + T s k e w − T s u T_{co} + T_{data} < T_{clk} + T_{skew} - T_{su} Tco+Tdata<Tclk+Tskew−Tsu
也可以通过 T s l a c k T_{slack} Tslack 判断,当 T s l a c k T_{slack} Tslack 为正值时,时序满足, T s l a c k T_{slack} Tslack 越大时间裕度越好,即
T s l a c k = T c l k + T s k e w − T c o − T d a t a − T s u > 0 (1.2.1) \tag{1.2.1} T_{slack} = T_{clk} + T_{skew} - T_{co} - T_{data} - T_{su} > 0 Tslack=Tclk+Tskew−Tco−Tdata−Tsu>0(1.2.1) -
为了满足保持时间,以 D2 端口为例,D2 端口应该在保持时间内都稳定不变,即新的 D2 端口信号应该晚于 Reg2 时钟沿一个保持时间到达,即
T c o + T d a t a > T s k e w + T h (1.2.2) \tag{1.2.2} T_{co} + T_{data} > T_{skew} + T_h Tco+Tdata>Tskew+Th(1.2.2)
时序分析中需要同时满足建立时间和保持时间,一般来说因为 T d a t a T_{data} Tdata 的存在,保持时间基本都会满足。
2. 时钟约束
时序约束就是我们给出描述电路功能的硬件语言代码,以及要求的时序条件,比如时钟周期、时钟偏斜、输入延迟、扇出、面积等,EDA 软件再根据要求,从内部器件库中选择合适的器件搭建电路。
以上图所示的电路结构为例,Module模块中是需要综合的部分,也即我们的硬件语言代码描述的部分,Module中路径可以分为四种,分别为
- Path1: 前级寄存器的 clk 端口到后级寄存器的 D 端口
- Path2: 模块的输入端口到第一个寄存器的 D 端口
- Path3: 最后一个寄存器的 D 端口到模块的输出端口
- Path4: 模块的输入端口到模块的输出端口
首先分析四条路经中唯一没有和模块外界直接连接的路径 Path1,根据 1.2 节中的公式 (1.2.1) 和 (1.2.2),其中
T
c
o
T_{co}
Tco、
T
d
a
t
a
T_{data}
Tdata、
T
s
u
T_{su}
Tsu、
T
h
T_h
Th 这些参数均与器件相关,EDA 软件可直接从器件库中计算得出,但是对于
T
c
l
k
T_{clk}
Tclk、
T
s
k
e
w
T_{skew}
Tskew 这些与时钟相关的参数,因为时钟一般由模块外部的晶振、PLL 等提供,EDA 软件是不知道的,所以需要我们告诉 EDA 软件这些跟时钟有关的参数,这个过程也就是时钟约束。
关于时钟的参数除了我们在 1.2 节中提到的周期、偏斜以外,还有延迟、抖动、转换,下面依次介绍。
同样以两个相邻的寄存器的数据传输为例,如图所示由 PLL 生成的源时钟信号 CLK_SOURCE 经过一段路径传输到模块的时钟输入端口 CLK_IN,进而又在模块中分别传输到 Reg1 和 Rge2 的时钟端口 CLK1 和 CLK2。
-
时钟周期 Cycle
时钟周期很好理解,DC(Design Compiler) 中相关命令为create_clock -period 10 [get_ports clk] //创建周期为10ns的时钟信号clk
-
时钟延迟 Latency
时钟延迟分为两部分,一部分是从源时钟 CLK_SOURCE 到模块时钟输入端口 CLK_IN 的延迟,称为 Source latency,对应图中 Source latency;另一部分是从模块输入时钟端口 CLK_IN 到寄存器的时钟端口 CLK1/CLK2,称为 Network latency,对应图中 network_latency1 和 network_latency2。
DC 中相关命令为set_clock_latency -source 3 [get_clocks clk] set_clock_latency 3 [get_clocks clk]
-
时钟偏斜 Skew
由于延迟的存在,时钟到达每个寄存器的延迟都不相同,导致不同寄存器的时钟信号存在相位差,称为时钟偏斜。时钟偏斜可以分为两种,全局时钟偏斜和局部时钟偏斜。
全局时钟偏斜为模块中延迟最大的寄存器的时钟信号与延迟最小的寄存器的时钟信号相位的差值。
局部时钟偏斜是两个相邻的寄存器时钟信号的相位差值,即源寄存器和目的寄存器,局部时钟偏斜影响着时间裕度。 -
时钟抖动 Jitter
由于晶振本身稳定性,电源以及温度变化等原因造成的在连续时钟周期内时钟频率的变化。如图所示,对于相邻的两个周期,前一个周期长度为 T 1 T1 T1,后一个周期长度为 T 2 T2 T2,有时钟偏斜 J i t t e r = T 2 − T 1 Jitter = T2 - T1 Jitter=T2−T1。
-
时钟不确定度 Uncertainty
在 DC 中,将时钟偏斜 Skew 和时钟抖动 Jitter 合并在一起称为不确定度,因为 Skew 和 Jitter 均对时钟信号的相位有影响,我们预估最大全局时钟偏斜的绝对值为 Skew_abs,最大时钟抖动的绝对值为 Jitter_abs,分别对建立时间和保持时间进行分析。
对于建立时间,如图所示,原时钟周期为 T,在最坏情况下,由于时钟抖动,该周期长度减小至 T’ = T - Jitter,由于时钟偏斜,目的寄存器时钟沿提前源寄存器 Skew_abs 时间到达。在 t0 时刻源寄存器 (Reg1) 的 Q 端开始向前传输数据,目的寄存器对应的时钟边沿由 t3 时刻提前至 t1 时刻,相当于时钟提前达到了 (Skew_abs+Jitter_abs),将该时间称为 set Uncertainty。
对于保持时间,如图所示,由于保持时间考虑的源寄存器和目的寄存器的时钟边沿属于同一周期,时钟抖动不产生影响,在最坏情况下,目的寄存的时钟沿相对源寄存器延迟到达 Skew_abs 时间,目的寄存器对应的时钟边沿由 t0 时刻延迟至 t1 时刻,相当于目的寄存器的时钟沿延后了 Skew_abs 时间,将该时间称为 hold Uncertainty。
DC 中相关命令为
set_clock_uncertainty -setup 0.5 [get_clocks clk] set_clock_uncertainty -hold 0.5 [get_clocks clk]
-
时钟转换 Transition
实际上时钟信号从低电平到高电平或者从高电平到低电平需要时间,转变所需要的时间即 Transition,一般定义为上升转换时间为电压的20%上升至80%的时间。
DC中相关命令为set_clock_transition -max 0.2 [get_clocks clk]
需要注意的是以上的时钟属性中,Jitter、 Transition 和 Source latency 完全由模块外部晶振、PLL 等因素决定,而 Skew、Network latency 完全由模块内布局布线决定,也就是模块内时钟树。而时钟树综合一般与逻辑综合分开,在时钟树综合前 (pre-CTS),我们需要预估出时钟树的Skew、Network latency。而在时钟树综合后 (post-CTS),这些参数则可以通过计算精确得到,我们只需要设置模块外部的时钟参数即可。
参考
时序基本介绍——Jitter与Skew区别
CTS学习记录3-preCTS&post CTS&post route
DC(三)——时钟约束