setup/hold 分析

分析说明:D2:目的寄存器;D1:源寄存器; edge2:下一个时钟上升沿;edge1:当前时钟上升沿;edge0:当前时钟上升沿的前一个时钟沿;如下图:

建立时间:触发器D2(数据要到达目的的地方)在时钟上升沿edge1(以edge1是当前的时钟上升沿)输入端的数据data1(data1是 edge0时D1打给D1的数据,或者说是edge0时刻D1的输出。edge0是edge1的前一个上升沿)的前一段时间t_setup要求data1 数据稳定(为什么要这样要求呢?)。很明显建立时间是对D2的输入数据的时间要求,或者说data1要在edge1来之前的某段时间内到达D2。

1、为什么要求建立时间呢?

为了使数据正确的锁存就需要数据是稳定的,如果知道触发器的实现电路的话。如果在edge1-t_setup到edge1这段时间有可能变动的话,就会造成不知道锁存的是1还是0,这就是所说的亚稳态情况之一。这样是不能使数据可靠传输的。所以需要建立时间。

2、数据data1(来自触发器D1,即数据源)要传输到D2的输入端,这个数据data1到达D2时间t12如何计算呢?

在 edge0来的时候之后的某个很小的时间t1(可以认为是触发器的传播延时),开始由D1出发,经过组合逻辑延时t2,到达D2(数据的目的地)。答案已 经知道t12= t1 + t2。(一定要注意当前时刻是edge1,对于t12的分析是以edge0作为参考时钟。为什么要这样呢?看3小点。)此时时钟到达D2,D1的差没有考 虑,即时钟抖动。还有t2一般都是给最大延时,最小延时即t2max, t2min。具体用哪个看???等等说。。。。

 

3、在当前时刻edge1的D2 data1建立时间的时候,那data1的数据在什么时候由D1输出呢?

再次强调建立时间是分析D2输入端的数据时间要求。此时刻即edge1,D2输入端的数据在哪个时刻由D1发出呢(假设在同步系统中,为什么要做这个假设呢?)?

肯定是在某个edge,或者说是……edge2,edge1,还是edge0,edge(-1),………。如果说在edge1的时候才开始发出??

想 想。。。。这是不可能满足建立时间的!推推看:假设edge1能够满足建立时间。要求是什么呢?要求clk 的edge1到D2要远远慢于D1在这里是多少:t12 + t_setup。这样所有的edge到达目的寄存器要至少慢于t(t组合逻辑的延时)+t_setup。 这样的同步系统我不知道如何实现。如果是在edge2,edge3,……时刻才发出data1,要满足建立时间是不是更不可能实现? 如果在edge0就开始了数据的传输,会有什么样的结果呢?很明显此时的数据data1有一个clk的时间来传输,因为提前一个clk D1就将data1发出,只要data1能在edge1 - t_setup的时刻前到达D2的输入端就可以满足建立时间了。这样分析的优点在哪?我也不太专业,反正这样分析感觉很对。这也是目前时序分析工具的默认 data1数据由D1出发的时间点。这也是要求的数据传输时序,实际硬件电路可是不管这些的所以这些只是我们希望的要求时序它只管数据在要求稳定的时候是 否稳定。后面的多周期也是如此。如果在edge(-1)就开始输出呢,会有什么样的结果?因为D2要求data1稳定的时间还是不变的即:edge1- t_setup。这样data1就有2 * clk的时间来传输了。很明显这样就更能满足在edge1-t_setup前就稳定的要求了。这就是系统工具(如quartus 的timequest)中用到的指定多周期。如edge(-2),edge(-3),……都是多周期分析了。

4、data1数据是如何走的呢?

假 设不是多周期(因为多周期分析我还没用到过,不会分析)在各个时刻data1数据的传输还是很容易搞错的。因为在edge1时刻D2的输出不是 data1,那此时D2输出的数据什么呢?肯定是edge(-1)D1的输出。data1在什么时刻输出呢?在edge2+t1(t1可以认为是触发器的 传播延时) 才从D2输出。这样就能解释为什么数据经过一层的触发器,就要多延迟一个时钟。如何才能使data1正确的由D2输出呢?或者说在edge0 时,data1如何才能正确的由D1输出呢?这就是要求满足保持时间。也就是说只有满足保持时间data才能正确的由D发出。只是要在保持时间要讨论的。

