tag 标签: 时序分析

相关博文
  • 2017-2-17 10:05
    354 次阅读|
    0 个评论
    时序分析: IC时序验证用两种方法实现:一是动态时序分析,即根据电路中提取的延时参数,通过仿真软件动态的仿真电路以验证时序是否满足要求。二是静态时序分析,即通过分析设计中所有可能的信号路径以确定时序约束是否满足时序规范。 动态时序分析的时序确认通过仿真实现,分析的结果完全依赖于验证工程师所提供的激励。不同激励分析的路径不同,也许有些路径(比如关键路径)不能覆盖到,当设计规模很大时,动态分析所需要的时间、占用的资源也越来越大。 静态时序分析根据一定的模型从网表中创建无向图,计算路径延迟的总和,如果所有的路径都满足时序约束和规范,那么认为电路设计满足时序约束规范。静态时序分析的方法不依赖于激励,且可以穷尽所有路径,运行速度很快,占用内存很少。它完全克服了动态时序验证的缺陷,适合大规模的电路设计验证。对于同步设计电路,可以借助于静态时序分析工具完成时序验证的任务。 上面讲完了DC,下面来讲解下时序分析,主要侧重静态时序分析(sta),其实这块应该放在上面讲解的,DC一般会内置一个sta的工具用来做时序分析,只是这块的东西相比而言比较多,也比较难,所以放在了后面。时序分析的目的就是看当前的电路是不是能跑到你预期的频率,如果不行,则可能需要修改代码,如果可以,可以尝试在频率达到的要求下将面积和功耗降下来。综合及时序分析的结果可以为后续的布局布线等操作提供一定的参考和基准,可以说时序分析比起代码设计还要重要,而且这块的难度也相当的大。 1、 时序路径 上图是我们最常见的几种时序路径: ` Path1:从input port端到DFF/D端,一般需要对clk和rst外的所有input port设置input_delay,通常情况下设置比较紧的时序时为2T/3(不知道input_delay是多少的时候给出的预估),也就是给input port端到DFF/D端留T/3的时间; Path2:从DFF的clk pin到另一个DFF/D端; Path3:从DFF的clk pin到output port,一般而言,需要对所有output port设置output_delay,通常情况下设置比较紧的时序时为2T/3(不知道output_delay是多少的时候给出的预估),也就是给DFF的clk pin到output port端留T/3的时间; Path4:纯组合逻辑,从input port到output port,一般而言其延时设置为5T/3,(减去2T/3的input delay和2T/3的output delay,也就是给组合逻辑留了T/3的时间)。 ` 这种路径一般称为feedthrough path,设置约束如下: 上图是几种不常被提到的时序路径: 上图是rst的一些时序要求,这些通常不被那么重视,原因是rst的复位和释放复位的时间基本上都很长,一定能满足时序要求。 无论有多少时序路径,静态时序分析都离不开建立时间的setup time和保持时间hold time的检查。
  • 2017-2-17 09:58
    338 次阅读|
    0 个评论
    2、 为什么会有setup(建立时间)和hold(保持时间)(注:这部分参考了网上的资料) 建立时间粗略示意 保持时间简单示意 图1经典的上升沿D触发器内部结构 关于为什么会有建立时间和保持时间,我曾试图从触发器或锁存器内部的结构去分析和证实,但是看了许多资料,由于触发器的内部结构有很多,所以分析方法很多,说法也很多。下面针对上图比较经典的结构来分析一下建立时间和保持时间。 如上图1所示,这是一个上升沿触发的D触发器,需要注意的是,图中的6个与非门都是有延迟的,也就是在某一时刻输入组合逻辑的数据,在一段时间之后才能影响其输出,这是产生建立时间和保持时间要求的最根本原因。 首先,我们在假设所有的与非门的延迟为0,叙述一下这个触发器的整体工作流程。 当CLK=0时,与非门G3和G4的输出均为1,输出的1反馈到G1和G2作为输入,导致G1和G2的输出分别为D和/D,输出的D和/D又反馈到G3和G4;而G5和G6在此期间一直锁存着之前的数据,不受输入影响。 图2 CLK=0时触发器内部信号详情 当CLK=1时,与非门G3和G4的输出变为/D和D,输出到G5和G6作为输入,根据锁存器的原理,G5和G6最终会稳定的输出Q和/Q。 图3 CLK=1时触发器内部信号详情 然后我们把门电路的时延加上。设G2和G1?的延迟为T1,当CLK=0时,如果D在时钟跳变前的T(T)时间才从d1更新为d2,那么G1和G2在时钟跳变时刻的输出值肯定是d1和/d1,而不是d2和/d2,进而影响到G3和G4的输出。如果要使得G1和G2的输出为d2和/d2,就必须要求D起码在时钟跳变之前的T1时间内维持d2稳定不变。这个T1就是建立时间Tsu。 当CLK=1时,G3和G4的延迟为T2,当CLK=1时,如果D在时钟跳变之后的T(T)时间从d2更新为d3,由于G3和G4的输出在T的时间内还保持为1,所以D的更新会影响G2和G1的输出,进而影响G3和G4的输出,进而影响G5和G6的输出,造成输出Q和/Q不稳。
  • 2017-2-17 08:54
    354 次阅读|
    0 个评论
    6、false 路径 硬件设计中总是会存在一些不可能的逻辑电路路径,这一种路径需要设置成false path,目的是让工具不再对其进行优化和时序检查。比较常见的false path例如两个时钟域之间的逻辑,如果你不指定为falth path,那么工具费很大的力气也很难让时序满足,因为本身跨时钟域时序关系就是不确定的。关掉的目的就是不让工具检查,省时省力,而他们之间的正确性要靠cdc处理(可以参考我之前写的关于cdc的 处理方法)。另外还有scan逻辑和正常逻辑之间的逻辑也可以设置成false path。 7、half cycle path半周期路径 有一些外设的工作沿是双沿的,也就是一个边沿推出数据,另一个边沿采样数据,比较常见的外设有ddr,也有一些通信协议,例如xgmii用于以太网和光纤的通信协议。 如上图,下降沿launch数据,最靠近的上升沿capture数据,离capture边沿1T的是hold检验边沿。这样的话,可以看成hold多了半个周期的slack。 8、recovery和removal 这两个的时间检查用于异步逻辑的释放动作,例如异步的复位动作。Removal类似于hold的检查,recovery类似于setup的检查。
  • 2015-7-16 19:59
    1139 次阅读|
    0 个评论
    建立时间和保持时间 本文节选自特权同学的图书《 FPGA 设计实战演练(逻辑篇)》 配套例程下载链接: http://pan.baidu.com/s/1pJ5bCtt   在这个波形中,我们看到 clk_r3 的前后各有一条虚线,前一条虚线到 clk_r3 上升沿的这段时间即建立时间, clk_r3 上升沿到后一条虚线的这段时间即保持时间。前面对建立时间和保持时间下定义时提到过,在这段时间内不能够有数据的变化,数据必须保持稳定。而在这个波形中,也确实没有看到在建立时间和保持时间内, reg3in 的数据有任何的变化,因此我们可以稳定的将 reg3in 的数据锁存到 reg3 的输出 reg3out 中。 (特权同学,版权所有) 图 8.10 建立时间和保持时间都满足要求的情况 如图 8.11 所示的波形,同样的一些信号,但我们发现 reg3in 在 clk_r3 的建立时间内发生了变化,这带来的后果就是 clk_r3 上升沿锁存到的 reg3in 数据不确定,那么随后的 reg3out 值也会处于一个不确定状态。比如第一个时钟周期,原本 reg3in 应该是稳定的低电平,但是由于整个路径上的延时时间过长,导致了 reg3in 在 clk_r3 的建立时间内数据还未能稳定下来,在建立时间内出现了电平正处于从高到低的变化,即不稳定的状态,那么导致的后果就是 reg3out 的最终输出不是确定的状态,很可能是忽高忽低的亚稳态,而不是原本期望的低电平。 (特权同学,版权所有) 图 8.11 建立时间违规的情况 我们再来看看保持时间违规的情况,如图 8.12 所示,这次是数据传输得太快了,原本应该下一个时钟周期到达 clk_r3 的数据竟然在 clk_r3 的前一个时钟周期的保持时间还未过去就来到了。因此,它出现的最终危害也是后端输出的 reg3out 处于不确定的状态。 (特权同学,版权所有) 图 8.12 保持时间违规的情况  
  • 热度 6
    2013-7-19 10:27
    9481 次阅读|
    4 个评论
    时序分析基础与时钟约束实例( 1 ) 文中实例配套 SF-CY3 开发套件。更多内容请参考《 SF-CY3 FPGA 套件开发指南》。 何谓静态时序分析( STA , Static Timing Analysis )? 首先,设计者应该对 FPGA 内部的工作方式有一些认识。 FPGA 的内部结构其实就好比一块 PCB 板, FPGA 的逻辑阵列就好比 PCB 板上的一些分立元器件。 PCB 通过导线将具有相关电气特性的信号相连接, FPGA 也需要通过内部连线将相关的逻辑节点导通。 PCB 板上的信号通过任何一个元器件都会产生一定的延时, FPGA 的信号通过逻辑门传输也会产生延时。 PCB 的信号走线有延时, FPGA 的信号走线也有延时。这就带来了一系列问题,一个信号从 FPGA 的一端输入,经过一定的逻辑处理后从 FPGA 的另一端输出,这期间会产生多大的延时呢?有多个总线信号从 FPGA 的一端输入,这条总线的各个信号经过逻辑处理后从 FPGA 的另一端输出,这条总线的各个信号的延时一致吗?之所以关心这些问题,是因为过长的延时或者一条总线多个信号传输时间的不一致,不仅会影响 FPGA 本身的性能,而且也会给 FPGA 之外的电路或者系统带来诸多问题。 言归正传吧,之所以引进静态时序分析的理论也正是基于上述的一些思考。它可以简单的定义为:设计者提出一些特定的时序要求(或者说是添加特定的时序约束),套用特定的时序模型,针对特定的电路进行分析。分析的最终结果当然是要求系统时序满足设计者提出的要求。          下面举一个最简单的例子来说明时序分析的基本概念。假设信号需要从输入到输出在 FPGA 内部经过一些逻辑延时和路径延时。系统要求这个信号在 FPGA 内部的延时不能超过 15ns ,而开发工具在执行过程中找到了如图所示的一些可能的布局布线方式。那么,怎样的布局布线能够达到系统的要求呢?仔细分析一番,发现所有路径的延时可能为 14ns 、 15ns 、 16ns 、 17ns 、 18ns ,有两条路径能够满足要求,那么最后的布局布线就会选择满足要求的两条路径之一。          静态时序分析的前提就是设计者先提出要求,然后时序分析工具才会根据特定的时序模型进行分析,即有约束才会有分析。若设计者不添加时序约束,那么时序分析就无从谈起。特权同学常常碰见一些初学者在遇到问题时不问青红皂白就认为是时序问题,实际上只有在添加了时序约束后,系统的时序问题才有可能暴露出来。          下面我们再来看一个例子,我们假设有 4 个输入信号,经过 FPGA 内部一些逻辑处理后输出。 FPGA 内部的布线资源有快有慢之分,好比国道和高速公路。通过高速通道所需要的路径延时假设为 3ns-7ns ,但只有两条可用;而通过慢速通道的路径延时则 10ns 。          默认情况下,离高速通道较近的 din_2 和 din_3 路径被布线到了高速通道上,当前的 4 个信号在 FPGA 内部的延时为:          din1 = 15ns, din2 = 4ns, din3 = 6ns, din4 = 13ns 。 但是,我们实际的系统需求是这样的:          din1 10ns, din2 10ns, din3 20ns, din4 20ns 。          按照前面给出的 4 个输入信号的默认布局布线情况来看, din1 是无法满足时序要求的。          如果我们按照实际的需求对 FPGA 进行如下的时序约束:          din1 10ns, din2 10ns, din3 20ns, din4 20ns 。          此时, FPGA 将重新进行布局布线。 由于添加了时序约束,因此, FPGA 的布局布线工具会根据这个实际需求,重新做布局布线后,我们看到,重新布局布线后的路径延时如下:            din1 = 7ns, din2 = 4ns, din3 = 18ns, din4 = 13ns 。          此时, FPGA 内部的时序全部都能够满足要求。          关于约束,我们要稍微提一下两种不恰当的约束方法,即欠约束和过约束。我们假设下面提到的两种情况下的原始系统实际时序要求都是一样的,即前面我们所说的: din1 10ns, din2 10ns, din3 20ns, din4 20ns 但是下面这两种情况的约束不是完全按照实际系统时序需求来约束,我们来看看这些情况下会出现什么问题。 欠约束的情况( din1 和 din2 过约束):          如果对本实例添加约束为 din1 20ns, din2 20ns, din3 20ns, din4 20ns 。          此时,由于 4 条路径的延时都能够控制在 20ns 要求之内,所以当前的约束都能够达到目标。          但是,相对于实际的情况,有两种情形:          A. din1 和 din2 走了高速通道,那么当前约束也能够满足实际的时序要求;          B. din1 和 din2 都没有走高速通道,或者有 1 条路径走了高速通道,那么结果是一样的,整个系统的时序无法满足要求。     过约束的情况( din3 和 din4 过约束):          如果对本实例添加约束为: din1 10ns, din2 10ns, din3 10ns, din4 10ns 。          此时,由于能够走高速通道使得路径延时 10ns 的路径只有 2 条,那么无论如何当前的约束都有 2 条无法达到目标。          但是,相对于实际的情况,有两种情形:          A. din1 和 din2 走了高速通道,那么当前约束也能够满足实际的时序要求;          B. din1 和 din2 都没有走高速通道,或者有 1 条路径走了高速通道,那么结果是一样的,整个系统的时序无法满足要求。       这个简单的例子当然不会是 FPGA 内部实际的情况,但是 FPGA 内部的各种资源若要得到均衡的分配,设计者就必须添加一定的约束(时序约束),将设计的需求传达给工具,那么才有可能指导工具进行资源的合理分配,保证系统的基本性能要求得以实现。          时序欠约束和时序过约束都是不可取的,设计者应该根据实际的系统时序要求,添加合适的时序要求(可以稍微过约束),帮助设计工具达到最佳的时序性能。          下面我们再来认识一些时序分析的几个最基本的概念,即时钟和建立时间、保持时间的关系。          时钟这个并不陌生的词汇,特权同学也不大做文章,就先举个最典型的时钟模型献给大家。如图所示,理想的时钟模型是一个占空比为 50% 且周期固定的方波。 为一个时钟周期, 为高脉冲宽度, 为低脉冲宽度, = + 。占空比定义为高脉冲宽度与周期之比,即 / 。          所谓建立时间( ),是指在时钟上升沿到来之前数据必须保持稳定的时间;所谓保持时间( ),是指在时钟上升沿到来以后数据必须保持稳定的时间。一个数据需要在时钟的上升沿被锁存,那么这个数据就必须在这个时钟上升沿的建立时间和保持时间内保持稳定。          这里,我们举一个二输入与功能的时序设计模型,如图所示。输入数据 data1 和 data2 会在时钟的上升沿被分别锁存到 reg2 和 reg1 的输出端,然后这两个信号分别经过各自的路径到达与门 and 的输入端,他们相与运算后信号传送到下一级寄存器 reg3 的输入端,对应他们上一次被锁存后的下一个时钟上升沿, reg3 的输入端数据被锁存到了输出端。这个过程是一个典型的寄存器到寄存器的数据传输。下面我们就要以此为基础来探讨他们需要满足的建立时间和保持时间关系。          下面这个波形, clk 表示时钟源发出的时钟波形,它要分别达到上面例子中的源寄存器 reg1 和 reg2 ,以及达到目的寄存器 reg3 ,所经过的时间是不一样的,因此我们看到波形中给出的时钟达到 reg3 的波形 clk_r3 相对于基准时钟 clk 的波形会略有一些偏差(稍微延时一些,这是真实情况的模拟)。 Reg1out 和 reg2out 分别是数据 data1 和 data2 被锁存到各自寄存器的输出端的波形, reg3in 则是 reg1out 和 reg2out 的波形经过路径延时和门延时后到达 reg3in 的波形,而 reg3out 则是在 clk_r3 的上升沿来到并锁存好有效的数据后,其寄存器输出端的波形。          在这个波形中,我们看到 clk_r3 的前后各有一条虚线,前一条虚线到 clk_r3 的上升沿这段时间即建立时间, clk_r3 的上升沿到后一条虚线即保持时间。前面对建立时间和保持时间下定义时提到过,在这段时间内不能够有数据的变化,数据必须保持稳定。而在这个波形中,也确实没有看到建立时间和保持时间内, reg3in 的数据有任何的变化,因此我们可以稳定的将 reg3in 的数据锁存到 reg3 的输出 reg3out 中。 我们再来看下面这个波形,同样的一些信号,但我们发现 reg3in 在 clk_r3 的建立时间内发生了变化,这带来的后果就是 clk_r3 上升沿锁存到的 reg3in 数据不确定,那么随后的 reg3out 值也会处于一个不确定状态。比如第一个时钟周期,原本 reg3in 应该是稳定的低电平,但是由于真个路径上的延时时间过长,导致了 reg3in 在 clk_r3 的建立时间数据还未能稳定下来,在建立时间内出现了电平正处于从高到低的变化,即不稳定的状态,那么导致的后果就是 reg3out 的最终输出要么是高电平要么是低电平,而不是原本期望的低电平。          我们再来看看保持时间违规的情况,如图所示,这次是数据传输得太快了,原本应该下一个时钟周期到达 clk_r3 的数据竟然在 clk_r3 的前一个时钟周期后的保持时间还未过去就来到了。因此,它出现的最终危害也是后端输出的 reg3out 处于不确定的状态。    
广告