亚稳态总结笔记

亚稳态总结笔记
本文是查看过几篇博主写的相关内容后进行一个简单的总结,中间会给出相关链接。
一、亚稳态定义(百科)
亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。
二、亚稳态产生的原因以下部分内容来自该篇文章
在FPGA系统中,如果数据传输中不满足触发器的Tsu和Th不满足,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端在0和1之间处于振荡状态,而不是等于数据输入端D的值。这段时间称为决断时间(resolution time)。经过resolution time之后Q端将稳定到0或1上,但是稳定到0或者1,是随机的,与输入没有必然的关系。
亚稳态总结笔记_第1张图片
由图可知,当产生亚稳态后Tco时间后会有Tmet(决断时间)的振荡时间段,当振荡结束回到稳定状态时为“0”或者“1”,这个是随机的。因此,会对后续电路判断造成影响。
三、亚稳态发生场合
只要系统中有异步元件,亚稳态就是无法避免的,亚稳态主要发生在异步信号检测跨时钟域信号传输以及复位电路等常用设计中。
四、亚稳态产生的危害
由于产生亚稳态后,寄存器Q端输出在稳定下来之前可能是毛刺、振荡、固定的某一电压值。在信号传输中产生亚稳态就会导致与其相连其他数字部件将其作出不同的判断,有的判断到“1”有的判断到“0”,有的也进入了亚稳态,数字部件就会逻辑混乱。在复位电路中产生亚稳态可能会导致复位失败。怎么降低亚稳态发生的概率成了FPGA设计需要重视的一个注意事项。
五、发生亚稳态的各个场景分析
1、异步信号传输中,即跨时钟域传输
首先说明在同步系统中,输入信号总是系统时钟同步,能够达到寄存器的时序要求,所以亚稳态不会发生。亚稳态问题通常发生在一些跨时钟域信号传输以及异步信号采集上。在跨时钟域信号传输时,由于源寄存器时钟和目的寄存器时钟相移未知,所以源寄存器数据发出数据,数据可能在任何时间到达异步时钟域的目的寄存器,所以无法保证满足目的寄存器Tsu和Th的要求。以下部分内容来自该文章
亚稳态总结笔记_第2张图片
上图所示是简单的在二个时钟域之间的信号传播。由慢时钟域到块时钟域的过程。
亚稳态总结笔记_第3张图片
上图所示的时序图中可以看到 时钟沿之间的时钟间隔为dC。在这种情况之下可以发现数据的传播能够满足快时钟域的建立时间以及保持时间的要求。
亚稳态总结笔记_第4张图片
上图所示在此种相位关系的情况下,快时钟沿很难满足建立时间的要求。 由于异步时钟的不确定性所以造成在异步逻辑下很容易出现亚稳态。信号在不同时钟域之间传递,模型所示由慢时钟域传递到块时钟域。由于异步时钟,所以对于快时钟域而言慢时钟具有不可预测性,如下图所示: (重复第二种情况,但貌似更清晰。)
亚稳态总结笔记_第5张图片
造成在第二个触发器的Dout输出端输出高电平与低电平之间的一个不稳定状态(亚稳态)。该实例传递信号为单比特信号,对快时钟域的影响一般在捕获数据不正确、寄存器无法正常操作以及也会出现异步复位产生的那些问题。对于多比特数据而言(一般在数据采集,用作数据总线),造成采集数据错误。
对于此种情况经常考虑采用FIFO进行处理,相关知识自行深入了解。

2.在异步信号采集当中,由于异步信号可以在任何时间点到达目的寄存器,因此也无法满足目的寄存器的setup time和hold time 时间。

3.复位电路中的亚稳态

