关于建立保持时间以及时序的一些问题集合

来源:互联网 发布:自动统计百度贴吧数据 编辑:程序博客网 时间:2024/05/29 06:27

http://blog.chinaunix.net/uid-24203478-id-3025188.html


【面试集锦】setup/holdviolation解决办法:

http://www.socvista.com/bbs/viewthread.php?tid=705&page=1
【面试集锦】什么是SetupHoldup时间?:
http://www.socvista.com/bbs/viewthread.php?tid=704&page=1
求助 建立时间和保持:http://www.socvista.com/bbs/viewthread.php?tid=3297&;page=1
同步电路设计中clockskew的分析:http://www.socvista.com/bbs/viewthread.php?tid=3114
关于Design Compiler 中的建立保持时间:
Author:pythonlong:http://bb2hh.blogbus.com/logs/20463915.html




建立时间和保持时间



1
建立时间(setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器;保持时间(hold time)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,
如果保持时间不够,数据同样不能被打入触发器。
如图
数据稳定传输必须满足建立和保持时间的要求,当然在一些情况下,建立时间和保持时间的值可以为零。
DC,建立时间不满足,只能重新综合设计,并以违例路径为目标进行优化,以及对涉及到违例的组合逻辑以及子模块加紧约束。
保持时间不满足,可在布图前或者布图后再修改这些违例,通常布图
后再修改。因为布图前综合,时序分析采用统计线载模型,在布局前修正保持时间违例可能会导致布图后建立时间违例。
1、setup time的意义:为什么Data需要在Clock到达之前到达?
      其实在实际的问题中,setup time并不一定是大于零的,因为Clock到达时刻并不等同于latch的传输门A关闭的时刻(更何况这种关闭并不是绝对的和瞬间完成的),这之间有一个未知的延迟时间。
     为使问题简化,假设Clock的到达时刻为传输门A关闭、传输们B打开的时刻。如果Data没有在这之前足够早的时刻到达,那么很有可能内部的 feedback线路上的电压还没有达到足够使得inv1翻转的地步(因为inv0有延时,Data有slope,传输门B打开后原来的Q值将通过 inv2迫使feedback保持原来的值)。如果这种竞争的情况发生,Q的旧值将有可能获胜,使Q不能够寄存住正确的Data值;当然如果 feedback上的电压已经达到了足够大的程度也有可能在竞争中取胜,使得Q能够正确输出。
      如果inv0、inv1和inv2的延时较大(Data的变化影响feedback和Q的时间越长),那么为了保证正确性就需要更大的setup time。所以在实际测量setup time的时候,需要选取工艺中最慢的corner进行仿真测量。
2、、hold time的意义:为什么Data在Clock到达之后仍然要保持一段时间?
      和setuptime的情况不一样,因为Clock到达时刻并不等同于latch的传输门A完全关闭的时刻。所以如果Data没有在Clock到达之后 保持足够长的时间,那么很有可能在传输门A完全关闭之前Data就已经变化了,并且引起了feedback的变化。如果这种变化足够大、时间足够长的话, 很有可能将feedback从原本正确的低电压拉到较高电压的电压。甚至如果这种错误足够剧烈,导致了inv1和inv2组成的keeper发生了翻转, 从而彻底改变了Q的正确值,就会导致输出不正确。当然,如果这种错误电压不是足够大到能够改变keeper的值,就不会影响到Q的正确输出。
      如果inv0、inv1和inv2的延时较小(Data的变化影响feedback和Q的时间越短),那么为了保证正确性,就需要更大的hold time。所以在实际测量hold time的时候,需要选取工艺中最快的corner进行仿真测量。




时钟周期为T,触发器D1的时钟沿到来到触发器Q变化的时间Tco(CLK--Q)最大为T1max,最小为T1min,逻辑组合电路的延迟时间最大为T2max,最小为T2min,问触发器D2的建立时间和保持时间。

最终答案:T3setup<T-T1max-T2max,T3hold<T1min+T2min
maxbird:D2的保持时间就是时钟沿到来之后,D2的数据输入端要保持数据不变的时间,这个时间是由D1和D2之间的组合逻辑时延决定的。例如:假 设D1和D2之间的组合逻辑时延为2ns,时钟周期为10ns,这意味着在时钟沿来到后,D1输出的新数据要过2ns才会到达D2的数据输入端,那么在这 2ns内,D2的数据输入端保持的还是上一次的旧数据,其值不会立即更新,假设D2的最小保持时间为3ns,这意味时钟沿到来后,D2的数据输入端的值在 3ns内不能有变化,回到问题的关键,由于D1在时钟沿到来后的输出结果,经过2ns的组合逻辑延时便到达了D2的输入端,而D2要求在时钟沿到来后的 3ns内其输入端的值不能改变,这样D2的保持时间就得不到满足,所以D2的保持时间必须小于等于2ns。至于说T2min为0时的情况,其实T2min 是永远不能为0的,即使是一根导线其时延也是不可能为0的,这就是为什么移位寄存器的两个触发器之间连的只是一根导线,导线后端触发器的保持时间却还是可 以满足的原因,其实移位寄存器中触发器的保持时间可以看成是小于等于其间导线的时延。
建立时间:触发器在时钟沿来到前,其数据输入端的数据必须保持不变的时间;保持时间:触发器在时钟沿来到后,其数据输入端的数据必须保持不变的时间。
因为触发器内部数据的形成是需要一定的时间的,如果不满足建立和保持时间,触发器将进入亚稳态,进入亚稳态后触发器的输出将不稳定,在0和1之间变化,这 时需要经过一个恢复时间,其输出才能稳定,但稳定后的值并不一定是你的输入值。这就是为什么要用两级触发器来同步异步输入信号。这样做可以防止由于异步输 入信号对于本级时钟可能不满足建立保持时间而使本级触发器产生的亚稳态传播到后面逻辑中,导致亚稳态的传播。两级触发器可防止亚稳态传播的原理:假设第一 级触发器的输入不满足其建立保持时间,它在第一个脉冲沿到来后输出的数据就为亚稳态,那么在下一个脉冲沿到来之前,其输出的亚稳态数据在一段恢复时间后必 须稳定下来,而且稳定的数据必须满足第二级触发器的建立时间,如果都满足了,在下一个脉冲沿到来时,第二级触发器将不会出现亚稳态,因为其输入端的数据满 足其建立保持时间。同步器有效的条件:第一级触发器进入亚稳态后的恢复时间 + 第二级触发器的建立时间 < = 时钟周期。(编者注:maxbird在该部分详细说明了建立时间和保持时间的概念,以及如果不满足二者可能导致的亚稳态的传播。注意这里说的建立时间和保 持时间都是针对时钟而言的,在进行时序约束时所指的就是这种,而很多网友以前学习的建立时间保持时间的概念是针对信号而言的,所指的对象不同,分析出来的 结论完全相反,一定注意不要混淆。)


lh1688:不考虑CLOCK SKEW情况下。D2的建立时间要求:Tco1+T1(logic delay)+Tsetup2 < Tc(CLOCK周期) 。那么 Tsetup2 < Tc(CLOCK 周期) -(Tco1+T1)。这个应该比较容易理解。相对的保持时间实际就是路径的总延时 (Tco1+T1)。 保持时间 Thold2 < (Tco1+T1)。
建立时间与保持时间概述(EETOP)
  关于建立时间和保持时间,如下图普及一下基础知识先:
         其中Tcq 触发器时钟到数据输出的延时,Tcd 时钟的延时参数 Tpd 组合逻辑的延时,Tsetup 触发器的保持时间。
         因为数据到达触发器的时间至少要比时钟沿早一个建立时间,则有Tcq+Tpd+Tsetup+T,建立时间裕量=T时钟周期+Tcd,由于T建立时间裕量>0。
        所以要求的最小时钟周期即为T=Tcq+Tpd+Tsetup-Tcd
时钟周期为T,触发器D1的时钟沿到来到触发器Q变化的时间Tco(CLK--Q)最大为T1max,最小为T1min,逻辑组合电路的延迟时间最大为T2max,最小为T2min,问触发器D2的建立时间和保持时间。   

      该题最终答案:T3setup< FONT>

     maxbird:D2的保持时间就是时钟沿到来之后,D2的数据输入端要保持数据不变的时间,这个时间是由D1和D2之间的组合逻辑时延决定的。例 如:假设D1和D2之间的组合逻辑时延为2ns,时钟周期为10ns,这意味着在时钟沿来到后,D1输出的新数据要过2ns才会到达D2的数据输入端,那 么在这2ns内,D2的数据输入端保持的还是上一次的旧数据,其值不会立即更新,假设D2的最小保持时间为3ns,这意味时钟沿到来后,D2的数据输入端 的值在3ns内不能有变化,回到问题的关键,由于D1在时钟沿到来后的输出结果,经过2ns的组合逻辑延时便到达了D2的输入端,而D2要求在时钟沿到来 后的3ns内其输入端的值不能改变,这样D2的保持时间就得不到满足,所以D2的保持时间必须小于等于2ns。至于说T2min为0时的情况,其实 T2min是永远不能为0的,即使是一根导线其时延也是不可能为0的,这就是为什么移位寄存器的两个触发器之间连的只是一根导线,导线后端触发器的保持时 间却还是可以满足的原因,其实移位寄存器中触发器的保持时间可以看成是小于等于其间导线的时延。

      建立时间:触发器在时钟沿来到前,其数据输入端的数据必须保持不变的时间;保持时间:触发器在时钟沿来到后,其数据输入端的数据必须保持不变的时间。如下图:

  因 为触发器内部数据的形成是需要一定的时间的,如果不满足建立和保持时间,触发器将进入亚稳态,进入亚稳态后触发器的输出将不稳定,在0和1之间变化,这时 需要经过一个恢复时间,其输出才能稳定,但稳定后的值并不一定是你的输入值。这就是为什么要用两级触发器来同步异步输入信号。这样做可以防止由于异步输入 信号对于本级时钟可能不满足建立保持时间而使本级触发器产生的亚稳态传播到后面逻辑中,导致亚稳态的传播。两级触发器可防止亚稳态传播的原理:假设第一级 触发器的输入不满足其建立保持时间,它在第一个脉冲沿到来后输出的数据就为亚稳态,那么在下一个脉冲沿到来之前,其输出的亚稳态数据在一段恢复时间后必须 稳定下来,而且稳定的数据必须满足第二级触发器的建立时间,如果都满足了,在下一个脉冲沿到来时,第二级触发器将不会出现亚稳态,因为其输入端的数据满足 其建立保持时间。同步器有效的条件:第一级触发器进入亚稳态后的恢复时间 + 第二级触发器的建立时间 < = 时钟周期。

    maxbird在该部分详细说明了建立时间和保持时间的概念,以及如果不满足二者可能导致的亚稳态的传播。注意这里说的建立时间和保持时间都是针对时钟而 言的,在进行时序约束时所指的就是这种,而很多网友以前学习的建立时间保持时间的概念是针对信号而言的,所指的对象不同,分析出来的结论完全相反,一定注 意不要混淆。

     不考虑CLOCK SKEW情况下。D2的建立时间要求:Tco1+T1(logic delay)+Tsetup2 <Tc(CLOCK 周期) 。那么 Tsetup2 < Tc(CLOCK 周期)-(Tco1+T1)。这个应该比较容易理解。相对的保持时间实际就是路径的总延时(Tco1+T1)。保持时间 Thold2 <(Tco1+T1)。

不考虑CLOCKSKEW情况下。D2的建立时间要求:Tco1+T1(logic delay)+Tsetup2 < Tc(CLOCK 周期) 。那么Tsetup2 < Tc(CLOCK 周期)-(Tco1+T1)。这个应该比较容易理解。相对的保持时间实际就是路径的总延时(Tco1+T1)。保持时间 Thold2 <(Tco1+T1)。

你说的保持时间应该指的是输入引脚的保持时间:
tH = <clock to destination register delay> + <micro hold delay of destination register> - <pin to register delay>
如果你正确设置了convert_clk 和out_clk的时序分析参数,在时序分析报告中应该看到满足时序要求的结果:Clock Setup :'convert_clk'、Clock Hold :'convert_clk'。
你说的负值未必就不好,对于th、tsu来说,负值是好的。如果你在时序设置中指定了期望值的话,用期望值减去实际值,得到的是你的余量(slack)。只有slack是正值,才是好的结果。
如果你现在还没有分配引脚,并且不准备把设计用于实际系统的话,你可以暂时不关心th、tsu。但是一定要设置和分析你的时钟信号。


负的setup 和 hold time 还是比较好理解的。
讨论一下setup time violation 的形成---因为信号比clock 后到达DFF,或者说到达的时间太晚了,这个时候这个DFF就没有办法采样到这个信号,于是就出现了setup slak。
那么,假设你对这一个DFF做优化,你会怎么做?---打包这个DFF,假设为DFFA。在DFFA中把clock加delay,再连接到原DFF。这样 你的信号就可以走的慢一点,慢到比clock还慢都没有问题---而这个时候setup time就被你给优化到负的值了。同样的可以解释负的hold time。
下面这个来自:http://blog.ednchina.com/tanghtctc/195716/message.aspx

时钟是整个电路最重要、最特殊的信号,系统内大部分器件的动作都是在时钟的跳变沿上进行, 这就要求时钟信号时延差要非常小,否则就可能造成时序逻辑状态出错;因而明确FPGA设计中决定系统时钟的因素,尽量较小时钟的延时对保证设计的稳定性有非常重要的意义。 
建立时间与保持时间
    建立时间(Tsu:set uptime)是指在时钟沿到来之前数据从不稳定到稳定所需的时间,如果建立的时间不满足要求那么数据将不能在这个时钟上升沿被稳定的打入触发器;保持时 间(Th:holdtime)是指数据稳定后保持的时间,如果保持时间不满足要求那么数据同样也不能被稳定的打入触发器。建立与保持时间的简单示意图如下 图1所示。

图1 保持时间与建立时间的示意图

    在FPGA设计的同一个模块中常常是包含组合逻辑与时序逻辑,为了保证在这些逻辑的接口处数据能稳定的被处理,那么对建立时间与保持时间建立清晰的概念非常重要。下面在认识了建立时间与保持时间的概念上思考如下的问题。



图2 同步设计中的一个基本模型

   图2为统一采用一个时钟的同步设计中一个基本的模型。图中Tco是触发器的数据输出的延时;Tdelay是组合逻辑的延时;Tsetup是触发器的建立 时间;Tpd为时钟的延时。如果第一个触发器D1建立时间最大为T1max,最小为T1min,组合逻辑的延时最大为T2max,最小为T2min。问第 二个触发器D2立时间T3与保持时间T4应该满足什么条件,或者是知道了T3与T4那么能容许的最大时钟周期是多少。这个问题是在设计中必须考虑的问题, 只有弄清了这个问题才能保证所设计的组合逻辑的延时是否满足了要求。
    下面通过时序图来分析:设第一个触发器的输入为D1,输出为Q1,第二个触发器的输入为D2,输出为Q2;
   时钟统一在上升沿进行采样,为了便于分析我们讨论两种情况即第一:假设时钟的延时Tpd为零,其实这种情况在FPGA设计中是常常满足的,由于在 FPGA设计中一般是采用统一的系统时钟,也就是利用从全局时钟管脚输入的时钟,这样在内部时钟的延时完全可以忽略不计。这种情况下不必考虑保持时间,因 为每个数据都是保持一个时钟节拍同时又有线路的延时,也就是都是基于CLOCK的延迟远小于数据的延迟基础上,所以保持时间都能满足要求,重点是要关心建 立时间,此时如果D2的建立时间满足要求那么时序图应该如图3所示。 
从图中可以看出如果:
T-Tco-Tdelay>T3
即: Tdelay< T-Tco-T3
那么就满足了建立时间的要求,其中T为时钟的周期,这种情况下第二个触发器就能在第二个时钟的升沿就能稳定的采到D2,时序图如图3所示。 

图3 符合要求的时序图

    如果组合逻辑的延时过大使得T-Tco-Tdelay<T3
那么将不满足要求,第二个触发器就在第二个时钟的升沿将采到的是一个不定态,如图4所示。那么电路将不能正常的工作。
图4 组合逻辑的延时过大时序不满足要求
    从而可以推出
T-Tco-T2max>=T3
这也就是要求的D2的建立时间。
    从上面的时序图中也可以看出,D2的建立时间与保持时间与D1的建立与保持时间是没有关系的,而只和D2前面的组合逻辑和D1的数据传输延时有关,这也是一个很重要的结论。说明了延时没有叠加效应。
    第二种情况如果时钟存在延时,这种情况下就要考虑保持时间了,同时也需要考虑建立时间。时钟出现较大的延时多是采用了异步时钟的设计方法,这种方法较难保证数据的同步性,所以实际的设计中很少采用。此时如果建立时间与保持时间都满足要求那么输出的时序如图5所示。


图5 时钟存在延时但满足时序
    从图5中可以容易的看出对建立时间放宽了Tpd,所以D2的建立时间需满足要求:
Tpd+T-Tco-T2max>=T3
    由于建立时间与保持时间的和是稳定的一个时钟周期,如果时钟有延时,同时数据的延时也较小那么建立时间必然是增大的,保持时间就会随之减小,如果减小到不满足D2的保持时间要求时就不能采集到正确的数据,如图6所示。
    这时即T-(Tpd+T-Tco-T2min)<T4,就不满足要求了,所以D2的保持时间应该为:
T-(Tpd+T-Tco-T2min)>=T4 即Tco+T2min-Tpd>=T4
    从上式也可以看出如果Tpd=0也就是时钟的延时为0那么同样是要求Tco+T2min>T4,但是在实际的应用中由于T2的延时也就是线路的延时远远大于触发器的保持时间即T4所以不必要关系保持时间。

图6 时钟存在延时且保持时间不满足要求
    综上所述,如果不考虑时钟的延时那么只需关心建立时间,如果考虑时钟的延时那么更需关心保持时间。下面将要分析在FPGA设计中如何提高同步系统中的工作时钟。
如何提高同步系统中的工作时钟
    从上面的分析可以看出同步系统时对D2建立时间T3的要求为:
T-Tco-T2max>=T3
   所以很容易推出T>=T3+Tco+T2max,其中T3为D2的建立时间Tset,T2为组合逻辑的延时。在一个设计中T3和Tco都是由器件 决定的固定值,可控的也只有T2也就时输入端组合逻辑的延时,所以通过尽量来减小T2就可以提高系统的工作时钟。为了达到减小T2在设计中可以用下面不同 的几种方法综合来实现。

通过改变走线的方式来减小延时
   以altera的器件为例,我们在quartus里 面的timing closure floorplan可以看到有很多条条块块,我们可以将条条块块按行和按列分,每一个条块代表1个LAB,每个LAB里有8个或者是10个LE。它们的走 线时延的关系如下:同一个LAB中(最快) < 同列或者同行 < 不同行且不同列。我们通过给综合器加适当的约束(约束要适量,一般以加5%裕量较为合适,比如电路工作在100Mhz,则加约束加到105Mhz就可以 了,过大的约束效果反而不好,且极大增加综合时间)可以将相关的逻辑在布线时尽量布的靠近一点,从而减少走线的时延。
通过拆分组合逻辑的方法来减小延时
   由于一般同步电路都不止一级锁存(如图8),而要使电路稳定工作,时钟周期必须满足最大延时要求,缩短最长延时路径,才可提高电路的工作频率。如图7所 示:我们可以将较大的组合逻辑分解为较小的几块,中间插入触发器,这样可以提高电路的工作频率。这也是所谓“流水线”(pipelining)技术的基本 原理。
    对于图8的上半部分,它时钟频率受制于第二个较大的组合逻辑的延时,通过适当的方法平均分配组合逻辑,可以避免在两个触发器之间出现过大的延时,消除速度瓶颈。


图7 分割组合逻辑

图8 转移组合逻辑

那么在设计中如何拆分组合逻辑呢,更好的方法要在实践中不断的积累,但是一些良好的设计思想和方法也需要掌握。我们知道,目前大部分FPGA都基于4输入 LUT的,如果一个输出对应的判断条件大于四输入的话就要由多个LUT级联才能完成,这样就引入一级组合逻辑时延,我们要减少组合逻辑,无非就是要输入条 件尽可能的少,这样就可以级联的LUT更少,从而减少了组合逻辑引起的时延。


【附加约束的基本作用】:

(1)提高设计的工作频率
对很多数字电路设计来说,提高工作频率非常重要,因为高工作频率意味着高处理能力。通过附加约束可以控制逻辑的综合、映射、布局和布线,以减小逻辑和布线延时,从而提高工作频率。

(2)获得正确的时序分析报告
几乎所有的FPGA设计平台都包含静态时序分析工具,利用这类工具可以获得映射或布局布线后的时序分析报告,从而对设计的性能做出评估。静态时序分析工具 以约束作为判断时序是否满足设计要求的标准,因此要求设计者正确输入约束,以便静态时序分析工具输出正确的时序分析报告。

(3)指定FPGA/CPLD引脚位置与电气标准
FPGA/CPLD的可编程特性使电路板设计加工和FPGA/CPLD设计可以同时进行,而不必等FPGA/CPLD引脚位置完全确定,从而节省了系统开 发时间。这样,电路板加工完成后,设计者要根据电路板的走线对FPGA/CPLD加上引脚位置约束,使FPGA/CPLD与电路板正确连接。另外通过约束 还可以指定IO引脚所支持的接口标准和其他电气特性。为了满足日新月异的通信发展,Xilinx新型FPGA/CPLD可以通过IO引脚约束设置支持诸如 AGP、BLVDS、CTT、GTL、GTLP、HSTL、LDT、LVCMOS、LVDCI、LVDS、LVPECL、LVD***T、LVTTL、 PCI、PCIX、SSTL、ULVDS等丰富的IO接口标准。另外通过区域约束还能在FPGA上规划各个模块的实现区域,通过物理布局布线约束,完成模 块化设计等。

【时序约束的概念和基本策略】

时序约束主要包括周期约束(FFS到FFS,即触发器到触发器)和偏移约束(IPAD到FFS、FFS到OPAD)以及静态路径约束(IPAD到 OPAD)等3种。通过附加约束条件可以使综合布线工具调整映射和布局布线过程,使设计达到时序要求。例如用OFFSET_IN_BEFORE约束可以告 诉综合布线工具输入信号在时钟之前什么时候准备好,综合布线工具就可以根据这个约束调整与IPAD相连的Logic Circuitry的综合实现过程,使结果满足FFS的建立时间要求。

附加时序约束的一般策略是先附加全局约束,然后对快速和慢速例外路径附加专门约束。附加全局约束时,首先定义设计的所有时钟,对各时钟域内的同步元件进行 分组,对分组附加周期约束,然后对FPGA/CPLD输入输出PAD附加偏移约束、对全组合逻辑的PAD TOPAD路径附加约束。附加专门约束时,首先约束分组之间的路径,然后约束快、慢速例外路径和多周期路径,以及其他特殊路径。

【周期(PERIOD)的含义】

周期的含义是时序中最简单也是最重要的含义,其它很多时序概念会因为软件商不同略有差异,而周期的概念确是最通用的,周期的概念是FPGA/ASIC时序 定义的基础概念。后面要讲到的其它时序约束都是建立在周期约束的基础上的,很多其它时序公式,可以用周期公式推导。周期约束是一个基本时序和综合约束,它 附加在时钟网线上,时序分析工具根据PERIOD约束检查时钟域内所有同步元件的时序是否满足要求。PERIOD约束会自动处理寄存器时钟端的反相问题, 如果相邻同步元件时钟相位相反,那么它们之间的延迟将被默认限制为PERIOD约束值的一半。

时钟的最小周期为:
TCLK = TCKO +TLOGIC +TNET +TSETUP -TCLK_SKEW
TCLK_SKEW =TCD2 -TCD1
其中TCKO为时钟输出时间,TLOGIC为同步元件之间的组合逻辑延迟,TNET为网线延迟,TSETUP为同步元件的建立时间,TCLK_SKEW为时钟信号延迟的差别。

数据和时钟之间的约束:OFFSET和SETUP、HOLD时间

为了确保芯片数据采样可靠和下级芯片之间正确的交换数据,需要约束外部时钟和数据输入输出引脚之间的时序关系(或者内部时钟和外部输入/输出数据之间的关 系,这仅仅是从采用了不同的参照系罢了)。约束的内容为告诉综合器、布线器输入数据到达的时刻,或者输出数据稳定的时刻,从而保证与下一级电路的时序关 系。

这种时序约束在Xilinx中用Setup to Clock(edge),Clock(edge) tohold等表示。在Altera里常用tsu (Input Setup Times)、th (Input Hold Times)、tco(Clock to OutDelays)来表示。很多其它时序工具直接用setup和hold表示。其实他们所要描述的是同一个问题,仅仅是时间节点的定义上略有不同。下面 依次介绍。

关于输入到达时间,这一贴估计问题比较多,看起来也比较累,但是没有办法,这些都是时序的基本概念啊。搞不清楚,永远痛苦,长痛不如短痛了,呵呵。Xilinx的"输入到达时间的计算"定义的含义是输入数据在有效时钟沿之后的TARRIVAL时刻到达。则,

TARRIVAL=TCKO+TOUTPUT+TLOGIC     公式1

根据周期(Period)公式,我们可以得到:

Tcko+Toutput+Tlogic+Tinput+Tsetup-Tclk_skew=Tclk; 公式2

将公式1代入公式2:

Tarrival+Tinput+Tsetup-Tclk_skew=Tclk, 而Tclk_skew满足时序关系后为负,所以

TARRIVAL +TINPUT+TSETUP <TCLK  公式3,

这就是Tarrival应该满足的时序关系。其中TINPUT为输入端的组合逻辑、网线和PAD的延迟之和,TSETUP为输入同步元件的建立时间。

数据延时和数据到达时间的关系

TDELAY为要求的芯片内部输入延迟,其最大值TDELAY_MAX与输入数据到达时间TARRIVAL的关系:

TDELAY_MAX+TARRIVAL=TPERIOD 公式4

所以:

TDELAY<TDELAY_MAX=TPERIOD-TARRIVAL 

要求输出的稳定时间

从下一级输入端的延迟可以计算出当前设计输出的数据必须在何时稳定下来,根据这个数据对设计输出端的逻辑布线进行约束,以满足下一级的建立时间要求,保证下一级采样的数据是稳定的。计算要求的输出稳定时间的公式推导如下:

定义:TSTABLE = TLOGIC +TINPUT +TSETUP

从前面帖子介绍的周期(Period)公式,可以得到(其中TCLK_SKEW=TCLK1-TCLK2):

TCLK=TCKO+TOUTPUT+TLOGIC+TINPUT+TSETUP+TCLK_SKEW

将TSTABLE的定义代入到周期公式,可以得到:

TCLK=TCKO+TOUTPUT+TSTABLE+TCLK_SKEW

所以,

 TCKO +TOUTPUT+TSTABLE<TCLK 

这个公式就是TSTABLE必须要满足的基本时序关系,即本级的输出应该保持怎么样的稳定状态,才能保证下级芯片的采样稳定。有时我们也称这个约束关系是 输出数据的保持时间的时序约束关系。只要满足上述关系,当前芯片输出端的数据比时钟上升沿提早TSTABLE时间稳定下来,下一级就可以正确地采样数据。 其中TOUTPUT为设计中连接同步元件输出端的组合逻辑、网线和PAD的延迟之和,TCKO为同步元件时钟输出时间。

【实施上述约束的方法和命令】

实施上述约束的基本方法是,根据已知时序信息,推算需要约束的时间值,实施约约束。具体的说是这样的,首先对于一般设计,首先掌握的是TCLK,这个对于 设计者来说是个已知量。前面介绍公式和图中的TCKO和TSETUP(注:有的工具软件对TCKO和TSETUP的定义与前面图形不同,还包含了到达同步 器件的一段logic的时延)是器件内部固有的一个时间量,一般我们选取典型值,对于FPGA,这个量值比较小,一般不大于1~2ns。比较难以确定的是 TINPUT和TOUTPUT两个时间量。

约束输入时间偏移,需要知道TINPUT,TINPUT为输入端的组合逻辑、网线和PAD的延迟之和,PAD的延时也根据器件型号也有典型值可选,但是到 达输入端的组合逻辑电路和网线的延时就比较难以确定了,只能通过静态时序分析工具分析,或者通过底层布局布线工具量取,有很大的经验和试探的成分在里面。

约束输出时间偏移,需要知道TOUTPUT,TOUTPUT为设计中连接同步元件输出端的组合逻辑、网线和PAD的延迟之和,仍然是到达输出端的组合逻辑 电路和网线的延时就比较难以确定,需要通过静态时序分析工具分析,或者通过底层布局布线工具量取,有很大的经验和试探的成分在里面。

约束的具体命令根据约束工具不同而异,首先说使用Xilinx器件的情况下,实施上述约束的命令和方法。Xilinx把上述约束统称为:OFFSET约束 (偏移约束),一共有4个相关约束属性:OFFSET_IN_BEFORE、OFFSET_IN_AFTER、OFFSET_OUT_BEFORE和 OFFSET_OUT_AFTER。

其中前两个属性叫做输入偏移(OFFSET_IN)约束,基本功能相似,仅仅是约束取的参考对象不同而已。后两个属性叫做输出偏移(OFFSET_OUT)约束,基本功能相似,也是约束取的参考对象不同而已。为了便于理解,举例说明。

输入偏移约束例:时钟周期为20ns,前级寄存器的TCKO选则1ns,前级输出逻辑延时TOUTPUT为3ns,中间逻辑TLOGIC的延时为10ns,那么TARRIVAL=14ns,于是可以在数据输入引脚附加

NET DATA_IN OFFET=IN  14ns  AFTER CLK

约束,也可以使用OFFSET_IN_BEFORE对芯片内部的输入逻辑进行约束,其语法如下:

NET DATA_IN OFFET=IN  TDELAY   BEFORE CLK

其中TDELAY为要求的芯片内部输入延迟,其最大值与输入数据到达时间TARRIVAL的关系如帖6所述:TDELAY_MAX + TARRIVAL = TPERIOD,所以

TDELAY < TPERIOD - TARRIVAL = 20 - 14 =6 ns.

输出偏移约束例:设时钟周期为20ns,后级输入逻辑延时TINPUT为4ns、建立时间TSETUP为1ns,中间逻辑TLOGIC的延时为10ns,那么TSTABLE=15ns,于是可以在数据输入引脚附加

NET DATA_OUT OFFET=OUT  15ns  BEFORE CLK

约束,也可以直接对芯片内部的输出逻辑直接进行约束,

NET DATA_OUT OFFET=OUT  TOUTPUT_DELAY  AFTER CLK,

其中TOUTPUT_DELAY为要求的芯片内部输出延迟,其最大值与要求的输出数据稳定时间TSTABLE的关系为:TOUTPUT_DELAY_MAX+TSTABLE= TPERIOD.

TOUT_DELAY< TPERIOD - TSTABLE = 20 - 15 = 5ns

×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××


【Altera对应的时序概念】

前面首先介绍的第一个时序概念是周期,Period,这个概念是FPGA/ASIC通用的一个概念,各方的定义相当统一,至多是描述方式不同罢了,所有的 FPGA设计都首先要进行周期约束,这样做的好处除了在综合与布局布线时给出规定目标外,还能让时序分析工具考察整个设计的Fmax等。Altera的周 期定义公式描述如下:

Clock Period = Clk-to-out + Data Delay + Setup Time - Clk Skew 即,
Tclk         = Tco        + B          + Tsu        -(E-C)
Fmax         = 1/Tclk

对比一下前面的介绍,只要理解了B包含了两级寄存器之间的所有logic和net的延时就会发现与前面公式完全一致。一个设计的Fmax在时序报告,或者 在图形界面观察。以Quartus2为例,在图形界面的观察方法是,编译实现完成后,展开Compilation Report下面的TimingAnalyses,单击Fmax(not include delays to / frompins)即可。在详细报告窗口可以观察到影响周期恶化的10条最差时序路径,根据这些信息可以找出关键路径,进行时序分析。关于时序分析和关键 路径改进等内容在后面的帖子会有专门的讨论,暂时不做进一步介绍。

Clock Setup Time (tsu)

要想正确采样数据,就必须使数据和使能信号在有效时钟沿到达前就准备好,所谓时钟建立时间就是指时钟到达前,数据和使能已经准备好的最小时间间隔。注:这 里定义Setup时间是站在同步时序整个路径上的,需要区别的是另一个概念Micro tsu。Microtsu指的是一个触发器内部的建立时间,它是触发器的固有属性,一般典型值小于1~2ns。在Xilinx等的时序概念中,称 Altera的Microtsu为setup时间,用Tsetup表示,请大家区分一下。回到Altera的时序概念,Altera的tsu定义如下:

tsu = Data Delay – Clock Delay + Micro tsu

Clock Hold Time tH

时钟保持时间是只能保证有效时钟沿正确采用的数据和使能信号的最小稳定时间。定义的公式为:
tH= Clock Delay – Data Delay + Micro tH
注:其中Micro tH是指寄存器内部的固有保持时间,同样是寄存器的一个固有参数,典型值小于1~2ns。

Clock-to-Output Delay(tco) 

这个时间指的是当时钟有效沿变化后,将数据推倒同步时序路径的输出端的最小时间间隔。

tco = Clock Delay + Micro tco + Data Delay

注:其中 Micor tco也是一个寄存器的固有属性,指的是寄存器相应时钟有效沿,将数据送到输出端口的内部时间参数。它与Xilinx的时序定义中,有一个概念叫Tcko是同一个概念。

Pin to Pin Delay (tpd)

tpd指输入管脚通过纯组合逻辑到达输出管脚这段路径的延时,特别需要说明的是,要求输入到输出之间只有组合逻辑,才是tpd延时。

Slack

Slack是表示设计是否满足时序的一个称谓,正的slack表示满足时序(时序的余量),负的slack表示不满足时序(时序的欠缺量)。slack的定义。

Slack = Required clock period – Actual clock period
Slack = Slack clock period – (Micro tCO+ Data Delay + Micro tSU)

Clock Skew

Clock Skew指一个同源时钟到达两个不同的寄存器时钟端的时间偏移。
0 0
原创粉丝点击