数字电路的时序分析

记录一下时序分析的学习

首先搞清楚以下时序分析时用到的名词:

1.什么是setup time和hold time,为什么需要setup time和hold time

参考:https://zhuanlan.zhihu.com/p/161283550

  首先来看触发器的原理,如下图所示,是一个传输门逻辑实现的D触发器,T1,T2,I1,I2构成了前级锁存器,T3,T4,I3,I4构成了后一级的锁存器,共同组成了一个触发器。
在这里插入图片描述

  其工作原理为:当clk信号为低电平时,T1,T4导通,T2,T3截止,这时候触发器的输出是稳定的,因为后级是稳定锁存数据的,电路简化是下图的样子:

在这里插入图片描述

  当clk发生跳变,变为高电平时,T2,T3导通,T1,T4截止,前级锁存器将数据锁存,后级为一个通路,可将数据送出到Q端,简化为下图的样子:
在这里插入图片描述

那为什么需要setup time呢?

答:当clk由本来的低电平变为高电平时(也就是上升沿触发时),前级锁存器要想在高电平时正确锁存D端的数据,就必须在低电平的通路阶段,让D端的数据传输到I1的输出端,这样前级锁存器才能在变为高电平后正确锁存数据。从D输入端到I1的输出端(Qm非)需要的时间,就是setup的时间,即在CLK上升沿之前,D端数据要稳定一段时间,使得数据可以到达I1的输出端(Qm非)。

那为什么需要hold time呢?

答:在clk由低变高时,T1的关断是需要时间的,还是为了前级锁存器的正常锁存,确保T1完全关断,D在CLK上升沿之后,也需要保持不变,使得T1传输门完全关断,前级触发器正确锁存。

因此,在时序逻辑中,信号必须满足setup time和hold time,寄存器才能正确采集数据,逻辑才不会混乱。

2.时序路径是什么,有哪些时序路径?

时序路径,其实就是信号的传输路径,根据信号的传输路径,时序路径有以下四种:

  • Path from Input Port to Internal Sequential Cell(输入端口到芯片的内部时序元件(也就是寄存器))
  • Internal Path from Sequential Cell to Sequential Cell(寄存器到寄存器)
  • Path from Internal Sequential Cell to Output Port(内部寄存器到输出端口)
  • Path from Input Port to Output Port(输入端口到输出端口)
    在这里插入图片描述

  可以看到只要遇到寄存器,一条时序路径就结束,整个时序分析就是分析这些路径上的信号延时。

3.如何分析时序路径上的时序?

分析时序路径主要依靠分析时序路径上的信号延时,首先明确几个概念:

  • launch edge time: 数据发射时间,也就是前一级寄存器将数据打出的时间
  • capture edge time: 数据的捕获时间,也就是后一级寄存器捕获数据的时间,通常capture edge time - launch edge time为一个时钟周期。
  • datapath delay: 数据从发射出到下一级寄存器D端的时间,通常为Tclk-Q + Tcomb(组合逻辑时延)
  • source clock path delay: 指前一级source寄存器的clk,从时钟源端到source寄存器的延时
  • destination clock path delay: 后一级destination寄存器的clk,从时钟源端到destination寄存器的延时
    在这里插入图片描述
    在这里插入图片描述

3.1 setup time的分析

首先根据上面讲到的时序路径来分析setup time,这里将提到三个概念:

  • Data Required Time (setup): 指的是为了满足setup,我们期望数据信号到达的时间
  • Data Arrival Time (setup): 指的是数据信号实际的到达时间
  • Slack (setup): 指的是期望到达时间与时间到达时间的差值,也就是时间裕度。

首先以reg2reg这种最为典型的时序路径(前面讲了4种时序路径)来看Data Required Time (setup)的分析:
在这里插入图片描述

在不考虑时钟偏移和时钟抖动的情况下,假设时钟周期为5ns,建立时间setup是0.5ns的话,也就是说数据必须在第二个周期的前0.5ns到达,即数据必须在5-0.5=4.5ns之前到达,因此4.5ns是要求到达时间,如果超过了这个时刻数据就打不进触发器DFF2,因此:

          Data Required Time (setup) <= 4.5ns

同样在不考虑时钟偏移和时钟抖动的情况下,假设Tclk-Q的时间为0.6ns,两个寄存器之间的组合逻辑延时为3.33ns,则:

          Data Arrival Time (setup) = 0.6ns+3.33ns = 3.93ns

也就是说clk上升沿之后3.39ns,数据就从launch edge到达了目的寄存器的D端,这个时间是小于4.5ns的,因此setup是满足的。

          时序裕度Slack (setup)=4.5-3.93=+0.57ns.

因此也看到setup时间约束的是数据传播的最大延时,在本例中,如果实际的信号传播延时大于了4.5ns,电路将不满足setup的要求,发生时序违例。

更进一步分析:

  实际的电路中,时钟并不是理想的时钟,source寄存器和目的寄存的时钟也不是完全同步的,由于时钟从时钟源到达两个寄存器的时间不同,因此存在时钟偏差skew,由于时钟的不稳定行,时钟还存在一定的抖动jitter,因此在分析setup时,也需要将时钟的因素考虑在内。

