用双重寄存器方法求解亚稳性

时间:2016-11-28 14:05:17

标签: vhdl verilog fpga clock

为了解决Verilog中不同时钟域引起的亚稳态问题,使用了双寄存器方法。

但据我所知,亚稳态的最终输出尚未确定。输出与输入无关。

那么,我的问题是如何使用双重寄存器方法保证输出的正确性?

感谢。

1 个答案:

答案 0 :(得分:2)

您不能完全确定您是否避免了亚稳态。 正如您所提到的,亚稳态触发器的输出是不可预测的,因此即使使用“双寄存器”,您也可能在具有亚稳态时传播错误的值。方法

然而,这种方法从未打算解决亚稳态问题,但试图降低亚稳态值进入电路的可能性。什么叫automatic singleton expansion MTBF(平均故障间隔时间)。要减少MTBF,您甚至可以链接更多的2个寄存器。

即使这不能解决值的不可预测性,使用这些双重寄存器也很有意思,因为当一个值为亚稳态时,它会振荡直到它稳定为0或1。

这种振荡将使您的电路切换,然后在每次转换消耗能量时都不会消耗大量能量。因此,使用双寄存器进行时钟域交叉非常重要。

为了确保您的数据有效,您可以在两个时钟域之间使用请求 - 确认机制。

快速举例:

  1. 将数据设置为总线(双寄存器的输入)
  2. 等待1个(或更多)时钟周期以确保数据在另一侧已经建立
  3. 发送请求信号(输入双重寄存器)
  4. 最坏情况:请求信号是亚稳态的,一旦稳定就会保持在0。下一个时钟周期将为1,因为它已经设置为1至少1个时钟周期。最佳情况:下一个周期目的地将接受数据
  5. 数据稳定,请求稳定且在1 - >可以消耗数据。向来源发送确认。
  6. 确认到达(如果是亚稳态,则在双重寄存器上)。如果亚稳态,可能需要更多的时钟周期才能到达。
  7. 请求失败。
  8. 可以通过总线发送另一个数据
  9. 该协议称为4阶段协议。你可以在网上找到很多关于它的文档,因为它是异步设计的经典协议。

    理解和实施起来非常简单。请记住,它会产生一个非常重要的区域开销。

    希望它有所帮助。