时序约束(timing)简介

在数字设计中,时序是最基本也重要的概念。 我们所说的数字设计多时候都是指同步逻辑,所谓的同步逻辑,是指所有的时序逻辑都在时钟的控制下完成。时钟就是时序逻辑的节拍,其实生活中很多地方都需要有一个节拍来协调系统的各个部分,举个栗子:工厂里的流水线。

流水线的每个工人从前一个人那里拿到中间产品,装配一个零件,然后交给下一个人;每一个人面前的空间只有放置一个中间产品的空间。装配一个零件并把中间产品交到下一个那里是需要时间的。如果这个时间太短,就会发生下一个人手中的零件还没装配好,新的中间产品又来了,却没处放的问题。如果这个时间太长了,就会发生下一个人闲着没事干的情况。前一种情况会导致流水线混乱,后一种情况则导致流水线的效率下降。因此,在确定的流水线效率要求下,我们就必须要求每位工人装配一个零件并把中间产品传到下一位工人的时间不能太快也不能太慢。这话也可以反过说,只有保证每位工人所用的时间在一个确定的时间范围内,我们才能保证流水线在按照特定的效率运行。

同步逻辑数字设计也好比是设计一个满足上述要求的“流水线”,只不过这个流水线是由传递二进制数据的数字器件组成。数据在两个存储单元之间传递,“效率”由时钟的周期(T)决定。每个存储单元在时钟节拍(通常是时钟信号的上升沿)的号令下工作。如同每个工人装配零件需要时间一样,每个存储单元正确地存储数据也是有要求的。它要求数据必须在时钟沿之前的某个时间就准备好(我们把这个时间称为 setup time,记tsetup),并且有这个数据必须保持不变一直到时钟沿之后的某个时间(我们把这个时间称为 hold time,记为 thold)才能完成数据的存储。每个存储单元传递数据到下一个单元的时间我们记为 tdata,累比于上面流水线的例子,我们很容易得出,为了保证数据的正确传递,必须要求满足(1):

                                    thold < tdata < T - tsetup(1)

如果不是 thold < tdata,就会干扰下一个存储单元当前的数据存储;如果不是 tdata < T - tsetup,下一个存储单元就无法在下一个时钟上升沿到来时存储数据。实际中为了便于分析,这种约束关系也可以表示为(2)(3):

                                    tslack-max = (T - tsetup) - tdata > 0 (2)
                                    tslack-min = tdata - thold > 0(3)

这样一来,我们只需要检查每两个存储单元之间的 tslack-max 和 tslack-min 是否为正值就可以了。我们把这两个差值称为 Slack 。Slack为正,我们称之为 "MET",Slack为负,我们称之为Violation。

事实上,两个存储单元之间通常还会有组合逻辑单元,它们也传递数据,也对数据进行“加工”(二进制运算),只不过他们不需要理会时钟信号的存在,它们只是按照自己的能力大小(速度快慢)尽职而已。仍然以时钟节拍(比如时钟信号上升沿)做为参考的话,存储单元完成内部数据存储并输出到它的输出端(比如Q端口)也是需要时间的(我们记为tclk-q)。数据通过两个存储单元之间的组合逻辑所需要的时间记为 tcomb,则(4):

                                    tdata = tclk-q + tcomb(4)

至此,我们应该已经知道了所谓的时序约束是指什么。但实际应用中,为了更好地将相关问题数学模型化,我们还需要进一步的概念定义。

Timing Path

我们定义了Timing Path,False Path, Disabled Timing Path以及Multicycle Path。

Timing Path:时序路径是指设计中数据信号传播过程中所经过的逻辑路径。每一条时序路径都存在与之对应的一个始发点和一个终止点。(1)时序分析中定义的始发点分为:组合逻辑单元的数据输入端口和时序单元的时钟输入端口。(2)时序分析中定义的终止点分为:组合逻辑单元的数据输出端口和时序单元的数据输入端口。(3)时序路径根据始发点和终止点的不同分为4种类型的时序路径,如上图1所示。
False Path:所谓 False Path,简单来说就是指那些理论上存在,但实际上却不可能有数据沿它传输的 Timing Path。
Disabled Timing Path:人们有意识地排除掉的 Timing Path。
Multicycle Path:通常的Timing Path在一个时钟周期内完成数据传输。有时,数据路径比较长,需要多于一个时钟周期才能完成数据传递,这种特殊的Timing Path叫做Multicycle Path 。

