建立时间和保持时间贯穿了整个时序分析过程。只要涉及到同步时序电路,那么必然有上升沿、下降沿采样,那么无法避免setup-time 和 hold-time这两个概念。本文内容相对独立于该系列其他文章,是同步时序电路的基础。

系列目录 

时序收敛:基本概念

建立时间和保持时间(setup time 和 hold time)

OFFSET约束(OFFSET IN 和OFFSET OUT)

Clock Skew , Clock uncertainly 和 Period

特殊约束From To

OFFSET IN 使用举例

Achieving Timing Closure

1. 什么是setup-time 和 hold-time

不论是在输入,输出或是寄存器-寄存器之间,只要设计到时钟上升沿/下降沿的采样,就会提到setup time 和 hold time。这两个指标说明器件本身不是理想的(时延等),正是这个不理想的特性,限制了工作时钟等。

Setup time is the minimum amount of time the data signal should be held steady before the clock event so that the data is reliably sampled by the clock. This applies to synchronous input signals to the flip-flop.

Hold time is the minimum amount of time the data signal should be held steady after the clock event so that the data are reliably sampled. This applies to synchronous input signals to the flip-flop.

上文是维基百科中的解释,这里很清楚的解释了这两个概念,但是不够具体化。也就是说,这里并没有提及这个值到底等于多少。Xilinx 文档UG612 Page65提到了这两个等式

Setup Time = Data Path Delay + Synchronous Element Setup Time - Clock Path Skew

Hold Time = Clock Path Skew + Synchronous Element Hold Time - Data Path Delay

这两个等式告诉我们的是需求值,Setup Time是时钟上升沿之前的数据所需要的(最小)有效时间,Hold Time是时钟上升沿之后的数据所需要的(最小)有效时间。 Synchronous Element Setup Time 和 Synchronous Element Hold Time可以看作是触发器的固有属性。那么,如何理解这两个式子呢?以setup time为例,hold time具有同样的性质。

首先回到维基百科的解释,其中涉及到data signal 和 clock event,这两个到底指的是什么?对于一个触发器来说,对与直接输入到其内部的clock_in和data_in来说,这个建立时间是 Synchronous Element Setup Time 。这表明了该触发器的属性。回到UG612定义的式子,这应该用下图来解释。

data signal :data

clock event: clk event

那么对于这一种情况,data 和clk延时候到达触发器内部,所以setup Time发生了变化。有Setup Time = Synchronous Element Setup Time + Data Path Delay  - Clock Path Skew

2. 如何理解Slack

再谈一个Xilinx公司的术语:Slack。Slack的中文意思是“松弛的”,可以简单的理解为设计余量。即如果slack是正数,那么设计满足要求,否则不满足要求。对于setup time的slack,有

Slack = Requirement - (Data Path - Clock Path Skew + Clock Uncertainty)

Slack = Requirement - (Clock Path Skew + Clock Uncertainty - Data Path)

这里Data Path = Data Path Delay + Synchronous Element Setup Time。而Clock Uncertainty正如其字面意思,时钟不可能完美,时钟的不确定性会使得slack变小,这是符合我们感知的。

这里最值得注意的是Requirement,UG612中的各种 ‘require’把我彻底绕晕了好几次。这里的Requirement来源于约束,即这个设计中能提供的数据在时钟沿之前有效时间的值是多少。而“Data Path - Clock Path Skew ”实际上就是上节中提到的Setup time,这是一个最小值,如果大于这个最小值,那么slack大于0,对应的就是满足要求了。这里没有考虑Clock Uncertainty,Clock Uncertainty如下图所示,不确定表明在某一刻可能是坏的影响或是好的影响,所以最终的slack还要剪掉这个值。 (注:下图是clock jitter的示意图,但clock uncertainty也是如此)

下图是一个时序图示例,clk和data对应的是节1图中的信号,clk_in和data_in是到达触发器内部的信号。clk和data之间的相位关系表明requirement为一个时钟周期。setup margin是在这一个例子中的slack,由于时钟的不确定性,这个setup margin还需要减去一个clock uncertainty。