复位主要有异步复位和同步复位,更多相关知识在该博主文章详细解释
在介绍之前先简要说明复位的恢复时间和去除时间含义(参考博文:https://blog.csdn.net/gtkknd/article/details/52792141)
*恢复时间(Recovery Time)*是指异步控制信号(如寄存器的异步清除和置位控制信号)在“下个时钟沿”来临之前变无效的最小时间长度。这个时间的意义是,如果保证不了这个最小恢复时间,也就是说这个异步控制信号的解除与“下个时钟沿”离得太近(但在这个时钟沿之前),没有给寄存器留有足够时间来恢复至正常状态,那么就不能保证“下个时钟沿”能正常作用,也就是说这个“时钟沿”可能会失效。

*去除时间(Removal)*是指异步控制信号(如寄存器的异步清除和置位控制信号)在“有效时钟沿”之后变无效的最小时间长度。这个时间的意义是,如果保证不了这个去除时间,也就是说这个异步控制信号的解除与“有效时钟沿”离得太近(但在这个时钟沿之后),那么就不能保证有效地屏蔽这个“时钟沿”,也就是说这个“时钟沿”可能会起作用。

换句话来说,如果你想让某个时钟沿起作用,那么你就应该在“恢复时间”之前是异步控制信号变无效,如果你想让某个时钟沿不起作用,那么你就应该在“去除时间”过后使控制信号变无效。如果你的控制信号在这两种情况之间,那么就没法确定时钟沿是否起作用或不起作用了,也就是说可能会造成寄存器处于不确定的状态。而这些情况是应该避免的。所以恢复时间和去除时间是应该遵守的。
亚稳态总结笔记_第6张图片
(1)异步复位电路以下部分内容来自该文章
在复位电路设计中,复位信号基本都是异步的,常用异步复位电路Verilog描述如下:
always @(posedge clk or negedge rst_n)begin
if(!rst_n)
a <= 1’b0;
else
a <= b;
end
综合出来复位电路模型如下图 所示亚稳态总结笔记_第7张图片
如下图所示,为异步复位电路复位时序图。如果异步复位信号的撤销时间在Trecovery(恢复时间)和Tremoval(移除时间)之内,那势必造成亚稳态的产生,输出在时钟边沿的Tco后会产生振荡,振荡时间为Tmet(决断时间),最终稳定到“0”或者“1”,就会可能造成复位失败。
亚稳态总结笔记_第8张图片(2)同步复位
在复位电路中,由于复位信号是异步的,因此,有些设计采用同步复位电路进行复位,并且绝大多数资料对于同步复位电路都认为不会发生亚稳态,其实不然,同步电路也会发生亚稳态,只是几率小于异步复位电路。
如下面verilog代码对同步复位电路的描述。
always @(posedge clk)begin
if(!rst_n)
a <= 1’b0;
else
a <= b;
end
亚稳态总结笔记_第9张图片
当输入端Din为高电平,而且复位信号的撤销时间在clk的Tsu和Th内时候,亚稳态就随之产生了。如图3.5时序所示,当复位撤销时间在clk的Tsu和Th内,输入数据为“1”,通过和输入数据相与后的数据也在clk的Tsu和Th内,因此,势必会造成类似异步信号采集的亚稳态情况。
亚稳态总结笔记_第10张图片对于复位情况中出现的亚稳态可以考虑异步复位,同步释放来避免。
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];
六、处理亚稳态的经典办法——双触发(单比特、跨时钟域处理)
当需要在两个时钟域传输信号的时候,需要考虑一个重要的问题是:是否需要采样从一个时钟域传输到另一个时钟域的这个信号的每一个值?通过思考这个问题可以发现,在跨时钟边界存在跨时钟域传输数据允许丢失部分采样值和跨时钟域传输数据不允许丢失任何信号采样值两种情况,而且确认设计到底属于哪种情况则变得非常重要。
对于第一种情况来说,没有必要去采样每一个值,但是需要注意的是被采样的值必需要确保精确度;而在第二种情况中,一个跨时钟域信号必需要被正确识别,或者说在其允许发生改变之前必须被识别。这两种情况中,跨时钟域信号都需要被同步到其接收时钟域之中。
最常见的同步器就是使用两级寄存器,即使用寄存器打两拍的方式进行同步。所谓的同步器就是采样一个异步信号,采样输出能够同步到本地或采样时钟的模块。这种最简单也是使用最普遍的两级寄存的同步器如图所示。
亚稳态总结笔记_第11张图片
当然,仍然有可能级联的第二个寄存器输出还会表现为非稳定状态,但是这种双寄存同步器已经可以解决大部分这类亚稳态问题。在设计这种同步器的时候应当注意遵循以下原则:
(1)级联的寄存器必须使用同一个采样时钟。
(2)发送端时钟域寄存器输出和接收端异步时钟域级联寄存器输入之间不能有任何其他组合逻辑。
(3)同步器中级联的寄存器中除了最后一个寄存器外所有的寄存器只能有一个扇出,即其只能驱动下一级寄存器的输入。
使用同步电路以后,亚稳态仍然有发生的可能,与此相连的是MTBF(Mean Time Between Failure),亚稳态的发生概率与时钟频率无关,但是MTBF与时钟有密切关系。 有文章提供了一个例子,某一系统在20MHz时钟下工作时,MTBF约为50年,但是时钟频率提高到40MHz时,MTBF只有1分钟!可见降低时钟频率可以大大减小亚稳态导致系统错误的出现,其原因在于,提供较长的resolution time可减小亚稳态传递到下一级的机会,提高系统的MTBF。
七、一般解决方法
1 降低系统时钟
2.用反应更快的FF
3.引入同步机制,防止亚稳态传播
4.改善时钟质量,用边沿变化快速的时钟信号
关键是器件使用比较好的工艺和时钟周期的裕量要大。

你可能感兴趣的:(亚稳态总结笔记)