时序约束(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)改善时钟质量,用边沿变化快速的时钟信号;

全部评论

相关推荐

李橙子:结果虽不够理想,但过程本身已是宝贵的淬炼。能把学习机会放在薪酬之前,证明你目光长远。先踏实进去,用这段时间扎实学好Python后端,把公司项目吃透,你的价值会在下一份工作中完全体现。这个起点,值得。
点赞 评论 收藏
分享
2025-12-12 19:58
哔哩哔哩_产品运营
跟同事聊天时候,同事说“你刚来时候blabla”,突然意识到自己已经正式工作一年多了!就这么从脆皮内耗大学生逐渐磨练成厚血条(厚脸皮)工位主理人。秋招简历当然也是投了不少份,但总有一些机会要留给自己的白月光,比如阿B,说说我秋招选择阿B的理由吧:1.&nbsp;“为爱发电”:说来兴趣真的是初心,阿B在手机陪我看了那么多番剧vlog学习视频,当然想和它距离更近一些。来了之后发现,B站重要活动要专门走内宣是有原因的,身边的六级大佬绝对不在少数。2.&nbsp;实习体验感拉满:嗯对其实等不到正式工作就先来实习体验了。实习期在一个非常好的组,大家都很年轻氛围超好,做事情讲背景、讲逻辑不会只丢脏活累活。平时聊得来,工作起来也能快速打配合,项目完成时候所有人都成就感满满。再说说来正式工作之后的体验感:1.&nbsp;校招生mentor文化很需要:在阿B每个校招生入职都是会有一位mentor的,不会让大家有刚工作人生地不熟就孤苦一人挑大梁的感觉。很幸运我的mt人真的超好,耐心温柔业务能力又很强。常常在对需求听她帮我说话时看着她身上闪耀的光芒想要流泪。有mt的话landing期会顺畅很多。公司也会安排一些活动帮助mentor和mentee增进感情。2.小动物们和各类活动是回血剂:工作起来当然难免遇到一些磕磕磨磨,但是压力大时候转头看到想悄悄溜过的小猫摸上一把,真的会治愈不少。还有节假日的各种活动和扫楼活动,真的会给上班增加动力。最后上图!没有任何工作会让人一直开心吧,但阿B你在照顾员工心情这一块儿做得真的很不错。
哔哩哔哩公司福利 915人发布
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务