目录

一、概念

二、时序分析

三、扩展等式关系

四、如果setup time violation或者hold timeviolation应该怎么办?

五、setup hold VS setup check hold check


一、概念

建立时间:触发器(DFF)时钟上升沿到来之前,数据需要保持稳定的最小时间间隙就是建立时间。简而言之,时钟边沿触发前,要求数据必须存在一段时间, 这就是器件需要的建立时间。如不满足建立时间,这个数据就不能被这一时钟打入触发器。
保持时间:触发器(DFF)时钟上升沿到来之后,数据需要保持稳定的最小时间间隙就是保持时间。简而言之,时钟边沿触发后,数据也必须保持一段时间,以便能够稳定读取, 这就是器件需要的建立时间。如果hold time 不够,数据同样不能被打入触发器。

通过时序逻辑的Setup和Hold作约束,即可保证时钟边沿采集数据的稳定状态,从而达成消除毛刺的目的。
  我们都知道数据是在时钟信号上升沿的那一瞬间被打进触发器从而被采样的,那么我们只需要在时钟上升沿的那一瞬间或者那一小段时间保持稳定不就行了?理论上这么想是没问题的,但对于实际工程来讲,这是几乎不可能达到的。
  要分析这个问题,我们不妨先看一下D触发器里面到底长啥样,下图是经典上升沿D触发器的内部结构图:

  与非门G1到G4是维持阻塞电路,G5和G6构成一个RS触发器用于数据的锁存。如有不明白RS触发器的真值表和工作机理的可以在网上找到资料,这里不再累述。
  图中可以看到,时钟信号直接作用在了G2和G3上面,也就意味着G2和G3是真正的采样传输门电路,输入信号应该要正确的被G2和G3采样后传输至后面的RS触发器。我们注意到,数据在传输到G3之前经过了G4,传输至G2之前经过了G4和G1。我们知道,实际情况中信号经过门电路是有延迟的。所以输入信号在到达G2和G3之前经过了G1和G4的延迟,因此就引入了建立时间的概念:建立时间就是为了补偿信号在G1和G4上的延迟。也就是数据在时钟沿来临之前,需要足够的建立时间让信号经过G1和G4到达G2和G3。触发器的建立时间主要取决于G1和G4.
  那么保持时间呢?一样的,上升沿来临时,数据通过G2和G3传输至后面的RS触发器,但G2和G3也会存在延时。因此又引入了保持时间的概念:保持时间就是为了补偿信号在G2和G3上的延迟。也就是数据在时钟沿来临之后,需要足够的保持时间让信号正确的从G2和G3传输至RS触发器。触发器的保持时间主要取决于G1到G4,进而可以推断出,一般D触发器的保持时间比建立时间要长。
  建立时间和保持时间存在的意义就是为了使数据随时钟信号被准确采样。如果不满足建立时间和保持时间会怎样?很简单,因为在传输的过程中数据并不是处于稳定状态而处于亚稳态区(metastability ),则会导致采样的数据可能会出错。

时钟偏移 (clock skew):由于路径延迟,同一个时钟信号到达两个不同的寄存器之间的时间差值,根据差值可以分为正偏移和负偏移。

时间裕量(setup/hold slack):如果数据信号在时钟沿触发前后持续的时间均超过建立和保持时间,那么超过量就分别被称为建立时间裕量和保持时间裕量。

最大时钟频率fmax:fmax = 1/Tmin    Tmin—— 最小时钟周期
   电路正常工作时,所允许的系统时钟脉冲频率最大值。下面会给出最大始终频率计算方法。
时钟抖动(clock jitter):指的是时钟周期的变化。指两个时钟周期之间存在的差值,这个误差是在时钟发生器内部产生的,和晶振或者PLL内部电路有关,布线对其没有影响。由于跟晶振本身的工艺有关,所以在设计中无法避免它能带来的影响,通产只能在设计中留有一定的margin。

二、时序分析

  分析Setup需要分析数据路径和时钟路径,下面结合一个比较经典的模型来看看我们在进行电路设计的时候要如何去满足建立时间和保持时间。

  图中,Tcomb表示两个触发器之间组合逻辑电路延时(可变,可通过电路优化);Tskew1,Tskew2分别为CLK1处相和CLK2处对于原始CLK的时钟偏移,clock skew主要是由于时钟线存在长度而导致的时钟偏移;Tco表示数据从输入端到输出端的最小时间间隔(属于器件延时);两个D触发器均为上升沿触发。

  假设D触发器的建立时间为Tsetup,保持时间为Thold,则存在如下关系式:
       Tsetup < = Tclk+Tskew-Tco-Tcomb (1)
       Thold < = Tco+Tcomb-Tskew (2)

