FPGA教学——STA静态时序分析
2022-08-23
作者:FPGA之旅
来源:电子技术应用专栏作家 FPGA之旅
1.
静态时序分析
1.1 什么是静态时序分析
静态时序分析(简称STA)是用来验证数字设计时序的技术之一,另外一种验证时序的方法是时序仿真,时序仿真可以同时验证功能和时序。“时序分析”这个术语就是用来指代“静态时序分析“或”时序仿真“这两种方法之一,简单来说,时序分析的目的就是为了解决设计中的各种时序问题。
静态时序分析是基于同步电路设计模型的。主要目的就是为了提高系统工作主频以及增加系统的稳定性。通过静态时序分析,一方面可以增加系统稳定性,减少亚稳态的发生,另一方面通过附加约束可以控制逻辑的综合、映射、布局和布线,以减小逻辑和布线延时,从而提高工作频率。
1.2 静态时序分析和时序仿真
静态时序分析分析的是时序,检查在一定频率下,电路有无时序违例
时序仿真检查的是功能,需要在设计的端口添加激励
静态时序分析的特点:更快更简单,能不添加激励的情况下检查完所有的时序路径
时序仿真的特点:检查电路的功能仿真,比较慢
时序分析:先用STA对电路进行时序检查,再进行时序仿真
1.3 在设计的哪个阶段使用STA以及如何使用静态时序分析
RTL设计阶段:此阶段需要完成电路的功能设计,而且此阶段是行为级网表,无需STA;当逻辑功能设计完成后,综合成门级网表,此时需要使用STA分析时序最差或关键路径,进行设计的逻辑优化(此时更改的都是逻辑单元)并生成时序约束文件(SDC)
1.4 在逻辑级(未进行物理设计的门级),STA可采用哪些模型
理想的互连线或者基于线负载模型的互连线
带有延迟和抖动估计值的理想时钟
在物理设计阶段,除了上述模型,STA还可采用以下模型:
具有近似估计值的全局布线的互连线、具有近似寄生参数提取值的实际布线的互连线、具有可以签收(signoff)精度寄生参数提取值的实际布线的互连线
实际的时钟树
包括串扰的影响或者不包括串扰的影响
1.5 静态时序分析同样具有局限性,在如下的常见情况下无法使用
对未知态X的处理
PLL未正确设置
分析IO接口时序
分析模拟模块和数字模块之间的接口时序
逻辑设计伪路径(false path)
1.6 STA局限性
STA针对的是数字电路,和模拟电路相关的路径无法通过STA验证
数字电路中产生的不定态在STA不会验证,这个需要通过仿真进行仔细检查确认
电路中不同状态机之间的同步需求不能通过STA来验证
对时钟生成电路的验证无法通过STA完成
时序约束中会有例外情况,需要人工处理
2.
相关基础概念
建立时间 setup time
是指在触发器的时钟信号上升沿到来以前,数据稳定不变的最小时间Tsu
保持时间 hold up time
是指在触发器的时钟信号上升沿到来以后,数据稳定不变的最小时间Th
发射沿 Launch Edge
时序分析起点,第一级寄存器数据变化的时钟边沿,也是静态时序分析的起点
锁存沿 Latch Edge
时序分析终点,数据锁存的时钟边沿,是静态时序分析的终点
数据输出延时 Tco
数据输出延时指的是当时钟触发(一般可认为是第一个寄存器的时钟沿触发时刻)开始到有效数据输出**(第一个寄存器的Q端数据开始输出(有可能变化,也有可能不变化))**的器件内部所有延时的总和。
数据到达时间(数据路径,Data Arrival Time)
输入数据在有效时钟沿后到达目的寄存器所需要的时间,可大致划分为:时钟沿到达第一级寄存器所需时间(Tclk1),寄存器内部延迟时间(Tco),数据输出后传输到第二级寄存器所需时间(Tdata).
其中Tdata可细分为:
组合逻辑延时Tcomb_logic:数据经过组合逻辑部分所需的时间;
线网延时Tnet:数据在线上传输所需的时间,一般较小可以忽略;
时钟到达时间(时间路径,Clock Arrival Time)
时钟到达时间就是指时钟从latch edge到达目的寄存器(destination register)输入端所用的时间。
时钟偏斜(Tskew)
指同一个时钟沿(clk)和分别到达两个寄存器所需的时间之间的差值(Tclk1和Tclk2的差值).
公式为:Tskew=Tclk2-Tclk1.
数据需求时间(Data Require Time)
细分为 (Setup-Data Require Time)( Hold-Data Require Time )
①Clock Arrival Time = Latch +Tclk2
因此 Data Required Time = Latch+Tclk2-Tsu (忽略建立不定态)
②Clock Arrival Time = Latch +Tclk2.
因此 Data Required Time = Latch+Tclk2+Tsu (忽略保持不定态)
建立裕量(Setup Slack)
Setup Slack = (Latch Edge + Tclk2 - Tsu)-( Launch Edge + Tclk1 +Tco +Tdata)
(建立数据所需时间)Setup-Data Required Time = Latch Edge + Tclk2 - Tsu
(数据到达时间) Data Arrival Time = Lauch Edge + Tclk1 + Tco + Tdata
因此 Setup Slack = Setup-Data Required Time - Data Arrival Time
=(Latch Edge - Launch Edge)+(Tclk2-Tclk1)-(Tsu+Tco+Tdata)
= Tperiod +(Tclk2-Tclk1)-(Tsu + Tco+Tdata)
这个最终结果说明了源寄存器与目的寄存器之间延迟 Tdata不能太长的原因,延迟越长,slack越小。当建立裕量为正时,满足时序要求,否则不满足。
保持裕量(Hold Slack)
Hold Slack = Data Arrival Time - (Hold-Data Required Time)
同样的可推导:
(数据到达时间)Data Arrival Time = Launch Edge + Tclk1 + Tco + Tdata
(数据需求时间)Hold-Data Required Time = Latch Edge + Tclk2
Hold Slack = Launch Edge + Tclk1 + Tco + Tdata -(Latch Edge + Tclk2)
=-Tperiod +(Tclk1-Tclk2)+Tco+Tdata
从结果可以看出,当源寄存器与目的寄存器之间延迟Tdata太短的话,则保持裕量会很短,因此Hold Slack 越小。
建立时间和保持时间的检查
解释图中的符号:
Tlaunch:时钟源点到第一个触发器的时钟网络延迟,也就是时钟偏斜(skew);
Tcapture:为时钟源点到第二个触发器的时钟网络延迟,也就是时钟偏斜(skew);
Tck2q:是触发器的延迟,即D端到Q端的延迟,这是由触发器本身的电气特性所决定的;
Tcycle:是时钟周期,即时钟频率 1\fclk;
Tdp:是第一个触发器的输出端到第二个触发器的输入端之间的组合逻辑电路部分的电路延迟;
解释上图,第二个触发器要想满足setup time,就必须要满足:
上图中绿色竖线为时钟源点经过延迟,到第二个触发器的时间(对应绿色路径)
对应红色的路径部分,经过组合逻辑,到达第二触发器的Q端,最晚只能到达上图的红色竖线部分,否则就没办法,满足建立时间。
由此,我们可以推迟公式:
Tlaunch + Tck2q + Tdp ≤ Tcapture + Tcycle - Tsetup
因为Tlaunch和Tcapture都表示为时钟偏斜(clock skew),所以我们合并之后就可得:
建立时间约束:Tsetup ≤ Tcycle +Tskew - Tdp - Tck2q
保持时间约束:Thold ≤ Tdp + Tck2q
其中参数意义:
Tclock:也就是时钟偏斜(clock skew);
Tck2q:是触发器D端到Q端的延迟;
Tcycle:是时钟周期,即时钟频率 1\fclk;
Tdp:是组合逻辑电路部分的电路延迟;
PS:这里可能你会觉得建立时间有点难记,我多啰嗦一句:
Tcycle + Tskew 是表示第二个触发器的时钟到达的时间;
Tdp + Tck2q是表示经过第一个触发器+组合逻辑到达的时间;
二者的差值就是建立时间最大的时间要求
解决建立时间与保持时间不满足的问题
1.建立时间不满足
当建立时间不满足时,即Tsetup值要大于实际的Tcycle +Tskew - Tdp - Tck2q,为了满足建立时间:
可以通过改进工艺,采取具有更小的Tsetup值的芯片;
采用延迟更低的触发器,降低Tck2q;
增大时钟周期Tcycle和时钟偏斜Tskew,但这会降低电路的性能;
尽量减小两个触发器之间的组合逻辑电路的使用,从而降低Tck2q。
2.保持时间不满足
当保持时间不满足时,也就是Thold要小于Tdp + Tck2q,可以通过:
理论上,可以增加Tdp和Tck2q来解决,也就是增加触发器的D端到Q端的延时,以及两级触发器之间的组合逻辑电路部分。
目前大部分芯片的Thold时间都可以做到0ns。所以当保持时间不满足时,通常采用的做法是在传输路径上插入buffer,在不影响逻辑功能前提下,只具有增加延迟的作用。
PS:尤其注意,保持时间Thold和时钟频率之间是没有关系,故降低时钟速度不能解决保持时间不满足的问题,很多面试题喜欢在这里挖坑。
恢复时间 Recovery time
是指异步控制信号(如寄存器的异步清除和置位控制信号)在“下个时钟沿”来临之前变无效的最小时间长度。
去除时间 Removal time
是指异步控制信号(如寄存器的异步清除和置位控制信号)在“有效时钟沿”之后变无效的最小时间长度。
时序路径
每个时序路径都有一个起点和终点。一般起点是时序单元的时钟引脚 或者设计的输入端口;终点是时序单元的数据输入引脚或者 设计的输出端口。所以一共有四种时序路径。
恢复时间 Recovery time
是指异步控制信号(如寄存器的异步清除和置位控制信号)在“下个时钟沿”来临之前变无效的最小时间长度。
去除时间 Removal time
是指异步控制信号(如寄存器的异步清除和置位控制信号)在“有效时钟沿”之后变无效的最小时间长度。
时序路径
每个时序路径都有一个起点和终点。一般起点是时序单元的时钟引脚 或者设计的输入端口;终点是时序单元的数据输入引脚或者 设计的输出端口。所以一共有四种时序路径。
名词解释:
发射沿(launch edge):有效时钟的第一个上升沿;
采样沿(latch edge):有效时钟的第二个上升沿;
采样沿和发射沿差值可以粗略认为是1个时钟周期(不考虑时钟抖动jitter)。
Tclk1:时钟源扇出信号到寄存器1(REG1)的时钟端所需时间;
Tclk2:时钟源扇出信号到寄存器2(REG2)的时钟端所需时间;
所以时钟源的布局布线很重要,这就是为什么FPGA中推荐用PLL输出时钟,而不是自己进行时钟分频。
Tco:寄存器时钟输出延迟,即有效时钟输入到输出之间的延迟。
Tdata:2个寄存器之间组合路径延迟和布局布线延迟。
Tc:时钟周期大小(Tclk)。
Ts:建立时间大小;
Th:保持时间大小;
Thold_slack:保持时间余量(也就是要大于0);
Tsetup_slack:建立时间余量(也就是大于0)。
建立时间:
采样沿到达时间:Tlatch = Tc + Tclk2;
第一次数据到达时间:Tarrive = Tclk1 + Tco + Tdata;
建立时间大小:Ts = Tlatch - Tarrive = Tc + Tclk2 - Tclk1 - Tco - Tdata = Tc + Tdelta - T1.
其中,Tdelta代表Tskew,也就是2个寄存器之间时钟到达差值,T1代表从REG1到REG2数据接收端的整个时间延迟,当然,不化简也是可以的。
保持时间:
第一次采样沿到达时间:Tlatch = Tc + Tclk2;
第二次数据到来时间:Tdata2 = Tclk1 + Tco + Tdata + Tc(Tdata_valid) ;
保持时间大小:Th = Tdata2 - Tlatch = Tclk1 + Tco + Tdata - Tclk2 = T1 - Tdelta。
更多信息可以来这里获取==>>电子技术应用-AET<<
电子技术应用专栏作家 FPGA之旅
原文链接:https://mp.weixin.qq.com/s/PX9FAo4skTAOR7NQqiqvmA