首页 > 编程知识 正文

导致亚稳态的原因,亚稳态解决方法

时间:2023-05-06 00:21:48 阅读:158708 作者:4345

(写作的初心只是记学习笔记)

参照来源:

https://baike.baidu.com/item/亚稳态/3915703? fr=Aladdin # 3https://blog.csdn.net/Gordon _ 77/article/details/79483119亚稳态问题1 .概念2 .发生原因3 .发生情况3.1信号传输中的亚稳态3.2复位电路

1 .概念

准稳态是指触发器在某个固定时间内无法达到可确认的状态。 当某触发器进入亚稳态读取时,既无法预测该单元的输出电平,也无法预测何时输出稳定在某个准确水平。 在此稳定周期中,触发器的输出可处于若干中间电平,或处于振荡状态,这种不必要的输出电平可沿着信号通道上的每个触发器级联传播。

2 .发生原因http://www.Sina.com/http://www.Sina.com/(在FPGA系统中,在数据传送中触发器的Tsu和Th不满足,或者复位中的复位信号的释放有效时钟时钟此时,触发器输出端q在有效时钟沿之后的相对长的时间段内在0和1之间振荡,而不是等于数据输入端d的值。 经过http://www.Sina.com/resolution time,q端稳定在0或1,但稳定在0或1是随机的,与输入没有必然关系。 )

3 .发生时,只要系统中有异步元件,亚稳态是不可避免的。 亚稳态主要发生在以下常用设计中。

3358 www.Sina.com/http://www.Sina.com/http://www.Sina.com/3.1在信号传送中的亚稳态同步系统中,输入信号总是与系统时钟同步,以满足寄存器的定时要求准稳定性问题通常发生在几个时钟域之间的信号传输和异步信号采集中。

其理由如下。

)在时钟域间进行信号传输时,由于源寄存器时钟和目标寄存器时钟相位偏移是未知的,所以源寄存器数据发行数据,数据随时有可能到达异步时钟域的目标寄存器

)在异步信号收集中,由于异步信号能够在任意时刻到达目标寄存器,所以也无法保证满足目标寄存器Tsu和Th要求;

准稳态现象可能在数据在目的寄存器Tsu-Th的时间窗口内发生改变时,即,不满足数据的建立时间或保持时间时发生。 如下图所示。

从图中可以看出,如果出现亚稳态后的Tco时间,则存在Tmet (决断时间)的振荡时间段,如果振荡结束并返回到稳定状态,则变为“0”或“1”,这是随机的。 因此,会影响后续电路的判断。

3.2复位电路的亚稳态数据传输中不满足触发器的Tsu和Th;

在复位电路设计中,复位信号基本上是异步的,一般的异步复位电路Verilog如下所述。

always @ (posedgeclkornegedgerst _ n ) begin if (! rst_n ) a=1’B0; else a=b; 总结end的电路图如下。

如下图所示,是复位电路的复位时序图。 如果异步复位信号的解除时间在Trecovery (恢复时间)和Tremoval (恢复时间)以内,则无论如何都会发生准稳态,输出在时钟沿的Tco后振荡,振荡时间为Tmet ),最终稳定为"0"或"1"

65http://www.Sina.com/(recovery time )是指异步控制信号,例如寄存器的异步清除和设置控制信号在“下一个时钟沿”到来之前失效的最小时间长度。 该时间的含义是,如果不能确保该最小恢复时间,即解除该异步控制信号过于接近“下一个时钟沿”(但是,在该时钟沿之前),而没有确保在寄存器中返回正常状态的足够的时间,则为“下一个时钟沿”

3358www.Sina.com/(removal )是指寄存器的异步清除和设置控制信号等异步控制信号在“有效时钟沿”之后变为无效的最小时间长度。 该时间的含义是,不能确保该去除时间,也就是说,如果该非同步控制信号的去除过于接近"有效时钟沿" (但是,在该时钟沿之后),则不能保证有效地屏蔽该"时钟沿",也就是说,该时间)

也就是说,如果想要使某个时钟沿发挥作用,则应该在“将时间还原”之前禁用异步控制信号,如果不想使某个时钟沿发挥作用,则应该在“去除时间”之后禁用控制信号。 如果你的控制信号介于这两种情况之间,那么时钟沿是否起作用,也就是说有可能不起作用

造成寄存器处于不确定的状态。而这些情况是应该避免的。所以恢复时间和去除时间是应该遵守的。

3.2.2 同步复位电路的亚稳态

在复位电路中,由于复位信号是异步的,因此,有些设计采用同步复位电路进行复位,并且绝大多数资料对于同步复位电路都认为不会发生亚稳态,其实不然,同步电路也会发生亚稳态,只是几率小于异步复位电路。

如下面verilog代码对同步复位电路的描述。

always @(posedge clk)begin if(!rst_n) a <= 1’b0; else a <= b;end

综合出硬件电路如下图所示。

在此,我们不讨论同步复位的消耗资源问题,只讨论同步复位的亚稳态产生情况。