其中:
  Tclk : 时钟周期
  Tskew : Tclk2相对于Tclk1时钟线上的延时,Tskew=Tskew2-Tskew1
  Tco: DFF1触发器从CK端到Q端的时延
  Tcomb : 数据信号经过组合逻辑电路的延时(例如缓冲器)

下图是这个模型的时序图,结合图四我们可以推导出这两个约束关系式。

建立时间约束:
  (1)式的思想其实就是 在第二个时钟沿(数据采样边沿)来临之前,数据稳定的时间一定要大于等于建立时间。因此在一个时钟周期内,数据稳定的时间为Tclk-Tco-Tcomb,因为时钟也存在偏移,因此要把这个时钟偏移加上,于是最后数据稳定的时间为Tclk+Tskew-Tdq-Tcomb,满足这个稳定时间大于建立时间即可。

  理论上能够承载的最大时钟频率为:f_max = 1/(Tsetup+Tco+Tcomb-Tskew)

保持时间约束:
  (2)式的思想为 在第二个时钟沿(数据采样边沿)来临之后,数据稳定的时间一定要大于等于保持时间。因此在时钟沿来临之后,数据稳定的时间为Tco+Tcomb,再减去时钟偏移则为Tco+Tcomb-Tskew,满足这个稳定时间大于等于保持时间即可。

  为什么计算的时候要取第二个时钟沿时刻来计算这些关系式,为什么不能取第一个是时钟沿呢?这是由于在第一个时钟上升沿通常是采集不到数据的,在Tclk1与Tclk2之间的时钟偏移Tskew通常可以通过做时钟树将其控制的很小,一般在ps级别,而在有效数据通过数据路径传输到D2时,还要经历器件延时、组合逻辑延时和线延时等过程,而在这个过程中Tclk2的第一个时钟边沿早已过去,因此只能在下一个时钟边沿采集数据。


三、扩展等式关系

引入时间裕量,建立等式关系:
       Tsetup slack= Tclk+Tskew-Tsetup-Tco-Tcomb-Tnet    (1)
       Thold slack = Tco+Tcomb+Tnet-Thold-Tskew       (2)
其中:
  Tnet为走线的延时;
  Tsetup slack为建立时间裕量;
  Thold slack为保持时间裕量

对于有意义的时序约束,建立时间余量Tslack,setup和保持时间余量Tslack,hold都要大于0才行。故原有公式转化如下:

      Tclk > Tco+Tcomp+Tnet+Tsetup-Tskew    (1)

      Tco+Tcomp+Tnet > Thold+Tskew       (2)

为了得到更加简单的理解,我们按照常规,忽略Tnet和Tskew。原因在于Tnet,Tskew通常太小。
      Tclk > Tco+Tcomp+Tsetup   (3)

      Tco+Tcomp > Thold     (4)

(3)式表明,数据从第一个触发器采样时刻传到第二个触发器采样时刻,不能超过一个时钟周期!假如数据传输超过一个时钟周期,那么就会导致第二个触发器开始采样的时候,想要的数据还没有传过来。

对于(4)式两边同时加上Tsetup,得到(5):

      Tco+Tcomp+Tsetup > Thold+Tsetup    (5)

结合(3)式和(5)式,我们得到如下的式子:

      Thold+Tsetup < Tco+Tcomp+Tsetup < Tclk    (6)

Tco+Tcomp+Tsetup是指数据从第一级触发器采样瞬间开始,传输到第二级触发器并被采样的传输延时。我们简称为数据传输延时。

(6)式右侧Tco+Tcomp+Tsetup< Tclk表明 :约定数据传输延时不能太大,如果太大(超过一个时钟周期),那么第二级触发器就会在采样的时刻发现数据还没有到来。
(6)式左侧Thold+Tsetup <Tco+Tcomp+Tsetup表明:约定数据传输延时不能太小。Thold+Tsetup的时间宽度叫做触发器的采样窗口,在窗口期内,D触发器是脆弱的,对毛刺没有免疫力的。假如数据传输延时特别小,那么就会发现,当第二级触发器开始采样的时候,第一级触发器的窗口期还没有结束!也就是说,如果这个时候输入端数据有变化,那么不仅第一级触发器处于亚稳态,第二级触发器也将处于亚稳态!

