Reborn

https://blog.csdn.net/Reborn_Lee是我的原博客地址(内容广泛),在AET令立一个博客,专门记录硬件、FPGA相关的内容吧。

静态时序分析基础

0
阅读(532) 评论(4)

目录

静态时序分析(SAT)

相关参数分析

建立和保持时间

(数据输出延时)(触发器从时钟有效,数据从输入到达输出的时间)和缓冲延时

发射沿(launch edge)与锁存沿(latch edge)

数据到达时间(Data Arrival Time)

时钟到达时间(Clock Arrival Time)

时钟偏斜(Clock skew)

数据需求时间(Data Required Time)

建立余量(Setup Slack)

保持余量(Hold Slack)


静态时序分析(SAT)

静态时序分析的前提就是设计者先提出要求,然后时序分析工具才会根据特定的时序模型进行分析,给出正确是时序报告。

进行静态时序分析,主要目的就是为了提高系统工作主频以及增加系统的稳定性。对很多数字电路设计来说,提高工作频率非常重要,因为高工作频率意味着高处理能力。通过附加约束可以控制逻辑的综合、映射、布局和布线,以减小逻辑和布线延时,从而提高工作频率。


相关参数分析


  • 建立和保持时间

如下图所示,建立时间就是时钟有效沿到来之前数据必须保持稳定的最小时间;

保持时间就是时钟有效沿到来之后数据必须保持稳定的最小时间;


  • T_{co}(数据输出延时)(触发器从时钟有效,数据从输入到达输出的时间)和缓冲延时

T_{co}是指时钟触发开始到有效数据输出的器件内部所有延时的总和。或简单地说:在时钟有效后,D的数据并不能立即传到Q端,这段等待的时间就是触发器的时钟到输出时间。

(这个时间指的是当时钟有效沿变化后,数据从输入端到输出端的最小时间间隔。)

而缓冲延时是指信号经过缓冲器到达有效的电压输出所需要的时间。

二者之间有所区别:

T_{co}除了包含缓冲延时,还包括逻辑延时。

如下图:给出确定T_{co}的方法,zai在输出缓冲的末端直接相连一个测量负载,最常见的是50欧姆的电阻或30pF的电容,然后测量负载上的信号电压到达一定电平所需要的时间,这个电平称为测量电压(Vms),一般是信号高电平的一半。


  • 发射沿(launch edge)与锁存沿(latch edge)

时序分析起点(launch edge):第一级寄存器数据变化的时钟边沿,也是静态时序分析的起点。

时序分析终点(latch edge):数据锁存的时钟边沿,也是静态时序分析的终点。

如下图:


  • 数据到达时间(Data Arrival Time)


  • 时钟到达时间(Clock Arrival Time)

时钟到达时间就是指时钟从latch edge到达目的寄存器(destination register)输入端所用的时间。


  • 时钟偏斜(Clock skew)


  • 数据需求时间(Data Required Time)

  • (建立)(Setup)数据需求时间

(Setup)Data Required Time =LatchEdge+ T_{clk2} - T_{su}

这里不考虑这个建立不定态(Setup Uncertainty);

  • (保持)(hold)数据需求时间

(Hold)DataRequiredTime=LatchEdge+T_{clk2}+T_{h}

上图中的Hold Uncertainty这里不考虑。


  • 建立余量(Setup Slack)

下面这幅图画出了建立余量(Setup Slack)的示意图:

下面这幅图根据上图给出了建立余量(Setup Slack)的计算公式,但是还不够清晰。下面我们认真解读一下:

我们通过上面的介绍已经知道了建立(Setup)数据需求时间(Data Required Time)为:

(Setup)Data Required Time =LatchEdge+ T_{clk2} - T_{su}

而数据到达时间(Data Arrival Time)为:

Data Arrival Time = LaunchEdge +T_{clk1} + T_{co}+T_{data }

那么建立余量(Setup Slack)为:

Setup Slack = Data Required Time - Data Arrival Time

= (Latch Edge +T_{clk2}-T_{su})-(Launch Edge+T_{clk1}+T_{co}+T_{data})

=(LatchEdge - LaunchEdge)+(T_{clk2}-T_{clk1})-(T_{su}+T_{co}+T_{data})

这里假设时钟偏斜(Clock Skew)为0,也就是T_{clk2}-T_{clk1}=0,同时LatchEdge - LaunchEdge=T(这是很好理解的,这两个边沿之间的距离恰好是一个时钟周期);

(下面这个公式很重要!与其记推导公式,不如记下面这个公式来的直接,明显!)

=T - T_{su}-T_{co}-T_{data}

对应的区域位于上图的绿色部分!

这个最终结果说明了源寄存器与目的寄存器之间延迟 T_{data}不能太长的原因,延迟越长,slack越小。

从上图公式下面还有这样的信息:

当建立余量为正时,满足时序要求,否则不满足。


  • 保持余量(Hold Slack)

保持余量的分析方法与建立时间余量的分析方法如出一辙,简单看下,这个相对于建立时间余量要好理解一点,至少比较直观。

同样,我们先看看数据到达时间以及保持(Hold)数据需求时间(Data Required Time):

Data Arrival Time = LaunchEdge +T_{clk1} + T_{co}+T_{data }

(Hold)DataRequiredTime=LatchEdge+T_{clk2}+T_{h}

如此以来,我们就可以得到保持余量(Hold Slack)为:

Hold Slack = Data Arrival Time - (Hold)Data Required Time

=NextLaunchEdge + T_{clk1}+ T_{co}+T_{data}-(LatchEdge+T_{clk2}+T_{h})

这里:

NextLaunchEdge= LatchEdge

=(LatchEdge - LatchEdge) + (T_{clk1}-T_{clk2})+(T_{co}+T_{data}-T_{h})

=T_{co}+T_{data}-T_{h}

从最终结果可以看出,这就是源寄存器与目的寄存器之间延迟T_{data}不能太短的原因,时间太短,Hold Slack越小。

同样从上图可以知道,余量结果为正,则满足时序要求,否则不满足。


参考文献:

Altera时序分析相关资料

静态时序分析


  1. 谢谢,正在学习时序分析

  2. @njnh   

    有没有比较好的时序分析的教程推荐,谢谢

    如果你是做FPGA开发的,建议阅读相关厂商的时序约束文档(Xilinx、Altera、Lattice、Mirochip等厂家都有自己的文档的);

    如果你是做ASIC开发的,建议阅读你使用的开发工具的时序约束文档(Synopsis等)。


    如果之前没有任何静态时序分析的基础,并且英文水平一般的话。建议,先阅读网上的一些博客、部分公司的培训文档等,然后再去阅读上面提到的文档。

  3. 有没有比较好的时序分析的教程推荐,谢谢

  4. 多谢分享 学习了