静态时序分析(static timing analysis)

静态时序分析(static timing analysis,STA)会检测所有可能的路径来查找设计中是否存在时序违规(timing violation)。但STA只会去分析合适的时序,而不去管逻辑操作的正确性。

其实每一个设计的目的都相同,使用Design Compiler和IC Compile来得到最快的速度,最小的面积和最少的耗能。根据设计者提供的约束,这些工具会在面积,速度和耗能上做出权衡。

更深层的来看,STA一直都寻找一个问题的答案 : 在所有条件下,当时钟沿到达时,数据会正确地在每个同步device的输入端正确显示吗?

这问题可以用下图来表示:

如图中所示,虚线表示了时序路径。两者使用了同一个时钟驱动,理想情况下FF1的数据变化之后在下个时钟沿能够准确到达FF2。

两者的时序图如下:

在FF1的时钟沿到来时,会把FF1的D端的数据送入flip-flop。在经过一个clock-to-Q的延时之后,数据会送入FF1的Q端。此过程叫做时序路径的launch event。

信号经过了两个FF之间的组合逻辑之后,到达了组合逻辑的输出,也就是FF2的输入端(FF2.D),这个叫做arrival time。

然而数据并不是在时钟沿到达FF2的同时到达,而是要比时钟沿早到那么一点点。早到的这个时间叫做required time,不同的device的required time不一样。

数据装载到FF2的时间点叫做capture event。

device的required time和数据到达的时间(arrival time)两者之差则叫做slack。图中所示,数据比时钟早到很多,则slack为正。如果数据刚好在required time时间点到达,则slack为0,若是数据晚到的话则是负了。

例如required time是launch event之后的1.8ns,而arrival time是launch event之后的1.6ns,则slack = 1.8-1.6=0.2ns。

以上所述的时序check又叫做 setup check,用来检测数据能否在时钟沿到来之前能够快速到达。

还有一种时序check叫做 hold check,用来检测时钟沿到达之后,数据是否能够维持一定的时间的有效状态。

下图描述了一个hold check的例子:

如图所示,FF1 FF2之间的组合逻辑很短,只有一个NAND门,与此同时在两个FF的时钟却有很长的delay。

时序图如下所示:

FF1的内容和前例一样,在launch edge时候,FF1.D的内容载入到FF1,经过clock-to-Q延时之后到达FF1.Q。 经过一个很短的组合逻辑之后(NAND gate),数据到达了FF2.D端。此情况下setup check 很容易满足,因为数据很早就到达了FF2.D。

然而来看FF2, FF2应该在CLK信号的第二个上升沿来抓取数据,然而数据并没有在capture edge之后保持足够的时间来满足hold check,数据在延时后的CLKB的上升沿之前产生了变化,传输的数据并不是我们想要的数据。

解决此问题的方法也很简单,增加组合逻辑的延时或者减少时钟的延时。

默认情况下,综合工具会自动修复setup violation,因为setup的修复会更困难。 使用 set_fix_hold命令的话会在compile阶段中修复hold violation。

两种时序检测会考虑不同的条件。例如对于setup check来说,它会考虑组合逻辑中最长最慢的路径,还有最早的arrival time路径。而对于hold check来说,它会检测最短最快的组合逻辑路径和最晚的arrival time。

下图描述了一个路径选择的例子:

如上图,setup check会检测更长的3个门,而hold会检测更短的2个门。

而路径的种类则如下图:

· clock path: 此路径从clock input port或者cell pin开始,通过一个或多个buffer或者inverter到达时序device的clock pin来检测数据的setup 和 hold

· Clock-gating path: 此路径从clock-gating element 开始来检测clock-gating的setup和hold

· Asynchrounous path: 从input port 到一个时序element的非同步set或clear pin来检测 recovery 和 removal

· Data-to-data: 使用set_data_check命令来指定的自定义路径。

时间: 2024-10-19 14:53:44

