异步信号处理与亚稳态

亚稳态

亚稳态定义

亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态引时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。
在这里插入图片描述

亚稳态产生原因

如果数据传输中不满足触发器的建立时间或者保持时间,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间(recovery time)不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端在0和1之间处于振荡状态,而不是等于数据输入端D的值,这段时间称为决断时间(resolution time)。经过resolution time之后Q端将稳定到0或1上,但是稳定到0或者1,这是随机的,与输入没有必然的关系。
从具体来源角度说:亚稳态的主要来源是异步信号检测、跨时钟域的异步信号传输、异步控制信号。
从根本原因角度来说亚稳态的产生原因可以归结为在时钟有效沿来到时,采样门关闭前,最后采样到的数据是不稳定的。
在这里插入图片描述
在这里插入图片描述
如上图所示,Tmet为决断时间,当决断时间较小时,输出Q能在下一周期到来前恢复到稳定状态,当决断时间较大时,输出Q在下一周期到来后未能恢复到稳定状态(或者不满足Q输入的寄存器的建立时间)这就会使得下一级触发器也发生亚稳态,即亚稳态发生了传递。

亚稳态的危害

产生亚稳态后,寄存器Q端输出在稳定下来之前可能是毛刺、振荡、固定的某一电压值。在信号传输中产生亚稳态就会导致与其相连其他数字部件将其作出不同的判断,有的判断到“1”有的判断到“0”,有的也进入了亚稳态,数字部件就会逻辑混乱。在复位电路中产生亚稳态可能会导致复位失败。

异步复位,同步释放

未避免异步复位信号不满足恢复时间和去除时间而引起亚稳态,对异步复位信号可做异步复位,同步释放处理。
所谓异步复位,同步释放就是在复位信号到来的时候不受时钟信号的同步,而是在复位信号释放的时候受到时钟信号的同步。
异步复位、同步释放实现
如下图,单独看方框左的复位策略,是一个异步复位电路,即复位信号有效时不管时钟信号是否处于有效沿,输出都会被复位,但是如果复位信号在时钟信号的上升沿撤销时,这时候的输出就是亚稳态。
首先看一下怎么实现异步复位:当rst_async_n有效时,第二个D触发器的输出rst_sync_n就是低电平,方框左中的异步复位端口有效,输出被复位。
然后是同步释放:假设rst_async_n在clk的上升沿时撤除,那么第一级触发器处于亚稳态,但是由于两级触发器的缓冲作用,第二级触发器的输入为clk到来前第一级触发器的输出,即为低电平。因此,此时第二级触发器的输出一定是稳定的低电平,方框左中触发器仍然处于复位状态。在下一个clk到来时,第一级触发器的输出已经是稳定的高电平了,故rst_sync_n已经是稳定的高电平,此时复位释放。也就是同步释放。
通过上面分析可知:异步复位、同步释放其最显著特征是既保留了异步复位的功能,又避免了异步复位释放时所面临的recovery或者removal违例问题。

跨时钟域传输问题

不同时钟域下的信号传递就涉及到跨时钟域信号处理,因为相互之间的频率、相位不一样,如果不做处理或者处理不当,如下图所示的时钟域CLK_A的数据信号A可能无法满足时钟域CLK_B的setup/hold时间,可能导致:

1.数据丢失,无法采到预期中的信号;
2.亚稳态的产生。
从而导致某个电路模块或者整颗IC无法工作。

在这里插入图片描述
常见的跨时钟域信号处理方法有如下的三种:

  1. 两级DFF同步器:适用于用于单bit的异步信号处理。

  2. 握手协议:适用于单bit快时钟域到慢时钟域的传输,可以防止数据丢失。
    在这里插入图片描述

  3. 异步FIFO:适用于多bit异步信号的同步问题。

两级D触发器同步

最常见的同步器就是使用两级寄存器,即使用寄存器打两拍的方式进行同步。所谓的同步器就是采样一个异步信号,采样输出能够同步到本地或采样时钟的模块。这种最简单也是使用最普遍的两级寄存的同步器。
在这里插入图片描述
当然,仍然有可能级联的第二个寄存器输出还会表现为非稳定状态,但是这种双寄存同步器已经可以解决大部分这类亚稳态问题。在设计这种同步器的时候应当注意遵循以下原则:
(1)级联的寄存器必须使用同一个采样时钟。
(2)发送端时钟域寄存器输出和接收端异步时钟域级联寄存器输入之间不能有任何其他组合逻辑(如下图所示)。
在这里插入图片描述

(3)同步器中级联的寄存器中除了最后一个寄存器外所有的寄存器只能有一个扇出,即其只能驱动下一级寄存器的输入。
(4)快时钟域到慢时钟域的传输可能会造成数据丢失。

握手协议

想象一下,如果频率较高的时钟域A中的信号D1 要传到频率较低的时钟域B,但是D1只有一个时钟脉冲宽度(1T),clkb 就有几率采不到D1了,如下图所示:
在这里插入图片描述
因此只有当D1 在很长一段时间内为1或0,确保一定可以被clkb采样到,才能用两级DFF同步器处理。
如果信号D1 只有1T或几个T的脉宽,又需要传到时钟频率较低甚至或快或慢不确定的时钟域B,这种情况该怎么如何处理呢?

握手协议(handshake)异步信号处理是一种常见的异步信号处理方法。常见的握手协议异步信号处理行为波形图大致如下图:
在这里插入图片描述
信号d_in 所处时钟域是clk_in,且d_in只有1T 的宽度,想要传送到clk_out 时钟域(clk_out 跟clk_in不相关)。
因为clk_out 和 clk_in相位关系不确定,时钟周期大小关系不确定,无法保证一定能采样到d_in。
因此需要把d_in展宽,产生d_req 信号;
d_req 信号一直拉高,经过clk_out时钟域两级DFF 同步器后,得到d_reg_sync;
取d_req_sync 上升沿1T,即可得到传送到clk_out 时钟域的d_out。
此时,d_in 从clk_in 传送到clk_out 的任务就算是结束了。
但对于handshake 电路来说,任务还没结束,因为d_req 还一直是高电平。
因此,需要把d_req_sync 信号再用两级DFF同步器,传回clk_in 时钟域,得到d_ack信号;
当clk_in 看到d_ack拉高后,就可以把d_req 信号拉低,到这里一个handshake电路行为才算是结束了。
根据上面的波形图,可以看到握手协议异步信号处理并不复杂,但是应该能注意到,这个处理方法信号传递的速度相对较慢。
从波形来看,至少需要3个clk_in 和2个clk_out时钟周期。根据不同的应用需求,人们会对上图波形做不同的改造。但万变不离其宗,原理都是一样的,电路也大同小异。

异步FIFO
  • 8
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值