还是以reg2reg的时序路径为例:
在这里插入图片描述

  我们从时钟源来重新分析计算**Data Required Time (setup)、Data Arrival Time (setup)、时序裕度Slack (setup)**这三个时间,以lunach edge time为0时刻。

从图中可以看出:

Data Required Time (setup) = TCLK(一个时钟周期) + Tskew - setup time - clock uncertainty(考虑时钟抖动,把要求的时间再往前挪一些)

Data Arrival Time (setup) = Tclk_Q + Tcomb

时序裕度Slack (setup) = Data Required Time (setup) - Data Arrival Time (setup) = 一个时钟周期 + Tskew - setup time - Tclk_Q - Tcomb - clock uncertainty

3.2 hold time的分析

还是以REG2REG的时序路径为例:

首先需要想清楚一件事情:在接收端的上升沿后的hold时间段内,前一级的source寄存器在干什么?

答:前一级的source寄存器把新的数据给launch(发射)了出来,因此,hlod time时间段内,想要保持触发器D端的数据不变,就是要保证,前一级新发出来的数据不能到达的太快,如果在hlod时间段内,前一级新发出来的数据到达了接收寄存器的D端,就会破坏D端的前一个的稳定数据,也就是hold时间不满足。

在不考虑时钟偏移和时钟抖动的情况下也就是:

Data Arrival Time(hold)>= hold time ,也就是信号传的慢一点,最快也只能是hold time,假定新数据的到达时间正好是hold time,也就是前一个数据正好在接收寄存器的D端保持了hold time的时间,刚刚满足。这也就是hold规定了最小的延时,再小就不行了,破坏了hold time。 这里hold time就是我们的Data Required Time(hold),我们希望Data Arrival Time(hold)不要小于hold time。
这时候的时间裕度就可以这么算:

时序裕度Slack (setup) = Data Arrival Time(hold)- hold time

更进一步分析:

考虑时钟偏移和时钟抖动:

如果是正偏移:在接收端的上升沿发生时,发送端的上升沿都已经结束了,也就是新的数据早就发出来了,因此,为了保证满足hold时间,需要信号再慢一点,即:

Data Required Time(hold)>= hold time + Tskew + clock uncertainty(考虑抖动)

Data Arrival Time (hold) = Tclk_Q + Tcomb

时序裕度Slack (hold) = Data Arrival Time (hold) - Data Required Time(hold)(这里用Arrival减去Required 是为了使得slack为正值,一般不违例的情况下就是Arrival时间大于Required时间)=Tclk_Q + Tcomb -(hold time + Tskew + clock uncertainty(考虑抖动))

分析完毕

现在再来看看为什么需要时钟约束?

首先要清楚EDA工具在检查时序时具体在检查什么?

答:eda工具在检查时序时,在检查每一条时序路径的setup和hold时间是否满足,即检查setup的slack和hold的salck,看看时序裕度是否为正。

前面我们已经分析计算了Slack (setup)和Slack (hold),现在我们看看计算这两个量需要哪些参数?

答:需要下面计算公式里面的每一个变量参数。

时序裕度Slack (setup) = Data Required Time (setup) - Data Arrival Time (setup) = TCLK(一个时钟周期) + Tskew - setup time - Tclk_Q - Tcomb - clock uncertainty

时序裕度Slack (hold) = Data Arrival Time (hold) - Data Required Time(hold)(这里用Arrival减去Required 是为了使得slack为正值,一般不违例的情况下就是Arrival时间大于Required时间)=Tclk_Q + Tcomb -(hold time + Tskew + clock uncertainty(考虑抖动))

以上的参数中setup、hold、Tclk_Q 、Tcomb时间是芯片代工厂工艺库里面会根据综合使用的标准单元给到的,这也就是电路综合时候需要一个库文件的原因。

那还有其他的TCLK、clock uncertainty等参数是eda工具不知道的,这就需要我们给它参数,这也就是时钟约束。

前面一共讲有四种时序路径,在分析port2reg、reg2port以及port2port的时序路径时,还需要知道延时input delay 和输出延时 output delay,这也是eda工具不知道的,需要我们约束。
在这里插入图片描述

总结一下就是:

时序约束就是给eda工具在检查时序路径时需要用到的参数。

因此时序约束长下面这个样子:

  • create_clocks -name clk_name -period 10 [get_ports clk_in] //这个说明了时钟的周期TCLK为10ns
  • set_input_delay -max 7.4 -clock CLK [get_ports A] //这个说明了portA的信号输入延时
  • set_output_delay -max 7 -clock Clk [get_ports B] //这个说明了portB的信号输出延时
  • set_clock_uncertainty -setup 0.15 [get_clock clk] //这个约束考虑了时钟抖动和偏移,使得时序检查更为严苛

以上是基本的时序约束,要想更为精细化的时序检查,还有其他的一些更为细致的参数要给eda综合工具,这个正在进一步学习中。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值