建立时间和保持时间(setup time 和 hold time)
建立时间和保持时间贯穿了整个时序分析过程。只要涉及到同步时序电路,那么必然有上升沿、下降沿采样,那么无法避免setup-time 和 hold-time这两个概念。本文内容相对独立于该系列其他文章,是同步时序电路的基础。
系列目录
建立时间和保持时间(setup time 和 hold time)
OFFSET约束(OFFSET IN 和OFFSET OUT)
Clock Skew , Clock uncertainly 和 Period
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)的更多相关文章
- 详解FPGA中的建立时间与保持时间
概念对于一个数字系统而言,建立时间和保持时间可以说是基础中的基础,这两个概念就像是数字电路的地基,整个系统的稳定性绝大部分都取决于是否满足建立时间和保持时间.但是对于绝大部分包括我在内的初学者来说,建 ...
- 【转】关于FPGA中建立时间和保持时间的探讨
时钟是整个电路最重要.最特殊的信号,系统内大部分器件的动作都是在时钟的跳变沿上进行, 这就要求时钟信号时延差要非常小, 否则就可能造成时序逻辑状态出错:因而明确FPGA设计中决定系统时钟的因素,尽 ...
- setup&hold
setup time:建立时间,也就是在时钟上升沿到来前,数据需要稳定的时间.hold time:保持时间,指的是在时钟上升沿到来后,数据还需要保持的时间.实际上设置setup time和hold t ...
- FPGA时序逻辑中常见的几类延时与时间(五)
FPGA逻辑代码重要的是理解其中的时序逻辑,延时与各种时间的记忆也是一件头疼的事,这里把我最近看到的比较简单的几类总结起来,共同学习. 一.平均传输延时 平均传输延时 二.开启时间与关闭时间 开 ...
- TimeQuest 静态时序分析 基本概论
静态时序分析 基本概念 [转载] 1. 背景 静态时序分析的前提就是设计者先提出要求,然后时序分析工具才会根据特定的时序模型进行分析,给出正确是时序报告. 进行静态时序分析,主要目的就是为了提高 ...
- OFFSET IN 使用举例
本文将结合具体实例阐述OFFSET IN的使用方法.注意:这是我第一次写OFFSET IN约束,本文仅供参考.阅读本文前需要了解时序收敛的基本概念,OFFSET IN和Period的相关知识,可先阅读 ...
- 特殊约束From To
说实话这个不太懂,没用过也没有遇到相应的情况(或者说我不知道).大家可以更多的去参考特定约束FROM TO和MicroZed开发板笔记,第72部分:多周期约束等内容. 本文待修正 系列目录 ...
- Clock Skew , Clock Uncertainty和 Period
本文将介绍FPGA中和时钟有关的相关概念,阅读本文前需要对时序收敛的基本概念和建立.保持关系有一定了解,这些内容可以在时序收敛:基本概念,建立时间和保持时间(setup time 和 hold tim ...
- OFFSET约束(OFFSET IN 和OFFSET OUT)
OFFSET 的意思是偏移.对于同步时序电路来说,数据和时钟之间的偏移量是必须要关注的.OFFSET IN和OUT分别对应的是输入和输出FPGA数据和时钟之间的偏移关系,本文将分析这一种关系.阅读本文 ...
随机推荐
- C#ArrayList集合——小例题
用两种方法编写题目:输入姓名,语文分数,数学分数,英语分数到集合,求语文总分,数学平均分,英语最高分以及英语最高分是谁.法一:一个集合的做法 Console.Write("输入总人数:&qu ...
- 0015 Java学习笔记-集合-TreeMap集合
主要的方法 构造方法: TreeMap(); TreeMap(Comparator<?super K> comparator); TreeMap(Map<? extends K,? ...
- 使用C/C++,赋值运算时发生的转换
使用C/C++,赋值运算时发生的转换主要有以下四种情况 一: 两边类型不同: 结果: 自动完成类型转换! 二: 长数赋给短数: 结果: 截取长数的低位送给短数! 三: 短数赋给长数: 结果: 原来是什 ...
- Python类属性的延迟计算
所谓类属性的延迟计算就是将类的属性定义成一个property,只在访问的时候才会计算,而且一旦被访问后,结果将会被缓存起来,不用每次都计算. 优点 构造一个延迟计算属性的主要目的是为了提升性能 实现 ...
- Windows环境下载与安装JBOSS服务器的详细图文教程
一.JDK的安装 首先安装JDK,配置环境变量(PATH,CLASSPATH,JAVA_HOME). 可以参照:Windows环境下JDK安装与环境变量配置 二.Jboss的介绍 JBOSS是EJB的 ...
- nice
我们在使用$top的时候有一列NI参数,这个参数就是进程的nice值,用来表示进程在系统调度中的优先级,Linux中的进程nice从-20到+19,越小表明调度的优先级越高,用户进程的最小nice值就 ...
- Python字符串的编码与解码(encode与decode)
首先要搞清楚,字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unico ...
- SQLServer中比较末尾带有空格的字符串遇到的坑
最近发现SQLServer中比较字符串的时候 如果字符串末尾是空格 那么SQLServer会无视那些空格直接进行比较 这和程序中平时的字符串判断逻辑不统一 );set @a=N'happycat198 ...
- netfilter-在内核态操作网络数据包
一.概述 netfilter是自2.4内核的一个数据包过滤框架.可以过滤数据包,网络地址和端口转换 ...
- gFTP的安装与使用
gFTP是X Window下的一个用Gtk开发的多线程FTP客户端工具,它与Microsoft Windows下运行的CuteFTP等FTP工具极为类似.本文介绍了gFTP的编译.安装.启动及使用方法 ...