当输入端Din为高电平,而且复位信号的撤销时间在clk的Tsu和Th内时候,亚稳态就随之产生了。如图3.5时序所示,当复位撤销时间在clk的Tsu和Th内,输入数据为“1”,通过和输入数据相与后的数据也在clk的Tsu和Th内,因此,势必会造成类似异步信号采集的亚稳态情况。

4. 亚稳态发生概率

亚稳态的发生概率与时钟频率无关!!!

由上面分析得知,系统亚稳态发生的都是由于clk的Tsu和Th不满足,又或者是复位信号的移除 和恢复时间不满足。常用FPGA器件的Tsu+Th约等于1ns,复位移除和恢复时间相加约等于1ns。

当异步信号不是一组数据,或者信号量较少,那就需要对异步信号进行同步处理,例如对一个异步脉冲信号进行采集,只要脉冲信号变化发生在时钟Tsu和Th窗口内,那就很可能会产生亚稳态,亚稳态产生的概率大概为:

概率 = (建立时间 + 保持时间)/ 采集时钟周期 (公式4-1)

由公式4-1可以看出,随着clk频率的增加,亚稳态发生的几率是增加的。

例如,为系统采用100M时钟对一个外部信号进行采集,采集时钟周期为10ns,那采集产生亚稳态的概率为:1ns/10ns = 10%

同理采用300M时钟对一个外部信号进行采集,那产生亚稳态的概率为:1ns/3.3ns = 30%
如果采用三相相位差为120°的时钟对一个外部信号进行采集,那产生亚稳态的概率接近90%
所以在异步信号采集过程中,要想减少亚稳态发生的概率:
(1) 降低系统工作时钟,增大系统周期,亚稳态概率就会减小;
(2) 采用工艺更好的FPGA,也就是Tsu和Th时间较小的FPGA器件;

5. 解决办法

有亚稳态产生,我们就要对亚稳态进行消除,常用对亚稳态消除有三种方式:
(1) 对异步信号进行同步处理;
(2) 采用FIFO对跨时钟域数据通信进行缓冲设计;
(3) 对复位电路采用异步复位、同步释放方式处理。

!!处理亚稳态的经典办法——双触发!!

设计中使用的任何寄存器都会指定一个建立和保持时间,在时钟上升沿前后的这个时间内输入数据被禁止发生任何变动。所有器件中的寄存器都要指定这个精确参数,就是为了防止数据信号两次变化发生的时间间隔太过靠近,从而导致其输出陷入亚稳态。

当需要在两个时钟域传输信号的时候,需要考虑一个重要的问题是:是否需要采样从一个时钟域传输到另一个时钟域的这个信号的每一个值?通过思考这个问题可以发现,在跨时钟边界存在跨时钟域传输数据允许丢失部分采样值和跨时钟域传输数据不允许丢失任何信号采样值两种情况,而且确认设计到底属于哪种情况则变得非常重要。

对于第一种情况来说,没有必要去采样每一个值,但是需要注意的是被采样的值必需要确保精确度;而在第二种情况中,一个跨时钟域信号必需要被正确识别,或者说在其允许发生改变之前必须被识别。这两种情况中,跨时钟域信号都需要被同步到其接收时钟域之中。

最常见的同步器就是使用两级寄存器,即使用寄存器打两拍的方式进行同步。所谓的同步器就是采样一个异步信号,采样输出能够同步到本地或采样时钟的模块。这种最简单也是使用最普遍的两级寄存的同步器如图所示。

当然,仍然有可能级联的第二个寄存器输出还会表现为非稳定状态,但是这种双寄存同步器已经可以解决大部分这类亚稳态问题。在设计这种同步器的时候应当注意遵循以下原则:

(1)级联的寄存器必须使用同一个采样时钟。
(2)发送端时钟域寄存器输出和接收端异步时钟域级联寄存器输入之间不能有任何其他组合逻辑。
(3)同步器中级联的寄存器中除了最后一个寄存器外所有的寄存器只能有一个扇出,即其只能驱动下一级寄存器的输入。

5.1 对于异步信号检测产生的亚稳态

使用异步信号进行使用的时候,好的设计都会对异步信号进行同步处理,同步一般采用多级D触发器级联处理,如下图所示,采用三级D触发器对异步信号进行同步处理。

这种模型大部分资料都说的是第一级寄存器产生亚稳态后,第二级寄存器稳定输出概率为90%,第三极寄存器稳定输出的概率为99%,如果亚稳态跟随电路一直传递下去,那就会另自我修护能力较弱的系统直接崩溃。接下来我们分析这种串扰的概率问题。
如下图所示为一个正常第一级寄存器发生了亚稳态,第二级、第三极寄存器消除亚稳态时序模型。

由上图可以看出,当第一个寄存器发生亚稳态后,经过Tmet的振荡稳定后,第二级寄存器能采集到一个稳定的值。但是为什么第二级寄存器还是可能会产生亚稳态呢?

由于振荡时间Tmet是受到很多因素影响的,所以Tmet时间又长有短,所以当Tmet时间长到大于一个采集周期后,那第二级寄存器就会采集到亚稳态。如下图所示。