综上,可以知道,数据传输延时既不能太大以至于超过一个时钟周期,也不能太小以至于小于触发器采样窗口的宽度。

四、如果setup time violation或者hold timeviolation应该怎么办?

Setup time violation solution调整上述公式中的变量:Tclk, Tcomb,Tskew
  - 增大Tclk
    就是低数字系统的工作率 (很多产品等级,是根据频率来分的;品质好的芯片,频率高,价格贵)
 -减少Tcomb:
    从数字电路逻辑功能设计的角度看
      在组合电路之间插入寄存器,增加流水线(pipeline);
      在不改变逻辑功能的前提下,对组合逻辑电路进行优化
      减少扇出或者负载;
    从数字物理版图实现的角度看
      更换速度更快的标准单元(HVT – High Voltage Threshold, SVT – Standard Voltage Threshold)
      更换驱动能力更强的标准单元(X2, X4)
      跟换阻值更低的金属层以减少标准单元电路的负载和金属线网的延迟
 -增加Tskew
    在时钟路径上,插入buffer,增加时钟路径的延迟,但是不能影响hold timing。
hold time violation solution:
  -增大Tcomb
    在组合电路的数据传输路径上,插入延迟单元(buffer),增加组合逻辑延迟;但是当组合逻辑延时增加时,setup time可能会出现违例。这时候就需要做平衡(balance)。由此可以看出setup和hold time是相互制约的。
  -减小Tskew
    时钟树调整,做好clock tree balance,hold就容易收敛。因为hold time与时钟周期没有关系。

Hold time violation solution移除hold time违例包括相对于时钟的延迟数据,以便数据在时钟沿到达之后指定的一段时间(保持时间)不改变。有几种设计人员用来插入适当延迟的方法,其概述如下:

——使用Synopsys方法

——手工插入延迟

——dc_shell 命令自动插入延迟

①Synopsys提供如下dc_shell命令,它使能compile命令修正保持时间违例:

set_fix_hold <clock name>

set_fix_hold命令指示DC在合适的位置插入缓冲器来修正保持时间违例。

②设计者可串联一串缓冲器,以相对于时钟恰好足够地延迟数据,以使它通过保持时间检查。

适当增加tcomb,或者后端布局布线时去减少tclk_delay(两级寄存器之间的clk线路延时为tclk_delay)

五、setup hold VS setup check hold check

1. setup time & hold time

数字电路中最重要的时序单元是触发器,而最常用的触发器就是 DFF

对于任何一个 DFF, 都有两个重要的参数: setup time 和 hold time

这两个参数是相对于时钟信号上升沿(或者下降沿)来定义的:

setup time 是指:在 CLK 端的时钟信号上升沿到来之前, D 端数据信号必须保持稳定的最短时间,这个最短时间长度记为 Tsu

hold   time 是指:在 CLK 端的时钟信号上升沿到来之后, D 端数据信号必须继续维持稳定的最短时间,这个时间长度记为 Th

也就是说,D 端的数据信号必须比时钟上升沿提前至少 Tsu 时间到达D端,且在时钟上升沿到来之后的 Th 时间长度内依然保持稳定,才能保证 DFF 将 D 端的数据信号稳定的锁存下来。

换句话说,如果时钟上升沿出现在时间 Tr,那么在(Tr - Tsu,Tr + Th)这个时间区间内,DFF 的 D 端数据必须保持稳定不变,否则 DFF 就无法准确地锁存数据,导致电路出错。

数字电路设计的重中之重就是要保证每一个 DFF 都能够将其输入端的数据稳定地锁存住,也就是要保证每个 DFF 的 setup time 和 hold time 都不出现违例。

2. 静态时序分析(STA)基本模型

下图就是一个最简单的静态时序分析模型:

在时钟上升沿的驱动下,REG1 将其 D 端的数据锁存下来并且输出到 Q 端, Q 端的数据经过组合逻辑运算后传输到 REG2 的 D 端,然后在下一个时钟上升沿的驱动下,REG2 将其 D 端的数据锁存下来,这样就完成了一次数据运算,并将运算结果保存在 REG2 中,整个过程需要在一个时钟周期内完成。

在这个过程中,最重要的是当数据到达 REG2 的 D 端时,必须满足 REG2 的 setup time 和 hold time,这样才能准确地锁存数据。

静态时序分析的目的,就是分析 REG2 的 setup time 和 hold time 是否得到满足,如果不满足,就需要报出 timing violation,引导工具或者设计人员修改。

3. setup check & hold check

setup check 和 hold check 可以用波形图直观地表示出来:

setup check:

时钟 clk1 的 launch edge 驱动 REG1 发出数据,经过组合逻辑运算后传输到 REG2 的 D 端,然后被 clk2 的 capture edge 锁存到 REG2 中,如果组合逻辑很复杂,导致数据传输路径太长,那么数据就可能侵入 REG2 的 setup time,导致数据无法准确锁存,所以 setup check 就要求数据传输不能太慢,否则会引起 setup violation

hold check:

上面说到如果数据传输路径太长,可能导致setup violation,那么如果数据传输路径非常短,数据就会在很短时间内到达 REG2 的 D 端,此时 REG2 可能还正在锁存上一个数据,也就是数据侵入了 REG2 的 hold time,导致上一个数据无法准确锁存,所以 hold check 就要求数据传输不能太快,否则会引起 hold violation

总结来讲,setup check 和 hold check 要求数据传输路径既不能太长,又不能太短,数据必须在如下图所示的 timing window 内到达,才能保证电路正常工作。

4. synchronous & asynchronous

在静态时序分析中,有一个很重要的概念是同步和异步

如果 launch clock 与 capture clock 有固定的相位差,那就是同步时序

如果两者没有固定的相位差,那就是异步时序

一般情况下,STA 只检查同步时序,不用检查异步时序

同步时序又分为以下几种情况:

a) launch 和 capture 的周期相同:

这种情况最简单,launch clock 发出的数据被一个周期后的capture clock 锁存,setup check 和 hold check 如下图:

b) launch 和 capture 的周期不同,且 launch 周期小于 capture 周期

这是典型的快时钟域到慢时钟域,此时有多个上升沿发出的数据可能被同一个capture 上升沿采集到,如下图:

那么在这种情况下,STA 工具会选择哪些边沿来做时序分析呢?

首先,launch 的周期是10ns,capture 的周期是 15ns,可以看出每隔30ns形成一个循环,所以只需要考虑30ns 以内的情况,后面的都是无限重复

工具会从这 30ns 内找出最苛刻的时钟边沿来做时序分析,对于 setup 来说,从 10ns 到 15 ns 这组的时序是最严格的,所以工具会选择这组来做 setup check; 而对于 hold, 从 0ns 到 0ns 这组的时序最严格,所以选择这组做 hold check,保证从 0ns 发出的数据不会干扰到capture edge 在 0ns 采集上一组数据

c) launch 和 capture 的周期不同,且 launch 的周期大于 capture 的周期

这是慢时钟域到快时钟域,那么此时又该选择哪些边沿来做时序分析?

首先,launch 的周期是 15, capture 的周期是10, 两者的最小共同周期就是 30ns, 而在 30ns 内,对于 setup 最严格的时序是从 15ns 到 20ns 这一组,所以工具会选择这组做 setup check,而对于hold, 最严格的依然是从 0ns 到 0ns, 所以选择这组做 hold check

总之,对于 launch 和 capture 周期不同的同步时序电路,只要先找出两者的最小共同周期,然后在这个周期内找到最苛刻的那组时钟沿,就可以快速分析出用来做 setup check 和 hold check 的时钟沿;比如下面这个例子,launch clock 的周期是6ns,capture 的周期是10ns,那么两者的最小周期就是 30ns,在这 30ns 内,最严格的 setup 是从 18ns 到 20ns,而最严格的 hold 依然是从 0ns 到 0ns 。

对于异步时序来说,由于无法确定launch 和 capture 的最小共同周期,各个时钟边沿之间也没有固定的时间差,所以是无法做时序分析的,对于跨时钟域的异步电路,需要在设计阶段就做好防护,采用多级 register、异步 FIFO 等方法确保数据的准确传输。

