目录
一、前言
二、时序建模
2.1 反相器
2.2 线性时序模型
2.3 非线性时序模型
三、时序模块
3.1 组合单元
3.2 时序单元
3.3 同步检查:setup和hold
3.4 异步检查:recovery和removal
3.5 脉冲宽度检查Pulse width check
3.6 传输时延
3.7 状态独立模块
3.8 黑盒模块的接口时序模块
3.9 线传输时延模型
四、参考资料
一、前言
时序分析工具能够进行时序分析主要是依据时序模型,时序模型主要是通过单元库描述文件中的时序信息来实现,而时序信息是来自详细的实际电路仿真获取。单元库中的单元可以是独立的单元,IO缓冲器或者是复杂的IP核。
二、时序建模
2.1 反相器
单元时序模块可以为例化的单元在指定的环境中提供精确的时序信息,提供单元的每个时序弧信息。以下图的反相器为例。
反相器的功能是输出与输入相反,输入A为上升沿时,输出Z为下降沿,Tr为输出上升沿时延值,Tf为输出Z的下降沿输出时延值。因为上升沿和下降沿都是非理想的瞬变状态,因此需要一个阈值点作为下降沿和上升沿作为生效点,此处阈值点为高电平Vcc的50%处。
对于反相器,从输入达到阈值,到输出达到阈值处时,总的延时取决于两个因素:输出负载(输出引脚的负载电容)与输入端口位置处转换时间。
负载电容值会直接影响时延,负载电容值越大,时延越大(也即时序线路中fanout越大,延时越大);时延与输入引脚的转换时间也是成正比关系。输出的偏斜skew也是主要取决于输出负载(输出电容),输出电平转换时间也会随输出负载增加,输出端口的负载也可以影响输入端口的偏斜,如下图,
2.2 线性时序模型
线性延时模型是最简单的时序模型,模型的输出转换时间是输入转换时间与输出负载电容的线性函数,输出延时D表达式如下:
D=D0+D1*S+D2*C
D0,D1,D2为常数,S是输入转换时间,C是输出负载电容。线性模型因为不够精确,通常用于预估,更多的模型是复杂的非线性模型。
2.3 非线性时序模型
大多数的单元库有一张包含了延时值和单元不同时序弧的时序检查表,有一些高级时序模型如CCS,ESCM会提供电流信息。非线性延时模型NLDM的模型表有延时值,输出偏斜以及时序检查信息。
以反相器的输出端口out到相关联的引脚INP1模型表为例,表格是一个二维数据表,维度包括输入切换时间和输出负载电容,表格的值为延时值。
表格中包含了从引脚INP1到OUT中时序弧在单元上升沿和下降沿两张延时表格,最大切换时间max_transition为1ns,延时值表为3*3的表格,index_1表示输入切换时间,单位ns,index_2为输出电容,单位pf,通过index_1和index_2可以查询对应组合下的时延值。
三、时序模块
3.1 组合单元
以一个二输入的与门AND为例,时序弧都是正极性,存在4种时延,因此,也存在4个时延表,AND时序模型也属于非线性时延模型。
A->Z:输出上升沿
A->Z:输出下降沿
B->Z:输出上升沿
B->Z:输出下降沿
下面以一个3输入的与非门为例,时序模型为其中的输入引脚INP1到输出引脚OUT的时延表,包含了2个单元时延表cell_rise,cell_fall和2个转换表rise_transition,fall_transition。同时,时钟极性为negative_unate,说明Cell_rise的延时表是对应于输入引脚为下降沿时的转换时间。
3.2 时序单元
以下面时序单元的时序弧为例,对于同步输入引脚,如D,SI,SE,将存在setup检查弧(上升沿和下降沿),hold检查弧(上升沿和下降沿);对于异步输入引脚,如CDN,则存在recovery检查弧和removal检查弧。对于触发器输出引脚,则存在时钟CK引脚到输出Q或QN的传输延时弧(上升沿和下降沿)。
所有的同步时序弧是和时钟的激活边沿相关,在时钟的激活边沿中时序单元进行捕获数据。另外,时钟引脚和异步引脚如清零引脚,将会有一个脉冲宽度时序检查,要求时钟的脉冲宽度不能太小。
3.3 同步检查:setup和hold
数据如果需要在时序单元上传输通过,setup和hold检查是必须的,检查通过说明时钟有效沿到达时数据输入状态是稳定的,并且被有效捕获到。在时钟有效沿到达前数据输入需保持的最小稳定时间即为setup时间,这个时间值为最新的数据输入信号达到阈值(通常为高电平信号电压值的50%)到有效时钟边沿达到阈值(通常也是高电平电压值的50%)的时间间隔。同理,hold时间为时钟有效沿到达后数据输入必须保持稳定的最小时间,hold值为有效时钟边沿达到阈值到最早的数据信号穿过阈值的时间间隔。关于setup/hold的详细计算可查看之前的文章“FPGA设计时序分析二、建立/恢复时间”,链接:https://blog.csdn.net/zyp626/article/details/131747290
以一个触发器的数据引脚D和时钟引脚CK的时序模型如下,对于setup、hold有对应rise,fall的延时表,延时表从数据D转换时间和时钟CK转换时间两个角度进行。如对于D口下降沿,setup约束将会使用setup表中的fall_constraint数据。
在一些场景下,hold值可能是负值,如在上述时序模型中的hold_rising中,这主要发生在从触发器到内部数据锁存点的时延大于时钟路径时延就会出现。因此,负的hold值表示触发器的数据引脚先于时钟引脚变化并且仍然满足hold检查,同理,setup为负值表示触发器的数据输入引脚在时钟引脚之后发生改变但仍能满足setup检查。但setup和hold不能都为负值,因为setup值和hold值之和必须是正数。下图中hold为负值,因为setup一定是先于hold出现,图中数据D中空白区域的宽度是数据信号必须稳定的时间,数据D在时钟维持一段时间稳定后在时钟到达前进行了变化。
hold值为负从时钟偏斜的角度看是更加灵活,可以减少对于修复hold违例所需要的缓冲器插入。
3.4 异步检查:recovery和removal
异步引脚如在同步单元中的异步清零和异步置位,当异步引脚处于活跃状态时,异步引脚控制输出,而不是时钟锁存的输入数据控制输出。recovery时间是在下一个有效时钟沿到达前,一个异步输入引脚控制信号无效后到下一个时钟有效沿到达之前间必须维持稳定的最小时间;removal时间是在有效时钟沿到达后,异步输入引脚中的异步控制信号必须维持稳定的最小时间。
下图为输入引脚CDN到关联的时钟引脚CK的recovery检查时间表。
3.5 脉冲宽度检查Pulse width check
除了同步和异步时序检查,还有一种检查:输入引脚信号的脉冲宽度检查,检查的主要是时钟信号。如果时钟信号的脉冲宽度小于指定的最小值,由于时序单元本身有建立时间和保持时间,因此,时钟信号必须也保持有一定的宽度,再是如果脉宽太小,在组合逻辑路径传播过程中会不断被削弱从而导致失真。
脉冲宽度检查可以指定是对于同步还是异步引脚,同时也可以指定对于高脉冲或低脉冲。下图中指定了引脚CDN中脉冲宽度检查,为低脉冲检查。
3.6 传输时延
时序单元的传输时延是从时钟的有效沿开始到输出的上升沿或下降沿之间的时间。以一个下降沿有效的触发器的时钟引脚CKN到输出引脚Q为例。因为时序感知是non_unate,所以时钟有效沿可以导致输出Q为上升沿或下降沿。
3.7 状态独立模块
在很多组合块单元中,输入和输出之间的时序弧取决于块单元中其他输入引脚的状态。这些时序弧可能是单边正极性(positive unate)的,单边负极性(negative unate)的,或者是极性不定的状态。如XOR门的输出可以是单边正极性或单边负极性,输出状态依赖其他输入引脚的状态,对应的时序模块也称为状态独立模块。
以两输入的异或门XOR为例,在输入A2为逻辑值0时,输入A1到输出Z的时序路径是正极性的。A2为逻辑值1时,输入A1到Z的时序路径负极性的。两个时序模型用状态独立模块表示。
A2为逻辑值0时,时序模块值如下,function描述了逻辑功能异或,sdf_conf中设定了A2=0,此时时序感知为正极性
延时表中index_1为输入偏斜,index_2为输出负载
A2为逻辑值0时,时序模块值如下,sdf_conf中设定了A2=1,时序感知为负极性negative_unate
3.8 黑盒模块的接口时序模块
黑盒接口模块可以有组合时序弧也可以有时序单元的时序弧,通常,这些时序弧都是状态独立的,以下图的设计为例。
输入时序弧用于表示触发器数据输入端口D上的setup或hold时序,通常,在连接到触发器的输入端口D前会存在一个组合逻辑,对DIN端口和时钟端口ACLK进行setup检查。
异步输入时序弧和recovery/removal时序约束到触发器的异步输入端口相同,如设计中的ARST于时钟ACLK端口的时序检查。
输出时序弧和时钟到输出端口时延检查类似,通常,在触发器输出端口到输出模块间存在一个组合逻辑块,如设计中的时钟BCLK到输出端口DOUT间的路径。接口时序模块主要不是为了捕获黑盒内部的时序,主要是为了对接口进行时序分析。
总结:在一个黑盒模块中存在以下几种时序弧
1)输入端口到输出端口间的组合逻辑路径
2)同步输入端口和相关联的时钟间的setup、hold时序弧
3)异步输入与相关联的时钟间的recovery、removal时序弧
4)从时钟引脚到输出引脚间的输出传输时延
3.9 线传输时延模型
除了上面介绍的单元内部传输时延和切换时延,单元间的连线传输也存在时延。芯片内部的连线大致分为3类:短线,中长线,长线
短线用于逻辑门之间或对速度要求不高的连接,通常短线长度小于信号波长,并且短线的时延主要受寄生电容和耦合电容的影响。中长线为模块间互连线,速度要求比短线高,但容易产生电容耦合效应,噪声更大。长线主要是全局的连线,对设计的时延影响较大,因此长线都是使用低电阻率减少信号线的电阻损耗。
在Vivado的device中,通过colors设置可以让不同的线型不同颜色显示,如下图,长线为绿色,本地先为蓝色。
线负载模型可以用于估算电容,电阻和由于交叉的面积消耗,一个单元块的平均线长和块的大小有密切关系。如下图,不同大小的块不同的线负载模型,同时有不同大小的寄生电容,通常,更小的块电容更小。
以上图wlm_conservative为例,线负载模型如下
Resistance是每单位互连线长度的电阻值,capacitance是每单位互连线长度的电容,area是每单位互连线长度的面积消耗,slope是没有在fanout length中指定的fanout数据点的外延斜率。
线负载模型中fanout与线长length的关系如下图,其他fanout,电容,电阻和平均面积消耗都可通过斜率slope=0.5来推算,在线负载模型中指定了对应的比值,以fanout=8为例。
Length=4.1+(8-5)*0.5=5.6 units
Capacitance=Length*capacitance(1.1)=6.16 units
Resistance=Length*resistance(5.0)=28units
Area=Length*area(0.5)=0.28 area units
四、参考资料
书籍《Static Timing Analysis for Nanometer Designs》