建立时间和保持时间(setup time 和 hold time)的更多相关文章

  1. 详解FPGA中的建立时间与保持时间

    概念对于一个数字系统而言,建立时间和保持时间可以说是基础中的基础,这两个概念就像是数字电路的地基,整个系统的稳定性绝大部分都取决于是否满足建立时间和保持时间.但是对于绝大部分包括我在内的初学者来说,建 ...

  2. 【转】关于FPGA中建立时间和保持时间的探讨

      时钟是整个电路最重要.最特殊的信号,系统内大部分器件的动作都是在时钟的跳变沿上进行, 这就要求时钟信号时延差要非常小, 否则就可能造成时序逻辑状态出错:因而明确FPGA设计中决定系统时钟的因素,尽 ...

  3. setup&hold

    setup time:建立时间,也就是在时钟上升沿到来前,数据需要稳定的时间.hold time:保持时间,指的是在时钟上升沿到来后,数据还需要保持的时间.实际上设置setup time和hold t ...

  4. FPGA时序逻辑中常见的几类延时与时间(五)

    FPGA逻辑代码重要的是理解其中的时序逻辑,延时与各种时间的记忆也是一件头疼的事,这里把我最近看到的比较简单的几类总结起来,共同学习.    一.平均传输延时 平均传输延时 二.开启时间与关闭时间 开 ...

  5. TimeQuest 静态时序分析 基本概论

    静态时序分析 基本概念  [转载] 1.   背景 静态时序分析的前提就是设计者先提出要求,然后时序分析工具才会根据特定的时序模型进行分析,给出正确是时序报告. 进行静态时序分析,主要目的就是为了提高 ...

  6. OFFSET IN 使用举例

    本文将结合具体实例阐述OFFSET IN的使用方法.注意:这是我第一次写OFFSET IN约束,本文仅供参考.阅读本文前需要了解时序收敛的基本概念,OFFSET IN和Period的相关知识,可先阅读 ...

  7. 特殊约束From To

    说实话这个不太懂,没用过也没有遇到相应的情况(或者说我不知道).大家可以更多的去参考特定约束FROM TO和MicroZed开发板笔记,第72部分:多周期约束等内容. 本文待修正 系列目录      ...

  8. Clock Skew , Clock Uncertainty和 Period

    本文将介绍FPGA中和时钟有关的相关概念,阅读本文前需要对时序收敛的基本概念和建立.保持关系有一定了解,这些内容可以在时序收敛:基本概念,建立时间和保持时间(setup time 和 hold tim ...

  9. OFFSET约束(OFFSET IN 和OFFSET OUT)

    OFFSET 的意思是偏移.对于同步时序电路来说,数据和时钟之间的偏移量是必须要关注的.OFFSET IN和OUT分别对应的是输入和输出FPGA数据和时钟之间的偏移关系,本文将分析这一种关系.阅读本文 ...

随机推荐

  1. BIEE11G常用函数及使用说明

    BIEE常用函数使用手册 1.AGGREGATE AT 此函数根据指定的级别聚合列.使用AGGREGATE AT 可确保始终在关键字AT 之后指定的级别执行度量聚合,而无论WHERE 子句如何. 语法 ...

  2. Java synchronized同步 各方式略解

    近段为了实现一个功能,在树结构中,修改某个节点名称时,需要同时修改这个节点所有子节点的节点全路径属性字段(类似"父父节点名称/父节点名称/子节点名称/子子节点名称"的构造).因为在 ...

  3. CSS实现自定义手型气泡提示

    实现自定义的手型气泡提示 <html> <head> <meta charset="utf-8"> <title></titl ...

  4. who

    查看当前系统中当前登录的帐户 $who jiang :0 2016-10-13 08:55 (:0) jiang pts/4 2016-10-13 09:03 (:0) jiang pts/1 201 ...

  5. JavaWeb学习----Cookie实现记住密码的功能

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  6. [转]在ASP.NET MVC5中实现具有服务器端过滤、排序和分页的GridView

    本文转自:http://www.cnblogs.com/powertoolsteam/p/MVC5_GridView_2.html 背景 在前一篇文章<[初学者指南]在ASP.NET MVC 5 ...

  7. 使用jMeter测试Solr服务接口

    之前一直用ab做简单的服务接口测试,ab功能强悍,使用简单,但是没有生成专题图和表格等功能,因此,我们决定使用jmeter来作为我们测试工具.接下来,我们将详细介绍jmeter使用的步骤,主要包括:j ...

  8. MMORPG大型游戏设计与开发(客户端架构 part2 of vgui)

    这一节我将讲解vgui的基础系统部分,也是该库提供给外部使用的一些重要接口.作为UI部分比较重要的部分,该节有着至关重要的部分,如果没有看到上一节内容,请留意下面的连接.我们现在可以猜想一下在客户端U ...

  9. Virtual Box常用指令

    以下操作需在命令行里将当前路径设为 Virtual Box安装目录 1. 调整磁盘大小(只能调整动态分配的.vdi格式文件) VBoxManage modifyhd "xxx.vdi&quo ...

  10. JMS学习(六)-ActiveMQ的高可用性实现

    原文地址:http://www.cnblogs.com/hapjin/p/5663024.html 一,ActiveMQ高可用性的架构 ActiveMQ的高可用性架构是基于Master/Slave 模 ...