Setup Time 、Hold Time、Setup check、Hold check,同步异步 及违例修复相关推荐

  1. Document TitleHow to troubleshoot Funds Check Hold Issues on Payables Invoices

    最近发票验证的时候 总是被系统自动加上HOLD :资金检查无法进行[@more@] Document TitleHow to troubleshoot Funds Check Hold Issues ...

  2. 解决argo workflow报错:MountVolume.SetUp failed for volume “docker-sock“ : hostPath type check failed

    提交workflow时报错: MountVolume.SetUp failed for volume "docker-sock" : hostPath type check fai ...

  3. SAP WM中阶Storage Type的Capacity Check – Usage check based on material

    SAP WM中阶Storage Type的Capacity Check – Usage check based on material 1, Storage type Z03激活了Capacity C ...

  4. sign check fail: check Sign and Data Fail

    支付宝开发报错:com.alipay.api.AlipayApiException: sign check fail: check Sign and Data Fail 解决方法: 确认使用的支付宝公 ...

  5. 支付宝错误提示: sign check fail: check Sign and Data Fail JSON also

    细节决定命运 ,真是体会深刻! 支付宝报错:sign check fail: check Sign and Data Fail JSON also 支付宝签名文件错误,查了好几天,密钥.公钥也重新生成 ...

  6. sign check fail: check Sign and Data Fail解决方案

    我们先看一下类似的错误信息如下: com.alipay.api.AlipayApiException: sign check fail: check Sign and Data Fail 这里着重说明 ...

  7. UVA10196 Check The Check【模拟+回溯】

    Your task is to write a program that reads a chess board configuration and answers if there's a king ...

  8. 解决支付宝验证失败sign check fail: check Sign and Data Fail

    成功解决支付宝验证失败sign check fail: check Sign and Data Fail 解决方法: 在使用支付宝的沙漏环境开发测试支付功能的时候,报上面错误. 问题出现在一个参数上: ...

  9. Fedora升级到4.3.4内核后virtualbox执行/sbin/rcvboxdrv setup报Bad argument setup

    [t@bjb0541 ~]$ uname -a Linux bjb0541 4.3.4-300.fc23.x86_64 #1 SMP Mon Jan 25 13:39:23 UTC 2016 x86_ ...

  10. UVA 10196 Check The Check(模拟)

    #include <iostream> #include <cstdlib> using namespace std;char Map[8][8]; // 表示国际象棋棋子的位 ...

最新文章

  1. 《数学之美》第27章 期望最大化算法
  2. Python之web开发(六):python使用django框架搭建网站之登陆页搭建不同页面之间跳转
  3. mysql创建存储过程意义_浅谈一下mySql中创建存储过程
  4. 股票历史数据-历史数据股票工具
  5. CAD入门教程,基本设置,使用技巧
  6. MIT Mini Cheetah 的驱动与结构原理解读以及对尺寸效应
  7. php怎么添加extension,php中没有extension怎么办_后端开发
  8. 最好的年终奖,是你拥有随时跳槽的能力
  9. 用收敛标准计算神经网络迭代次数
  10. 浦发银行计算机抓紧用面试题目,浦发银行面试问题
  11. elk笔记25--快速体验APM
  12. 成君忆不幸被彭剑锋言中
  13. Java物流项目第五天 数据聚合服务开发(pd-aggregation)
  14. linux tc流量控制(一):classless qdisc
  15. apicloud命名空间$api方法集合
  16. 精妙绝伦的CSS——CSS效果例子
  17. thinkphp5.0返回上一页面
  18. 什么是软件工程化?什么是“前端工程化“?
  19. 机器学习基石 Lecture1: The Learning Problem
  20. 深度学习框架DeepLearning4J(DL4J)的安装及配置

热门文章

  1. regedit 命令行参数
  2. Day3:MVP+ButterKnife+Dagger2的使用
  3. MyBatis是如何自动装配的
  4. RSS阅读器FeedDemon使用方法
  5. excel表格中身份证信息提取出生年月日,年龄,性别,出生地
  6. facebook登陆,如何邀请玩家成为测试人员
  7. 方框加对勾怎么输入_如何打出带方框的对号
  8. 【JAVA学习】六、设计模式
  9. 几个开源的视频编解码器介绍
  10. echarts x轴 y轴设置