亚稳态总结笔记

本文是看了几个博客写的相关内容后简单总结的,中间会给出相关链接。

一、亚稳态定义

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

二、亚稳态产生的原因以下部分来自本文

在FPGA系统中,如果在数据传送过程中触发器的Tsu、Th未被满足,或者在复位过程中复位信号的释放未被满足有效时钟沿的恢复时间,则触发器输出端q在有效时钟沿以后,q端子被数据这个时间称为“决定时间”。 经过resolution time,q端稳定在0或1,但稳定在0或1是随机的,与输入没有必然关系。

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

三、亚稳态发生场合

只要系统中有异步元件,亚稳态就不可避免。 亚稳态主要发生在异步信号检测跨时钟域信号传输复位电路等常用设计中。

四、亚稳态产生的危害

准稳定状态发生后,寄存器q侧的输出在稳定之前,有可能是毛刺、振动、恒定的某一个电压值。 如果在信号传输过程中出现亚稳态,则与其连接的其他数字部件对其进行不同的判断,有的判断为“1”,有的判断为“0”,有的进入亚稳态,数字部件在逻辑上混乱。 如果复位电路发生准稳定状态,则有可能复位失败。 如何降低亚稳态发生的概率已成为FPGA设计中应重视的注意事项之一。

五、发生亚稳态的各个场景分析

1,异步信号传输中,即时钟域间传输

首先,说明在同步系统中,由于输入信号始终与系统时钟同步,能够满足寄存器的定时要求,所以不会发生亚稳态。 准稳定性问题通常发生在几个时钟域之间的信号传输和异步信号采集中。 在时钟域间进行信号传输时,由于源寄存器时钟和目标寄存器时钟相位偏移是未知的,所以源寄存器数据发行数据,数据随时有可能到达异步时钟域的目标寄存器以下部分来自本文

上图显示了两个时钟场之间的简单信号传播。 从慢时钟域到块时钟域的过程。

在上图所示的时序图中,可以看到时钟沿之间的时钟间隔为dC。 在这种情况下,数据传播可以满足高速时钟域建立时间和保持时间的要求。

如上图所示,在这种相位关系的情况下,高速时钟沿难以满足建立时间的要求。 由于异步时钟的不确定性,异步逻辑容易出现亚稳态。 信号在不同时钟场之间传输,并从低速时钟场向块时钟场传输,如模型所示。 由于异步时钟,在快时钟域中慢时钟是不可预测的。 如下图所示。 ()我重复第二种情况,但似乎更清楚。 )

在第二个触发器的Dout输出端产生高电平和低电平之间的不稳定状态(亚稳定状态)。 该实例传输信号是xfdxn信号,对高速时钟区域的影响一般会产生捕获数据不正确、寄存器不能正常动作、异步复位引起的问题。 多位数据(通常在数据收集中用作数据总线)会导致数据收集错误。

对于这种情况,应经常考虑FIFO处理,相关知识要亲自深入了解。

http://www.Sina.com/. http://www.Sina.com /

http://www.Sina.com/. http://www.Sina.com /

重置主要有异步重置和同步重置,更多相关知识在这篇博客文章中有详细介绍

在介绍之前简要说明重置恢复时间和清除时间的含义(参见博文: https://blog.csdn.net/GTK nd/article/details/52792141 ) )。

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

*擦除时间(Removal )是指异步控制信号(寄存器的异步清除和设置控制信号等)在“有效时钟沿”之后变为无效的最小时间长度。 该时间的意思是,如果不能确保该除去时间,也就是该异步控制

信号的解除与“有效时钟沿”离得太近(但在这个时钟沿之后),那么就不能保证有效地屏蔽这个“时钟沿”,也就是说这个“时钟沿”可能会起作用。

换句话来说,如果你想让某个时钟沿起作用,那么你就应该在“恢复时间”之前是异步控制信号变无效,如果你想让某个时钟沿不起作用,那么你就应该在“去除时间”过后使控制信号变无效。如果你的控制信号在这两种情况之间,那么就没法确定时钟沿是否起作用或不起作用了,也就是说可能会造成寄存器处于不确定的状态。而这些情况是应该避免的。所以恢复时间和去除时间是应该遵守的。

(1)异步复位电路以下部分内容来自该文章
在复位电路设计中,复位信号基本都是异步的,常用异步复位电路Verilog描述如下:
always @(posedge clk or negedge rst_n)begin
if(!rst_n)
a <= 1’b0;
else
a <= b;
end
综合出来复位电路模型如下图 所示
如下图所示,为异步复位电路复位时序图。如果异步复位信号的撤销时间在Trecovery(恢复时间)和Tremoval(移除时间)之内,那势必造成亚稳态的产生,输出在时钟边沿的Tco后会产生振荡,振荡时间为Tmet(决断时间),最终稳定到“0”或者“1”,就会可能造成复位失败。
(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内,因此,势必会造成类似异步信号采集的亚稳态情况。
对于复位情况中出现的亚稳态可以考虑异步复位,同步释放来避免。
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};
end
assign sys_rst_n = rst_r[1];
六、处理亚稳态的经典办法——双触发(xfdxn、跨时钟域处理)
当需要在两个时钟域传输信号的时候,需要考虑一个重要的问题是:是否需要采样从一个时钟域传输到另一个时钟域的这个信号的每一个值?通过思考这个问题可以发现,在跨时钟边界存在跨时钟域传输数据允许丢失部分采样值和跨时钟域传输数据不允许丢失任何信号采样值两种情况,而且确认设计到底属于哪种情况则变得非常重要。
对于第一种情况来说,没有必要去采样每一个值,但是需要注意的是被采样的值必需要确保精确度;而在第二种情况中,一个跨时钟域信号必需要被正确识别,或者说在其允许发生改变之前必须被识别。这两种情况中,跨时钟域信号都需要被同步到其接收时钟域之中。
常见的同步器就是使用两级寄存器,即使用寄存器打两拍的方式进行同步。所谓的同步器就是采样一个异步信号,采样输出能够同步到本地或采样时钟的模块。这种最简单也是使用最普遍的两级寄存的同步器如图所示。

当然,仍然有可能级联的第二个寄存器输出还会表现为非稳定状态,但是这种双寄存同步器已经可以解决大部分这类亚稳态问题。在设计这种同步器的时候应当注意遵循以下原则:
(1)级联的寄存器必须使用同一个采样时钟。
(2)发送端时钟域寄存器输出和接收端异步时钟域级联寄存器输入之间不能有任何其他组合逻辑。
(3)同步器中级联的寄存器中除了最后一个寄存器外所有的寄存器只能有一个扇出,即其只能驱动下一级寄存器的输入。
使用同步电路以后,亚稳态仍然有发生的可能,与此相连的是MTBF(Mean Time Between Failure),亚稳态的发生概率与时钟频率无关,但是MTBF与时钟有密切关系。 有文章提供了一个例子,某一系统在20MHz时钟下工作时,MTBF约为50年,但是时钟频率提高到40MHz时,MTBF只有1分钟!可见降低时钟频率可以大大减小亚稳态导致系统错误的出现,其原因在于,提供较长的resolution time可减小亚稳态传递到下一级的机会,提高系统的MTBF。
七、一般解决方法
1 降低系统时钟
2.用反应更快的FF
3.引入同步机制,防止亚稳态传播
4.改善时钟质量,用边沿变化快速的时钟信号
关键是器件使用比较好的工艺和时钟周期的裕量要大。