什么是亚稳?


15

从维基百科的文章“ 电子中的亚稳态”

电子学中的亚稳定性是数字电子系统在不稳定的平衡或亚稳定状态下持续无限制时间的能力。在亚稳态下,电路可能无法在适当的电路操作所需的时间内稳定到稳定的“ 0”或“ 1”逻辑电平。结果,该电路可能以不可预测的方式工作,并可能导致系统故障。

这似乎是一个很好的定义,但是在应用程序中这意味着什么呢?

从电子设计人员的角度来看,什么时候可能发生这种情况?这种故障应该在哪里关注?

有没有更务实的或适用的定义-更具体的术语?


2
莱斯利·兰普特(Leslie Lamport)(他是$ \ LaTeX $的成名人物)在本文中对亚稳性进行了很好的描述:research.microsoft.com/users/lamport/pubs/buridan.pdf
markrages 2011年

@markrages辉煌。掉落的猫和黄油吐司也可能发生这种情况。
生锈的

Answers:


15

快速解答:如果您违反了触发器输入的建立和保持时间,那么输出将在一定时间内无法预测。这种不可预测的输出称为亚稳态(或亚稳定性)。

长答案:当输出不可预测时,我的意思是它不可预测。它可能很高,也可能很低,可能介于两者之间,也可能振荡。在此亚稳周期之后,输出将为高电平或低电平,但是直到发生这种情况,我们才知道它会走哪条路。

但是,不可预测的时间是可以预测的。有两个主要因素决定亚稳周期的长度:触发器的速度以及获得时序的“接近边缘”程度。

尽管具有长时间的可能性非零,但大多数亚稳态时间都非常短。从理论上讲,您可能会有几秒钟的亚稳态时间,尽管这种情况发生的几率非常罕见。随着触发器速度的增加,平均亚稳态时间会减少-所有其他条件都相同。

相对于时钟沿,触发器中有一个“虚构”的时间,您最容易受到亚稳性问题的影响。确切的说,这取决于许多因素,例如温度,电压,过程,月相,动物的牺牲以及您所属的政党。无论何时,您的数据输入边沿到该时间越近,亚稳态时间就越长。

处理亚稳定性的最佳方法是使所有逻辑同步,而不违反任何建立和保持时间。当然,对于任何复杂的电路,这都是很难甚至不可能的。因此,我们要做的是尝试限制可能会引起亚稳性的地方,然后再处理这些地方。

正常的方法是将数据“加倍计时”。意思是,两个D触发器与第一个的输出串联,馈入第二个的输入。希望是,如果第一个触发器变为亚稳态,那么亚稳态周期将超过第二个触发器的建立/保持时间。在实践中,这很好。在超临界应用中,可能会发生“三重计时”。


3
对所处动物种类有任何依赖性吗?
生锈

11

亚稳态类似于不稳定的平衡。不稳定平衡的一个常见例子是倒立摆。如果您可以在垂直位置平衡摆,那就是稳定状态。但是,如果有任何东西将操纵杆推到任一侧(例如,气流或地面振动),则摆锤将无法恢复到垂直位置,而是会掉落。与常规的摆锤形成对比,如果将其推到一侧,则最终会回到垂直位置。

电气系统使用稳定的平衡来创建存储元素。不稳定的均衡不会构成良好的存储元素(因为它们很容易失去状态),但通常以寄生状态存在。

常见的数字存储元件是一对交叉耦合的逆变器:

两个逆变器成环连接,输出至输入

存储元件具有两个稳定状态,一个处于稳定状态,其中左侧的节点处于电源电压,右侧的节点处于接地,而另一个处于相反的状态。还存在不稳定状态,其中每个节点处于某个中间电压。

为了更好地了解不稳定状态是如何产生的,请调用变频器的传递函数。传递函数图显示了给定输入电压下逆变器的输出电压。

变频器传递功能