在上面的讨论中,我们所说的时钟信号都是理想情况下的。现实世界常常都是不会尽如人意的。时钟信号传递到各个节点所用的时间不会总是相同的。时钟信号两个相邻的周期的波形也不会完全相同。

Latency:我们把时钟信号传递到存储单元的输入端所用的时间定义为 Clock Latency。
Uncertainty:时钟信号传递到两个不同的节点所有的时间的差值我们称为 Clock Uncertainty。而 Uncertainly 事实上又可以分为skew和jitter两部分。三者的关系如(5)所示。

                                tuncertainty = tskew + tjitter(5)

简单介绍一下jitter,两个不同时刻(主要是相邻两个周期)的时钟信号由于时钟源本身的不稳定而产生的信号边沿的时间差异,我们称之为Jitter。如图2所示,jitter = T2 - T1。

jitter

我们详细介绍一下skew,同一个时钟信号由于传递路径不同导致的时间差异,我们称之为Skew。skew主要分为两类,一类是正偏移,一类是负偏移。当信号传输的目标寄存器在接收寄存器之前捕获正确的时钟信号,电路发生正偏移(也就是时钟布线与流水线方向一致)。当信号传输的目标寄存器在接收寄存器之后捕获正确的时钟信号,电路发生负偏移(也就是时钟布线与流水线方向相反)。

正偏移与负偏移

对于图3(a)中的R1和R2,时钟正偏移时,为保证电路的功能正常,需满足(6)(7)(8):

                                tskew = tclk2 - tclk1 > 0(6)
                                tslack-max = (T - tsetup) - (tclk-q + tcomb) + tskew(正) > 0(7)
                                tslack-min = (tclk-q + tcomb) - thold - tskew(正) > 0(8)

对于图3(b)中的R1和R2,时钟负偏移时,为保证电路的功能正常,需满足(9)(10)(11):

                                tskew = tclk2 - tclk1 < 0(9)
                                tslack-max = (T - tsetup) - (tclk-q + tcomb) + tskew(负) > 0(10)
                                tslack-min = (tclk-q + tcomb) - thold - tskew(负) > 0(11)

将(7)(8)变型后得(12)(13),我们可以发现在时钟正偏移时,电路更倾向于发生 hold time violation,即更容易出现竞争,但是T可以取更小的值,意味着电路的时钟频率可以更大,电路性能提升。将(10)(11)变型为(14)(15),我们可以发现电路发生负偏移时,T必须取得更大,电路的性能下降了,但降低了hold time violation的风险,减少了竞争的麻烦。

                                T >  tsetup + (tclk-q + tcomb) - |tskew|(12)
                                thold <  (tclk-q + tcomb) - |tskew|(13)

                                T >  tsetup + (tclk-q + tcomb) + |tskew|(14)
                                thold <  (tclk-q + tcomb) + |tskew|(15)

从(12)~(15)中,我们可以发现遇到时钟正偏移的情况,要避免setup time violation,我们可以增大 |tskew|,减小(tclk-q + tcomb),增大T。要避免hold time violation,我们可以增大(tclk-q + tcomb),减小 |tskew|。遇到时钟负偏移的情况,要避免setup time violation,我们可以减小 |skew|,减小(tclk-q + tcomb),增大T。要避免hold time violation,我们可以增大(tclk-q + tcomb),增大 |tskew|。

对于Jitter, 通常都相对 Skew 而言比较小,我们也只能尽可能挑选稳定性好的时钟信号源。在实际设计中,我们更关心 Skew 多一些。我们常说的 CTS (Clock Tree Synthesis) 的主要目的就是如何让 Skew 尽可能地小。

最后给出hold time 和 setup time 的完整定义,科普一下亚稳态的概念及解决方法。
setup time:建立时间是指在时钟边触发沿到来之前,触发器输入端数据信号需要保持不变的最小时间。
hold time:保持时间是指在时钟边触发沿到来之后,触发器输入端数据信号需要保持不变的最小时间。

亚稳态:亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。

亚稳态的解决方法:(1)降低系统时钟频率;(2)用反应更快的FF;(3)引入同步机制(即使用同步器),防止亚稳态传播;(4)改善时钟质量,用边沿变化快速的时钟信号;

全部评论

相关推荐

2024-12-16 21:59
东北大学 Java
水杉1:我评估了仨月了
点赞 评论 收藏
分享
02-03 12:20
门头沟学院 Java
一天代码十万三:你这个简历东西太杂了,根本看不出你想投什么岗位
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务