5、如何才算data1满足D2保持时间?

数 据到达D2的时间比D2要求数据稳定的时间要早,就说data1满足D2保持时间。假设是提前一个clk,则 t_q(这个不好描述,,,,在一个时钟周期内除了传输时间还剩的时间) = clk - t12,此时可以确定t12中的t2是用最小还是用最大的呢?为了分析的保险t2 = t2max,这样data1的到达时间就会晚点,这样就更有可能不满足D2对data1的建立时间。 只要t_q = clk - t2max - t1>t_setup(t_setup也是一个时间段),就说data1由D1输出满足到D2输入的建立时间。t_q>t_setup是相对 时间段。不是时间轴上的时间。如果能在时间轴上标出那就好了。我就不标了。我就写写:|t_q|(data1由D1输出到D2的时间轴上的时间)= edge0-t2max - t1, |t_setup|(D2要求data1稳定的时间轴的时间)= edge1-t_setup。这个时候满足建立时间的标准是|t_q|在时间轴的左边,|t_setup|在时间轴的右边 即|t_q|<|t_setup|。这个时候(edge1)千万不要想到data1在D2的输出,因为这个时候data1只要等着,还不到输出的时 候。

6、建立时间的余量t_setup_slack?

到这里就很 清楚了,就是data1到达了D2的一个clk内还剩的时间 减 D2要求的建立时间段就是建立时间的余量:t_setup_slack = t_q(在一个时钟周期内除了传输时间还剩的时间) - t_setup。即建立时间余量大于0,就可以满足data1由D1传输到D2,一个时钟周期内满足建立时间。

7、在Verilog中是如何体现这种建立关系的?

在Verilog中要产生触发器必须要这句 always @(posedge clk or negedge rst_n),有这句不一定产生触发器。看看下面的代码:

always @(posedge clk_200M or negedge rst_n)

begin if(!rst_n)

tx_start_flag <= 0;

else if(byte_flag == 1)

tx_start_flag <= 1; else

tx_start_flag <= 0;

end

byte_flag
也是 clk_200M同步产生的,并且最多只有一个时钟的高。 在这段代码中能检测到byte_flag ==
1吗?这里的tx_start_flag是一个触发器。byte_flag是一个触发器(数据源)的输出。 在clk_200M
edge0时刻,byte_flag输出数据1,此时会经过上面的判断执行tx_start_flag <=(非阻塞) 1;
此时分析的是建立时间,而且此时的tx_start_flag输出还是0。
这个时候的输出为什么还是0?不是已经运行了tx_start_flag <=(非阻塞) 1;
了吗?我的理解是tx_start_flag在edge0时刻的输出,是edge(-1)满足建立时间的值。还是这句话,建立时间分析的是输入,执行的这
句tx_start_flag <=(非阻塞) 1;
也只是给到tx_start_flag触发器的输入端在edge0,执行的tx_start_flag <=(非阻塞) 1;
还不会影响tx_start_flag(触发器)在edge0时刻的输出。在edge1时刻,byte_flag输出数据0,同过选择器会执行
tx_start_flag <=(非阻塞) 0;
此时tx_start_flag输出是1,是edge0满足的建立时间的等待要输出的(当然要满足保持时间)。总结这个always @(posedge
clk or negedge rst_n)的行为
1)给满足保持时间的输出,也即是上一个edge的满足建立时间的输入端,先更新输出。2)经过判断执行语句,触发器输入端满足建立时间。(输入,输出是
并发的没有先后,这里的1)是先执行完)。 到这里很明显只要byte_flag有一个高脉冲都会使tx_start_flag产生一个高脉冲。

==========================================

