异步复位
(1)异步复位电路
异步复位触发器则是在设计触发器的时候加入了一个复位引脚,也就是说复位逻辑集成在触发器里面。
(一般情况下)低电平的复位信号到达触发器的复位端时,触发器进入复位状态,直到复位信号撤离。带异步复位的触发器电路图和RTL代码如下所示:
(2)异步复位的优点
①使用异步复位的最大好处就是复位路径上没有延时,如上面的图所示,复位信号一直连接到触发器的复位端口,而不是像同步复位那样需要经过一个复位控制逻辑(如与门)。这样子就减少了外界信号的影响。
②与时钟没有关系,不管时钟上升沿有没有到来,只要复位信号一有效,触发器就会复位,也就是基本上做到实时性;由于与时钟没有关系,因此也可以用在门控时钟里面。
③综合工具能自动推断出异步复位而不必加入任何综合指令。
(3)异步复位的缺点
①复位撤离问题
在介绍复位撤离问题之前,先说一下复位恢复时间和去除时间。所谓的复位恢复时间是指撤离一个复位信号时,复位信号从有效跳变为无效的时刻与下一个有效时钟沿之间的这段时间;去除时间是指撤离一个复位信号时,复位信号从有效跳变为无效的时刻 与上一个有效时钟沿之间的这段时间(可以类比于触发器的建立时间和保持时间)。如下图所示:
上图中,rst_n1是要求的复位恢复时间,rst_n2满足复位恢复时间,rst_n3复位恢复时间不足。
上图中,rst_nA是要求的复位去除时间,rst_n2满足复位去除时间,rst_n3复位去除时间不足。
从上面的两个图中可以知道,如果你想让某个时钟沿起作用(也就是采数据),那么你就应该在“恢复时间”之前让异步控制信号变无效;如果你想让某个时钟沿不起作用(也就是在这个时钟沿依旧复位),那么你就应该在“去除时间”过后使控制信号变无效。
异步复位信号的恢复和去除时间需要大于一定的时间,如果你的异步复位信号在这两种情况之间(撤离),那么就没法确定时钟沿是否起作用了,即判断不出是复位还是不复位(不复位即是D触发器才输入端的数据)。
介绍了复位恢复时间和去除时间之后,我们就可以看看异步复位信号的问题了。由于异步复位信号与系统时钟毫无关系,复位可以在随时施加,也可以随时撤离。在施加的时候复位信号的时候,不存在任何问题,因为这跟复位恢复时间扯不上关系。
但是,在撤离复位信号的情况下就有问题了,主要有两个问题:
● 当异步复位信号的撤离时刻在时钟有有效沿附近时,就可能导致恢复时间或去除时间不足,即这个时候违背了复位恢复时间或去除时间,这时就可能导致触发器的输出端为亚稳态(注意是可能),如下所示:
但是并不是所有情况都会产生亚稳态,当复位值和此时的的输出相同时,就不会产生亚稳态,如下图所示:
这是因为:复位信号翻转的时候,如果复位信号判断是低电平,输出就复位即一定是低电平;
如果判断复位信号是高电平,输出信号就等于对输入信号的采样值。图里面输入信号就是低电平,不管你是复位还是不复位,输出一直是低电平,没有亚稳态。
● 复位状态不一致的问题:
复位信号很时钟信号一样,复位通过复位网络到达各个触发器。一方面,复位网络具有非常大的扇出和负载,到达不同的触发器存在不同的延时,也就是存在复位偏移,因此撤离异步复位的时刻也是不一样的;
另一方面,由于时钟网络也存在时钟偏移。这个时候异步复位信号就有可能在不同的触发器的不同时钟周期内进行撤离,也就是说异步复位的信号不一致,如下图所示:
异步复位信号a是异步复位信号源,异步复位信号b、c、d是到达触发器的异步信号。
我们可以看到,b信号是在本周期就撤离了复位;c信号则由于复位恢复时间不满足,则可能导致触发器输出亚稳态:而d信号则由于延时太长(但是满足了复位去除时间),在下一个周期才撤离复位。
撤离问题的解决方法:异步复位的同步释放
异步复位的同步释放电路也称为复位同步器,这个方法是将外部输入的异步复位信号进行处理,产生另外一个适合用于后面电路的复位信号,这个处理后的复位信号能够异步复位电路中的触发器,又不会存在撤离问题(因为经过了同步);这个异步复位同步释放的处理电路和RTL代码如下所示:
从图中可以看到,这是用外部异步复位信号来复位一对触发器,这对触发器异步地驱动主复位信号,也就是这对触发器产生电路需要的复位信号,这些复位信号再到达各个触发器,然后进行复位。
理想的异步复位同步释放的时序如下所示:
上图中,在理想的情况下,复位信号在两级D触发器上面的撤离时间可能不一样,这个和复位信号传输到的触发器位置和触发器的时钟沿有关。理想情况下的复位信号传输到目标触发器都能够同时撤离,并且不在时钟有效沿附近。
实际情况一般不是那么理想的,当不是理想的情况下,也就是说复位信号到达目标寄存器存在时钟偏移,并且复位信号有可能在时钟有效沿附近撤离,这个时候复位器出现的问题就有三种:第一级OK,第二级出现问题;第一级出现问题,第二级OK;两级都出现问题。
下面我们就来看看这三种情况下产生的复位信号是什么情况:
第一级的撤离没有问题,第二级的撤离出现在时钟的有效沿附近,也就是说第二级的D触发器的撤离时间不满足复位恢复时间或者去除时间,这时候的时序图如下所示:
我们可以看到无论是触发器判断此刻是复位还是不复位,输出都是一样的,也就是说,输出rst_n不是亚稳态,而是确定的值。
第一级的撤离出现问题,第二级的撤离没有问题,这时候的时序图如下所示:
我们可以看到,第一级触发器虽然产生了亚稳态,但是由于第二级触发器的存在,亚稳态并没有传播下去,得到的复位信号依然是干净的,只不过这个复位信号可能延长多一个周期而已(这是因为亚稳态稳定后的可能态引起的)。
最极端的一种情况是,两级的撤离都不满足复位恢复时间或者去除时间,这时候的时序图如下所示:
我们可以看到第一级触发器产生了亚稳态,但是由于第二级触发器的存在,亚稳态没有传播下去;虽然第二级触发器的复位信号撤离也在时钟有效沿附近,但是跟第一种情况一样,第二级触发器是不会产生亚稳态的。因此即使是极端状态,输出的复位信号也是干净的。
由此我们可以看到,异步复位的同步撤离能够有效地解决撤离导致的复位恢复时间或者去除时间不足的问题,同时把复位信号同步化,解决了复位撤离偏移的问题。
②异步复位的抖动问题
当外部输入的异步复位信号产生毛刺时,任何满足触发器最小复位脉冲宽度的输入都有可能引起触发器复位,这问题是源头上的问题,即使是使用上面的同步器,也还是有同样的敏感问题,时序图如下所示:
解决方法 :一个是使用同步复位,另一个就是过滤毛刺了,过滤毛刺和消抖的思路有点像,主要就是经过一段延时之后,在经过逻辑门判断产生外部来的是不是真正复位信号,加上过滤毛刺信号部分的同步撤离电路和时序如下所示:
在上图中,我们可以看到,抖动问题得到了解决。然而这种方法还是有缺点的,主要就是这个延时电路的延时控制可能随着环境而变化,而且延时的时间要合适长才行,绝对不能太短。
③DFT的问题
在DFT的时候,如果异步复位信号不能直接被I/O引脚驱动,就必须将异步复位线和后面的的被驱动电路断开,用来保证DFT扫描和测试能够正确进行。总之异步复位增加了DFT的复杂性。
复位策略——复位网络
在数字电路里面,复位信号驱动了很多触发器,仅次于时钟,因此复位也往往形成或者使用复位网络。
复位网络的设计也是有值得斟酌的地方,例如,由于复位的扇出太大,全部的复位不能仅仅由一个端口驱动,也就是不能像下面一样:
既然上面的不行,那就改成下面的呗,也就是使用多各“并联”的同步释放,分担一下负载压力:
然而这种方案还是有问题的,这是第一级的撤离出现问题,第二级的撤离没有问题的时候,亚稳态稳定后的状态可能不一样,导致rst_n的复位不一致,有的复位可能会快/慢一个周期。
最后的方案是,先进行同步释放之后,同步后的复位信号又当做各个部分的异步信号,然后进行同步释放,如下所示:
这样先经过前级的同步释放之后,就不存在亚稳态稳定好导致的输出rst_n不一致的问题了。
最后说一下多时钟域的复位:在多时钟域复位中,外部的异步复位信号的同步释放应该各自的时钟进行同步,比如异步FIFO中,写时钟域就用写时钟进行同步释放;读时钟域就用读时钟进行同步释放。
-
数字电路
+关注
关注
193文章
1600浏览量
80498 -
触发器
+关注
关注
14文章
1996浏览量
61051 -
时钟信号
+关注
关注
4文章
445浏览量
28509 -
复位信号
+关注
关注
0文章
53浏览量
6299
发布评论请先 登录
相关推荐
评论