静态时序分析之TimeQuest篇

静态时序分析之TimeQuest篇

博主微信:flm13724054952,不懂的有疑惑的也可以加微信咨询,欢迎大家前来投稿,谢谢!

引言介绍

无论是芯片设计还是FPGA设计到应用的物理实现,其过程都必须经历DC过程(从代码映射到网表)。而DC综合过程可以说就是时序分析过程,因为在设计的物理实现上,为了保证电路的功能是正常稳定的,那么我们就必须考虑网表上路经上的 cell 延迟和 net 延迟,作出相应对时钟,输入输出引脚等约束。然后 DC会根据你加的约束进行物理映射,来映射库中符合这种延迟以及驱动的器件。从而达到综合的目的。而为了保证电路功能正常,就是保证DC时序约束的 setup time 和 hold time裕量都是为正的。

时序路径

时序路径(timing path)是指信号在传播的过程中所经历的逻辑路径,而且每一条时序路径都有对应的起始点跟终止点。
起始点:可以是组合逻辑的数据输入端口(input port)或者是时序单元的时钟输入端口(寄存器的clk pin);
终止点:可以是组合逻辑的数据输出端口(output port)或者是时序单元的数据输入端口(寄存器的D pin)。
如下图所示:时序路径1的起始点是数据输入端口,终止点是时序单元的数据输入端口。
时序路径2的起始点是时序单元的时钟输入端口,终止点是时序单元的数据输入端口。
时序路径3的起始点是时序单元的时钟输入端口,终止点是组合逻辑的数据输出端口。
在这里插入图片描述
根据上面的介绍可以得知时序路径根据起始点的不同可以分为四种时序路径:
第1种:输入端到触发器(input to register);
第2种:触发器到触发器(register to register);
第3种:触发器到输出端(register to output);
第4种:输入端到输出端(input to output)。
如下图所示,对整个电路的时序进行约束可以概括为以下四种,第一种从输入端到电路内部的时序路径(片间路径)输入端到触发器(通常用set_input_delay来约束输入延时以此保证电路的时序稳定跟功能正常)。第二种内部电路信号从触发器到触发器的片内路径(一般保证设计中间的组合逻辑不易过长即可)。第三种内部电路的触发器到电路顶层的输出端(片间路径,通常用set_output_delay来约束输入延时以此保证电路的时序稳定跟功能正常)。第四种从电路设计输入端到电路设计的输出端(input to output,因为没有经历过时序单元,所以这种路径的分析与其他的分析方法不一样,一般来说只要路径不长可以不做考虑,或者可以使用内部虚拟时钟来约束,这里本文不做详细介绍,因为遇到的不多)。从上面的描述或者可以从下面的约束所示,其实无论是第一种,第二种还是第三种路径,其实都是虚拟一个时序单元寄存器,使其组合成经典的时序路径触发器到触发器来约束分析时序的。所以本文主要介绍的是时序路径触发器到触发器之间的约束分析。在这里插入图片描述

时序分析

对时序路径的建立时间(setup time)跟保持时间(hold time)进行时序约束分析是静态时序分析的主要两大工作。静态时序分析还经常涉及到两个沿的概念,发起沿launch edge跟捕获沿capture edge。如下图所示:因为其实捕获沿其实就是下一个发起沿,所以捕获沿跟发起沿其实一般相差一个时钟周期。
在这里插入图片描述

建立时间

建立时间setup time是指在时钟捕获信号的有效到来之前,数据信号必须提前保持稳定。这样子才可以保证采集到的信号是对的或者不是空的。
在这里插入图片描述

Tclka clk时钟到发起触发器时钟端口的线延迟
Tclkb clk时钟到捕获寄存器时钟端口的线延迟
Tco 从发时钟起沿有效到数据到达发起寄存器Q端口所用时间
Tdata 数据延时,一般指组合逻辑延迟和net线延迟
Tsu 捕获寄存器建立时间需求
Th 捕获寄存器保持时间需求
Tun clock uncertainty时钟的相位延迟

从上图可以计数出数据从时钟clk到达捕获寄存器D端的到达时间为:
data arrived time=launch edge+ Tclka + Tco + Tdata;
时钟clk到达捕获寄存器时钟端的到达时间为
时钟到达时间=capture edge + Tclkb;
对于建立时间而言,数据的需求时间为:
data required time(setup)=时钟到达时间 -Tsu=capture edge + Tclkb - Tsu - Tun;
那么建立时间的计数公式为:
Tsetup =data required time(setup) - data arrived time = capture edge + Tclkb -Tsu - Tun - launch edge -Tclka -Tco - Tdata;
在前面说过捕获沿与发起沿相差为一个时钟周期,所以简化后就是:
Tsetup = T +Tclkb -Tsu - Tun -Tclka -Tco - Tdata;
在前面说过建立时间setup time是指在时钟捕获信号的有效到来之前,数据信号必须提前保持稳定。也就是说数据请求时间一定要大于数据到达时间,即Tsetup>0电路的时序才算没有问题,功能才有得到保障。

保持时间

保持时间hold time是指对于捕获寄存器来说,在时钟的捕获沿到来之后,上一个数据依然还要保持稳定不变这样子直到寄存器读取完数据之后,下一个数据才到来。简而言之为保证数据的读取完整,下一个数据的到达时间要比上一个数据的请求(保持)时间长。
依然从上面的时序图进行分析:
时钟clk到达捕获寄存器时钟端的到达时间为:
时钟到达时间=capture edge + Tclkb;
则对保持时间而言,数据的需求时间为
data required time (hold) = 时钟到达时间 + Th = capture edge + Tclkb + Th - Tun ;
"下一个数据"从时钟clk到达捕获寄存器D端的到达时间为:
data arrived time = capture edge + Tclka + Tco + Tdata;(下一个数据的起始沿就是上一个数据的捕获沿)
那么保持时间的计数公式为:
Thold = data arrived time(下一个数据) - data required time (hold);
化简为:
Thold = Tclka + Tco + Tdata - Tclkb -Th +Tun ;
只要保证Thold为正,就可以保证数据可以被时序单元完整读取到,不过在DC综合的时候往往先不考虑保持时间的分析。

时序例子

例如在下面的时序分析图里:
假设时钟周期T为4,寄存器的Tsu建立时间为0.2,寄存器的Th保持时间为0.1,clock uncertanty为0;
根据上面的公式,现在计数建立时间(这里数据路径先假设为3.5,不看1.9):
数据的到达时间为:0.7+0.6+3.5=4.8;
时钟到达捕获寄存器的时间为:0.7+0.5=1.2;
对于建立时间来说,数据的需求时间为:0.7+0.5-0.2=1;
那么建立时间为:Tsetup=4+1-4.8=0.2>0,数据可以正常传输,建立时间不违反。
根据上面的公式,现在计数保持时间(这里数据路径先假设为3.5,不看1.9):
数据的到达时间为:0.7+0.6+3.5=4.8;
时钟到达捕获寄存器的时间为:0.7+0.5=1.2;
对于保持时间来说,数据的需求时间为:0.7+0.5+0.1=1.3;
那么保持时间为:Thold=4.8-1.3=3.5,数据可以被完整读取,保持时间不违反。
在这里插入图片描述

发布了13 篇原创文章 · 获赞 38 · 访问量 3625

猜你喜欢

转载自blog.csdn.net/weixin_39015789/article/details/103315399