【发布时间】:2017-04-12 06:55:40
【问题描述】:
为了解决Verilog中不同时钟域引起的亚稳态,采用双寄存器方法。
但据我所知,亚稳态的最终输出是不确定的。输出独立于输入。
那么,我的问题是如何使用双寄存器方法保证输出的正确性?
谢谢。
【问题讨论】:
-
这个问题可能更适合electronics.stackexchange.com
-
好的,谢谢。我可以再发一次问题吗?
为了解决Verilog中不同时钟域引起的亚稳态,采用双寄存器方法。
但据我所知,亚稳态的最终输出是不确定的。输出独立于输入。
那么,我的问题是如何使用双寄存器方法保证输出的正确性?
谢谢。
【问题讨论】:
你不能完全确定你避免了亚稳态。 正如您所提到的,亚稳态触发器的输出是不可预测的,因此即使使用“双寄存器”方法,当您具有亚稳态时,您也可能会传播错误的值。
然而,此方法从未打算解决亚稳态,而是试图降低亚稳态值进入电路的可能性。所谓的here MTBF(平均故障间隔时间)。要减少 MTBF,您甚至可以链接 2 个以上的寄存器。
即使这不能解决一个值的不可预测性,使用这些双寄存器也很有趣,因为当一个值是亚稳态时,它会一直振荡直到稳定到 0 或 1。
这种振荡会使您的电路发生切换,然后由于每次转换都会消耗能量,因此会消耗大量能量。因此,使用双寄存器进行时钟域交叉很重要。
为了确保您的数据有效,您可以在两个时钟域之间使用请求确认机制。
快速示例:
此协议称为 4 阶段协议。你可以在网上找到很多关于它的文档,因为它是异步设计的经典协议。
这很容易理解和实现。但请记住,它会产生非常重要的区域开销。
希望对你有帮助。
【讨论】: