以下文章来源于微信公众号“IC解惑君”,作者木飞
引言:
之前在漫谈亚稳态章节中,总结到:
电路中基本所有的时序问题最终都会归结于电路中的触发器,所以满足触发器的时序是电路时序检查的第一要义。(见漫谈IC亚稳态)
所以本文将从触发器的物理结构层面来分析触发器的Setup&Hold Time,希望能够对大家理解Setup&Hold Time有一定的帮助。
前言:门电路基础
在数字逻辑电路中,最基本的电路单元就是各种门,如:与门、或门、非门。通过对这三种门的顺序组合会形成更为复杂的基础逻辑门:与非门、或非门、异或门、同或门。
如下图:
一般情况下通过对这些基础门电路前后顺序组合,可以完成更为复杂的组合逻辑电路设计。但是组合逻辑电路有比较明显的缺点:输入的变化会立即引起输出发生变化,也就是说该电路没有一点点的记忆功能(保存自己之前的状态)。但是在现实的生活中,有时候还需要根据之前的记忆(经验|状态)决定当前的动作。这时候,组合逻辑电路就不能满足我们实际中的需求了。
上文中有说到,在数字电路设计里面,最基本的电路单元就是各种门单元。所以这里我们准备用最基本的门电路单元组合成一种电路结构,进行电平状态信息的保存。
正文1:如何让一个电路具有保持电平状态信息的功能?
我们学生时代都经历过老师在上课的时候身上随身带着一个扩音器,一般情况下,老师讲话扩音器就会把声音放大。在这种情况下,输入的声音会立即进行输出(这种情况可以对比组合逻辑电路:输入的电平信号立即会输出对应的逻辑电平)。特殊情况下,当老师把麦克风靠近扩音器喇叭的时候,会听到啸叫声音持续从喇叭发出,且不停止。在这种特殊的状态下,是否可以认为我们把当前这种啸叫的声音状态保存了下来(因为该状态在供电情况下一直持续)。所以该方法指示我们是否可以让组合逻辑电路的输出连接到组合逻辑电路的输入,保存当前电路的电平状态。有兴趣的同学可以自己组合。这里直接说结论:有人在摆弄这些门组合的时候,得到了具有记忆特质的电路,该电路的输入状态可以被设置、可以被保存。我们称之为锁存器。如下图:
接下来简介一下该锁存器工作的原理:
如上图:
复位-置位功能:
保持功能:
PS:非法状态:S=1&&R=1,该状态出现将会违背保持数据的意义,同时也可能会把电路引入一个未知的状态,所以在工程和设计中一般不会让这种情况出现。
从此刻开始,电路就拥有了保持电平状态信息的能力:
通过先把数据复位(R=1)或者把数据置位(S=1),然后取消对应的信号,之前置位或者复位的信号就一直保存在这个SR锁存器结构内了。
想要知道当前锁存器内部保存的电平状态信息,可以通过SR锁存器的输出Q和Q'信号知道该锁存器内保存了之前设置的什么信息。
正文2:数据稳定时间:
如上图:
当S=0&&R=0的保持状态 变为 S=1&&R=0的置位状态:
(1)此时SR锁存器输入信号S=1通过或非门传播到Q',
(2)把Q’的输出信号从1变为0(之前状态是1,左图);
(3)此时变化后的Q'=0,继续沿着导线传播到下面或非门的输入;
(4)此时该信号经过下面的或非门继续传播到下面或非门的Q;
(5)把Q的输出信号从0变为1(之前状态是0,左图);
(6)最后Q输出信号返回到上面的或非门,使Q'=0信号更加稳定。
从上面得出结论:对于保存数据的锁存器元件:当输入接口的状态变化时,如上图的S=0 -> S=1(保持状态变为置位状态)。输入的数据需要稳定一段时间等到电路内部信号传输完成稳定后,SR锁存器Q和Q'输出稳定的信号。才能来把数据真正安全de设置和保存下。
如果设置的数据没有稳定一段时间,那么锁存器输出的数据就可能不稳定(因为内部的信号正在传输,没有稳定时输入信号就切换),锁存器的输出会在0->1中间迟滞一段时间后最终稳定下来。(如果不满足数据稳定时间,那么我们不知道最后的输出结果是采用数据变化前还是数据变化后,还是中间偶尔的毛刺,还是跳变的中间状态电平。输出不够确定,这是不被正常工作的数字电路逻辑允许的)。
正文3:形成D触发器
对于当前的集成电路来说,所有的时序逻辑是在时钟的控制下一拍一拍进行信号的传输和处理。虽然之前有了保存数据电平状态的锁存器,但是其输入的变化很敏感,一个小的输入变化就会引起输出状态的变化。这在实际电路中,抗噪声能力不强,一个毛刺会影响下级电路;同时电路没有时序特性。于是人们想办法通过锁存器的组合生成触发器。
如下图:
如图所示该触发器,在时钟的低电平时间,前半部分的SR锁存器打开,接收D输入接口传输的信号。在时钟的高电平时间,前半部分SR锁存器进入保持状态,后半部分的SR锁存器打开,接收前半部分SR锁存器保持的数据,如此往复。
PS:边沿触发器是由SR锁存器构成,所以上文SR锁存器的数据稳定特性必须也要满足。
PS:当然,能够组成以上边沿触发器的电路形式有很多种,这里只是简单说明了其中的一种。
正文4:D触发器的setup/hold time
当CLK=0时,对于两个SR锁存器组成的reg来说,位于前面的SR锁存器正在设置输入数据的值为(0|1)(正文1的复位置位功能,图2图3,时钟低电平内一直有效)。如上图的两个绿色方框。后面的SR锁存器输入信号在时钟的影响下无效。所以后面的SR锁存器处于保持上一时钟数据的状态(正文1的保持功能,图4图5,S=0&&R=0)。
当CLK=1时,位于前面的SR锁存器保存刚才输入数据的值(正文1保持功能,图4图5,S=0&&R=0),后面的SR锁存器正在设置前面的SR锁存器保存传输过来的(0|1)数据值(正文1的复位置位功能,图2图3)。
Setup Time:
如果前面的SR锁存器在时钟沿前数据稳定时间没有满足(正文2的数据稳定时间),那么在时钟沿后,前级的SR锁存器输出的数据处于0-1之间的摇摆电位,后级的SR锁存器就会接收到这个摇摆的电位,使得后级的SR锁存器输出处于亚稳态。
由于亚稳态摇摆的时间较长,如果在此阶段后一级的触发器也用到了此时的亚稳态数据,会导致后面的触发器也处于亚稳态和数据错误。所以引入了建立时间(Setup Time)来约束时钟沿之前,数据Data保持稳定的时间(即对正文2的数据稳定时间进一步约束)。
Hold Time:
Hold Time产生原因:
在数字电路设计中,虽然认为电路中只有逻辑0和逻辑1、时钟方波很标准、组合逻辑信号传输立刻完成、信号逻辑运算同时且一致。但是在实际中,有过模电基础的同学会知道,所有构成数字电路的三极管、MOS管,都有其关断和打开时间。同时,因为所有的电路结构都有面积,所以电信号在电路中传输也是需要一定的时间。所以实际的电路中是需要考虑到这些时间。
当CLK=1时,对于上图中与门,此时与门内部MOS门还没有完全关闭(还不能阻止输入信号传入)。如果此时输入的信号变化则将会传播到后面的SR锁存器,影响SR锁存器保存的有效电平状态信号。同时因为时钟沿之后变化的数据其稳定时间没有达到SR锁存器的数据稳定时间,同样会引起SR锁存器内部的环路震荡,产生亚稳态。
所以为了杜绝内部信号传输时间和门电路开关时间内输入信号变化影响电路的功能特性,所以在CLK=1之后,也需要数据Data保持一定的时间。我们称之为保持时间。
为了正确的读取和输出寄存器的数据,在集成电路中所有的触发器都要遵守建立时间和保持时间上的约束。
结论:
触发器的建立时间和保持时间,对于触发器来说就像是固定的属性值。这个属性值大小和触发器的工艺和内部的结构相关,但唯独和时钟没有关系。
虽然触发器的建立时间和保持时间的大小和时钟没有关系,但是触发器的建立和保持时间却决定了时钟运行的最快的频率(即时钟周期最小不能大于建立时间+保持时间)。
同时这也说明了:电路的时钟频率不能无限制的提高,因为其器件和功能特性,会有一个上限的频率。
有问题大家可以后台留言,谢谢大家。
您的支持是我更新的动力。
如果有喜欢的文章,大家请点赞分享转发加关注。
未完待续,下文更精彩。。。。。。