静态时序分析(static timing analysis)的相关文章

静态时序分析(static timing analysis) --- 时序路径

时序分析工具会找到且分析设计中的所有路径.每一个路径有一个起点(startpoint)和一个终点(endpoint).起点是设计中数据被时钟沿载入的那个时间点,而终点则是数据通过了组合逻辑被另一个时间沿载入的时间点. 路径中的起点是一个时序元件的时钟pin或者设计的input port.input port可以作为起点是因为数据可以由外部源(external source)进入设计. 终点则是时序元件的数据输入pin或者设计的output port.同理output port可以作为终点是因为数

时序分析Timing Analysis

以下内容来自Quartus II Handbook Version 13.1 Volume 3: Verification /Section II. Timing Analysis 6. Timing Analysis Overview Comprehensive static timing analysis involves analysis of register-to-register, I/O, and asynchronous reset paths. 综合的静态时序分析对象包括:寄存

Timequest静态时序分析(STA)基础

Setup Slack Hold Slack Recovery&Removal Recovery: The minimum time an asynchronous signal must be stable BEFORE clock edgeRemoval  : The minimum time an asynchronous signal must be stable AFTER clock edge I/O Analysis Analyzing I/O performance in a s

c语言:利用静态变量static,输出1到5的阶乘值

利用静态变量static,输出1到5的阶乘值. 解:程序: #include<stdio.h> int fac(int n) { static int f=1; f = f*n; return f; } int main() { int i; for (i = 1; i <=5; i++) { printf("%d!=%d\n",i,fac(i)); } return 0; } 结果: 1!=1 2!=2 3!=6 4!=24 5!=120 请按任意键继续. . .

Operation condition And timing analysis

Operation condition 主要指芯片运行的环境的不同,在这里加上Interconnect net 模型. Operating condition Description Process derating factor This value is related to the scaling of device parameters resulting from variations in the fabrication process. A process number less

TimeQuest 静态时序分析 基本概论

静态时序分析 基本概念 [转载] 1.   背景 静态时序分析的前提就是设计者先提出要求,然后时序分析工具才会根据特定的时序模型进行分析,给出正确是时序报告. 进行静态时序分析,主要目的就是为了提高系统工作主频以及增加系统的稳定性.对很多数字电路设计来说,提高工作频率非常重要,因为高工作频率意味着高处理能力.通过附加约束可以控制逻辑的综合.映射.布局和布线,以减小逻辑和布线延时,从而提高工作频率. 2.   理论分析 2.1   固定参数launch edge.latch edge.Tsu.Th

C++ 静态存储周期(static storage duration)

拥有静态存储周期(static storage duration)的对象将会被一直保存到程序结束. 声明 存储类型说明符(static)用于声明对象拥有静态存储期(static storage duration). 存储类型说明符(static)只可以用于对象,函数和匿名联合体. 块作用域中不能声明静态函数,也不能声明静态函数参数. void func(static int tag){ cout<<tag<<endl; { static void nonStaticFunc(int

静态block/static block添加至产品描述页的tab方法

magento 产品描述页新增一个tab,调用静态block/static block 内容的方法: 1. 在管理后台的 cms-->static block 新增一个 静态block, 注意创建的 identifier 名称, 这里我假设创建了一个identifier为 shipping 的静态block 2. 创建模型文件:在自己的模版目录的template文件夹里面,新创建一个文件夹为 myblock,在里面新建一个phtml类型的文件,比如 shipping.phtml 3. 打开shi

cocos2d-x 静态变量 static

在cocos2d-x的.h文件里声明静态(static)变量时,编译运行的时候会出现“无法解析”的错误,这是因为我们错误的引用C++习惯,将静态(static)变量声明在头文件中导致的错误. #ifndef _A_H_ #define _A_H_ #include "cocos2d.h" class A{ public: static int getInt(); //获取创建的静态(static)变量 protected: A(); ~A(); }; #endif #include &