逆变器是非线性的;获得非线性电路近似解的一种简单方法是绘制电路特性。曲线的交点是解,或者换句话说,是电路的所有组件的电气特性均得到满足的点。通常,这是通过iv图完成的,如Wikipedia上的二极管示例所示。但是,对于逆变器,我们将通过vv图进行处理。在绘图上叠加第二个逆变器传递函数(交换了轴,因为第二个逆变器向后移动:

背对背逆变器的叠加传递函数

绘图有三个交点:一个在(0,Vs),一个在(Vs,0)和一个在(Vs / 2,Vs / 2)。(Vs / 2,Vs / 2)状态是亚稳态的。在任一节点发生微小扰动后,电路几乎总是会稳定在其中一个稳定状态,而不是返回至(Vs / 2,Vs / 2)。

向双反相器存储元件写入值的方法是使用比反相器更强的驱动器将节点之一强制为所需值。一种常见的实现方法是使用传输晶体管:

带传输晶体管的交叉耦合逆变器

如果将传输晶体管的栅极连接到时钟,则会有一个D锁存器(我省略了输出结构)。当时钟为高电平时,启用通过晶体管,锁存器将变为透明-输入直接传递至输出。当时钟为低电平时,锁存器保持先前的值。在锁存器采样的时刻出现亚稳态。如果在锁存器采样时输入是稳定的高电压或低电压,则它将正常工作。但是,如果在锁存器采样时输入处于Vs / 2点附近,则锁存器有可能最终处于亚稳态(Vs / 2,Vs / 2)状态。一旦处于亚稳态,它就可以无限期地停留在这里(假设闩锁不再被计时),但是由于它是不稳定的平衡,通常会相对较快地发生某种事情,将其从亚稳态中剔除。

何时需要担心亚稳态

如果您的存储元件即将变为亚稳态,那么您至少会损失一些下游逻辑的时序预算。在亚稳状态解析之前,该逻辑无法执行所需的评估。在最坏的情况下,亚稳状态会通过逻辑保持或传播,并且下游存储元素也会变为亚稳态,或者多个相关的存储元素捕获不一致的值。

正确设计和运行的同步逻辑不会出现亚稳性问题。时钟周期长于逻辑电路的评估时间,所有触发器输入均在下一个时钟沿稳定(满足设置要求),并且它们均加载有效值。

涉及亚稳性的一些常见情况是:

  • 逻辑采样一个外部输入,例如前面板上的一个开关,或随时可能转换的监控电路的输出(欠压,过温)。
  • 使用不具有同步关系的多个时钟的逻辑。这通常发生在具有特定时钟要求的I / O接口上,但是当芯片的不同部分具有不同的性能要求时也会在内部发生。例如,并非3 GHz CPU中的所有逻辑实际上都在3 GHz下运行。(但是,CPU并不是一个很好的例子,因为CPU中的许多时钟都是彼此的同步倍数。)

通常是一个很好的答案,但要提到的另一件事是,由于传播延迟,没有单一的亚稳态,而是整个亚稳态,并且没有确定亚稳态的确定方法。可以设计一种具有三态输出(高/低/可导通)的电路,并进行安排,以使如果输出最终变为低,则永远不会报告“高”,反之亦然,但不能保证输出不会在“高”和“稳定”(最终为“高”)之间或“低”和“稳定”(最终为“低”)之间反弹。
超级猫

+1这是好东西,但在阅读@David Kessner的答案后更有意义。+2对于图形。
生锈的

3

亚稳信号是在任意时间长度内以任意模式任意出现高电平或低电平的信号。如果信号直接或间接馈入多个门,则这些门中的一些可能会“看到”它为高电平,而另一些则看到它为低电平。讨厌的东西。

对于具有单个时钟的系统,通常可以通过两个锁存器来处理亚稳态信号。门控时钟时会遇到一个棘手的问题。有很多电路(尤其是使用RS锁存器)在无法实现亚稳性的情况下会很好地工作,但是如果发生亚稳性,则可能最终生成欠幅时钟脉冲(进而会导致下游的亚稳性)。

顺便提一句,关于亚稳性,还有一个重要的要点:锁存器的传播时间表明,如果满足采样和保持时间,则输出将稳定在新值。如果不满足建立和保持时间,则在锁存器收到有效时钟事件之前,无法保证输出是否或何时切换。即使输出“似乎”干净地切换,也无法保证它不会自发地切换回去。


2

典型的情况是,如果您违反了同步锁存器的建立/保持时间,这是在设计FPGA时需要注意的一个问题(我确信Xilinx和Altera会在此做一些说明)。如果信号可以在任意随机时间出现,则永远无法确定在对其计时时,它在建立/保持时间窗口规格内没有变化。可能发生的情况是,锁存器输出不会在时钟沿之后的指定时间变高或变低,而是会在稳定到稳定状态之前抖动一会儿。防止这种情况的正常方法是使用2级锁存器,该锁存器可以使用相同的时钟,也可以使用延迟时钟或异相时钟,具体取决于延迟要求和亚稳概率之间的平衡。这允许第一锁存时间在第二锁存器锁存稳定状态之前稳定。偶然,这是微控制器必须在内部处理的事情,因为外部I / O信号通常与CPU时钟异步,因此I / O端口通常具有双重锁存结构以避免出现问题,并且软件无需担心。一个模糊的回忆回顾了很多年前关于6502的问题,其中总线读取的数据超出了建立/保持时间规格,可能会导致分支跳转到既不是分支目标也不是下一条指令的地址,例如某些内部地址。国家变得亚稳。该视频显示了一些示例:一个模糊的回忆回顾了很多年前关于6502的问题,其中总线读取的数据超出了建立/保持时间规格,可能会导致分支跳转到既不是分支目标也不是下一条指令的地址,例如某些内部地址。国家变得亚稳。该视频显示了一些示例:一个模糊的回忆回顾了很多年前关于6502的问题,其中总线读取的数据超出了建立/保持时间规格,可能会导致分支跳转到既不是分支目标也不是下一条指令的地址,例如某些内部地址。国家变得亚稳。该视频显示了一些示例:http://www.youtube.com/watch?v=tKHCwjWMMyg

打个比方,就是如果您向某人扔一个球-他们大多是接住球或将球丢下/遗失,因此在投掷给定时间后,他们会握住球或不握球。但是偶尔它们会在捕获或丢弃之前变弱一段时间,因此它们的状态既不会保持也不会丢失-这是亚稳态!


我仍然喜欢基于6502的系统。很高兴知道总线数据的亚稳性问题的一些细节。我当然可以设想,如果累加器持有$ FF且读取的值是$ 00或$ 01,则累加器最终可能具有任何可能的值。但是,在可以进行任何分支之前,我希望还要经过两个周期,在此期间,标志将重新锁存两次。我无法想象亚稳态会持续这么长时间。
超级猫

我大概在20年前就曾听到过第二手或第三手的声音,但这确实来自绝对知道他们在做什么的人-这与BBC Micro的6502第二个处理器上的Tube接口以及状态读取有关标记,并且曾经是一次“ na-blue-moon”的出现,但由于其频繁出现而推迟了产品发布。不一定需要持续2个周期,因为信号可能在流水线的各个阶段内部被锁存。我认为它也是当时最快的6502变体-3MHz 65C02 ISTR。
mikeselectricstuff 2011年

有趣。[顺便说一句,有没有办法使用标点符号而不用StackExchange修改它?]在“ ADC 0xD000”的正常行为中,地址将在第四个周期的阶段1输出,并且数据将在阶段结束时锁存该周期的2。数据将在下一个周期的第1阶段馈入ALU(这将是下一条指令的操作码提取)。之后的周期将是操作数提取。如果那时候事情仍然是亚稳态的,那么系统可能会崩溃,但这似乎不太可能,因为动态寄存器将被重新锁两次。
supercat

我不想说数据总线的亚稳态不可能影响6502,因为我知道还有其他一些我无法解释的怪异行为。例如,数据总线在时钟的第2阶段被锁存,并在随后的第1阶段起作用。因此,只要在最后阶段保持稳定,在第2阶段是否改变数据总线就无关紧要。但是,有一些未记录的指令,其行为在周期的早期受到数据总线内容的影响(可在C64和Apple等机器上在阶段1提取视频的机器上演示)。我不知道该怎么办……
超级猫

...这些指令的行为实际上已受到早期数据总线行为的影响,但我怀疑这是某种奇怪的竞争状况。IIRC是操作码之一,它与LDA#imm,LDX #imm和TAX的解码模式匹配,因此ALU的输出被映射回其输入。奇怪的。
supercat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.