由上图可知,第二级也是一个亚稳态,所以在这种情况下,亚稳态产生了串扰,从第一级寄存器传到了第二级寄存器,同样也可能从第二级寄存器串扰到第三级寄存器。这样会让设计逻辑判断出错,产生亚稳态传输,可能导致系统死机奔溃。

( 亚稳态震荡时间Tmet关系到后级寄存器的采集稳定问题,Tmet影响因素包括:器件的生产工艺、温度、环境以及寄存器采集到亚稳态离稳定态的时刻等。甚至某些特定条件,如干扰、辐射等都会造成Tmet增长。)

在异步通信或者跨时钟域通信过程中,最常用的就是对异步信号进行同步提取边沿处理。对一个异步信号进行提取上升沿通常采用程序清单 5.1所示。
程序清单 5.1 双极寄存器提取边沿

input sig_nsyn;wire sig_nsyn_p;reg[1:0] sig_nsyn_r;always @(posedge clk or negedge rst_n)begin if(!rst_n) sig_nsyn_r <= 2’d0; else sig_nsyn_r <= { sig_nsyn_r [0], sig_nsyn };end assign sig_nsyn_p = sig_nsyn_r[0] & ~sig_nsyn_r[1];

这种边沿提取方式对于一个稳定的系统是不合适的,例如:当第一级寄存器采集到亚稳态,那势必造成sig_nsyn_p输出亚稳态,这样就会对采用sig_nsyn_p的信号进行判断的电路造成影响,甚至判断出错误的值。

根据3.3.1小节的亚稳态产生概率,如果在100M时种下那第一级寄存器产生亚稳态的概率约为10%,随着系统采集频率升高,那产生亚稳态的概率也会随之上升。因此,在进行异步信号跨频提取边沿时候,一般采用多进行一级寄存器消除亚稳态,可能在系统稳定性要求高的情况下,采用更多级寄存器来消除亚稳态,如程序清单 5.2所示,即为采用4级寄存器消除亚稳态,相应的边沿信号产生的时间就晚了两个时钟周期。

程序清单 5.2 多级寄存器提取边沿信号

input sig_nsyn;wire sig_nsyn_p;reg[3:0] sig_nsyn_r;always @(posedge clk or negedge rst_n)begin if(!rst_n) sig_nsyn_r <= 2’d0; else sig_nsyn_r <= { sig_nsyn_r [2::0], sig_nsyn };end assign sig_nsyn_p = sig_nsyn_r[2] & ~sig_nsyn_r[3]; 5.2 对于跨时钟域信号传输产生的亚稳态

FIFO进行异步跨频数据处理: 当数据流从一个时钟域到另一个时钟域的时候,绝大多数情况下都采用FIFO来作为中间缓冲,采用双时钟对数据缓冲,就可以避免亚稳态的发生。

5.3 对于复位电路产生的亚稳态

异步复位,同步释放: 对于复位情况下的亚稳态,常常是由于恢复时间和移除时钟不满足造成的,因此,最常用的处理方式是采用异步复位、同步释放。常用电路模型如所示。采用第二级寄存器输出作为全局复位信号输出。
程序清单5.3 异步复位处理

wire sys_rst_n;reg [1:0] rst_r;always @(posedge clk or negedge rst_n)begin if(!rst_n) rst_r <= 2’d0; else rst_r <= {rst_r[0], 1’b1};endassign sys_rst_n = rst_r[1];

通过上面三种方式处理异步信号、异步数据、以及异步复位可有效的提高系统的稳定性。减少亚稳态的产生.

6. 危害

由于产生亚稳态后,寄存器Q端输出在稳定下来之前可能是毛刺、振荡、固定的某一电压值。在信号传输中产生亚稳态就会导致与其相连其他数字部件将其作出不同的判断,有的判断到“1”有的判断到“0”,有的也进入了亚稳态,数字部件就会逻辑混乱。在复位电路中产生亚稳态可能会导致复位失败。怎么降低亚稳态发生的概率成了FPGA设计需要重视的一个注意事项。

只要系统中有异步元件,亚稳态就是无法避免的,因此设计的电路首先要减少亚稳态导致错误的发生,其次要使系统对产生的错误不敏感。前者要用同步电路来实现,而后者根据不同的设计应用有不同的处理办法。左边为异步输入端,经过两级触发器同步,在右边的输出将是同步的,而且该输出基本不存在亚稳态。其原理是即使第一个触发器的输出端存在亚稳态,经过一个CLK周期后,第二个触发器D端的电平仍未稳定的概率非常小,因此第二个触发器Q端基本不会产生亚稳态。注意,这里说的是“基本”,也就是无法“根除”,那么如果第二个触发器Q出现了亚稳态会有什么后果呢?后果的严重程度是由你的设计决定的,如果系统对产生的错误不敏感,那么系统可能正常工作,或者经过短暂的异常之后可以恢复正常工作,例如设计异步FIFO时使用格雷码计数器当读写地址的指针就是处于这方面的考虑。如果设计上没有考虑如何降低系统对亚稳态的敏感程度,那么一旦出现亚稳态,系统可能就崩溃了。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。