保持时间:在clk edge1(当前时刻)到达D2(目的寄存器)后的一段时间(t_hold),输入端的数据要稳定。只要满足在t_hold这段时间输入端的数据稳定,输入端的数据就能稳定的输出。

1、输出的时间是多少?


edge1到达D2后(没有考虑时钟到达D1,D2的差,或者是时钟偏移),假设此时输入端的数据稳定(因为只想知道输出要的时间,即假设满足建立时
间),数据输出需要的时间可以称为触发器的传输延时t1即要求的保持时间。如果真的要追究t1由哪些部分组成:这就要看触发器构成门电路,更细点的话要看
构成门电路的cmos的制作工艺(不知道理解对么,反正时间很短0.几个ns)。t_hold > t1。 可以估计保持时间应该很短。

 

2、什么会导致这一段的时间的输入端数据不稳定?


时序能控制的就是在edge1(为什么是edge1,而不是……edge(2),edge(0),edge(-1),……)时刻来自D1的输出
data1,经过一段时间t12(数据由D1出发到达D2的时间)到达D2,如果到达的时间破坏了edge1要输出数据date0(edge0时刻到达
D2的数据)。如果满足这种情况要求是 t12 < t_hold。
如果edge2时刻D1输出的数据data2要破坏edge1时刻D2数据data1的输出,有什么要求?D1,在edge2时刻输出的数据比edge1
时刻输出的数据跑的快。这是不现实的,因为data1,data2走的是同一条电路。而edge0就是要edge1输出的数据。总结:唯一破坏稳定性的理
由是t12 < t_hold。

 

3、保持余量?

首先要满足保持时间是稳定的即:t12 > t_hold, 才有保持余量。保持余量是:t12 - t_hold。但是其中还有个问题就是t2取
max还是min,为了是数据以最快的速度到达,即t2 = t2max。即t12 = t2min + t1 - t_hold。

 

4、data1破坏data0?

edge1时刻要满足保持时间的是data0(D2 edge1输出的数据),data1
是D1在edge1时刻的输出到D2为了满足edge2
D2的输出的建立时间。如果data1到达D2太快,有可能破坏D2在edge1输出输出的data0的数据。这种可能性小,但还是存在的。如D1_t1
= 0.06ns, t2 = 0.06ns(没有组合逻辑),D2_t_hold = 0.2ns,不考虑时钟偏移。t12 = 0.06 + 0.06 = 0.12ns < D2_t_hold = 0.2ns。这样的话和clk的周期是没有关系的。

总结:数据的传递要搞清。这样就能明白要哪样的时序。

时间: 2024-08-05 11:54:48

setup/hold 分析的相关文章

分析setup/hold电气特性从D触发器内部结构角度

上图是用与非门实现的D触发器的逻辑结构图,CP是时钟信号输入端,S和R分别是置位和清零信号,低有效; D是信号输入端,Q信号输出端; 这里先说一下D触发器实现的原理:(假设S和R信号均为高,不进行置位和清零操作)CP=0时: G3和G4关闭,Q3和Q4输出为’1’.那么G5和G6打开,Q5=D,Q6=/D.Q5,Q6        的信号随输入信号D的改变而变化; G1和G2构成一个SR锁存器,我们知道,当        SR锁存器的S.R的输入均为高的时候,锁存器的输出保持不变,所以Q和/Q保

&lt;DC guide ---6&gt;

前面说了怎么 get_*  ,下面就是怎么把 约束加载到指定位置上. Specifying an Area Constraint set_area_max   245000 把最大面积约束,自动的施加在current_design上.  一般xxxx的单位,有可能是与非门的个数或者是晶体管数目.或者是mm2. um2等概念. 这个要看具体的工艺库.DC没有信息能反馈单位, Specifying Setup-Timing Constraints 我和JANE.JOE一起合作一个项目,我负责中间的那

OCV与CPPR模式的理解

[资料] OCV模式和CPPR模式的技术层面解答: OCV是on-chip variation. 是指在同一个芯片上, 由于制造工艺等原因造成的偏差. 具体表现在到两个ff的clk端的时钟路径. 本来时间应该是一样的. 但是因为制造工艺也就是OCV的原因, 造成工具无法计算的快慢偏差. timing derate. 这个值就是告诉工具, OCV的影响有多大. 通常signoff的时候. derate会有5%到10%. 不同工艺不同设计, 由工程师的经验决定.如果两个clk path 的长度都是1

[转]亚稳态分析

[转]亚稳态分析 发布时间:2011-05-12 19:56:15 技术类别:CPLD/FPGA ?? 1,简介 这篇文章是我对电子设计中,亚稳态问题的一种分析和总结.文章通过对数字电路中器件的工作机制的介绍,引出亚稳态问题的发生机制.并通过对亚稳态问题发生机制的探讨,用以得到一种能够清楚地,有的放矢地解决亚稳态问题的能力.而这种能力,将会成为你作为一个工程师的价值所在.希望通过这个探讨,可以使你设计出属于自己的预防亚稳态的方法.对于常用的预防亚稳态的方法,由于网上已经有大量介绍,并且涉及到具体

数字IC前后端设计中Setup违反的修复方法

本文转自:自己的微信公众号<集成电路设计及EDA教程> 数字IC设计中Setup的分析与优化贯穿前后端设计中,最好在开始后端设计之前就获得一个没有Setup违反的网表,下面按照从前到后的流程逐一讲解每个阶段如果出现Setup违反该如何解决.下面用到的命令,主要针对的是Synopsys公司的综合工具DC以及布局布线工具ICC.还有需要注意的是,Setup的修复和之后要讲解的Hold的修复有很大的不同,Setup的违反随着布局到布线阶段的推进,它是越来越恶化的,不像Hold,线延迟会有益于Hold

linux3.2 spi框架分析

刘术河 2017.04.12 写oled的驱动时,核心板用的是am335x,spi用的是ti自带的spi驱动框架,为了弄清楚spi底层工作流程,特意分析了spi驱动框架 g:\嵌入式\linux-3.2.0\arch\arm\mach-omap2\Board-am335xevm.c 该文件是am335x的板级配置文件 1.配置spi的管脚复用功能 static struct pinmux_config spi1_pin_mux[] = { {"mcasp0_aclkx.spi1_sclk&quo

FPGA编程技巧系列之输入输出偏移约束

1.   偏移约束的作用 偏移约束(Offset Constraint)用来定义一个外部时钟引脚(Pad)和数据输入输出引脚之间的时序关系,这种时序关系也被称为器件上的Pad-to-Setup或Clock-to-Out路径.这些约束对与外部元器件相连的接口十分重要,在这里,需要解释两个术语: Pad-to-Setup:也被称为OFFSET IN BEFORE约束,是用来保证外部输入时钟和外部输入数据的时序满足FPGA内部触发器的建立时间要求的.如下图TIN_BEFORE约束使得FPGA在进行DA

后仿 ---- 转载

转载自: http://www.chipsbank.com/news_detail/newsId=121.html 1.后仿是否必要随着芯片规模的增大,关于IC设计流程中的后仿是否必要,有多种声音. 认为不必要的理由是:布局布线后的网表,已经可以通过STA保证时序,后仿只不过是确认一遍电路的时序.而且随着电路规模不断增大,仿真工具的仿真速度的提升仍不明显,后仿必然是一个很耗时的步骤,时间代价大而收益不明显. 认为有必要的理由是,从公司以往多个项目的经验来看,后仿中也发现了一些问题.而对于有些设计

Timing_Analyzer学习记录

Timing Analyzer 综述 使用该软件可以在设计中完成以下一些任务:在设计中进行静态时序分析:在映射.布局.布线后都可以立即进行时序分析:可通过GUI/tcl命令行/xtclsh应用/批处理/微控制命令等实现分析:报告指定路径延迟.关键路径延时.电路运行周期.可靠速度/电压/温度等的分布信息:做建立时间和保持时间的分析:有层次化索引用于报告内容的快速定位:可在Technology Viewer 和Floorplan-Implemented中查看指定路径 相关文件特征和流程 输入文件: