首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用双寄存器方法解决亚稳态问题

用双寄存器方法解决亚稳态问题
EN

Stack Overflow用户
提问于 2016-11-28 14:05:17
回答 1查看 1.8K关注 0票数 3

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

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

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

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-28 15:05:26

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

然而,这种方法从来没有打算解决亚稳态,而是试图降低一个亚稳态值进入你的电路的可能性。所谓的这里 MTBF (平均故障间隔时间)。为了减少MTBF,您甚至可以链接更多的2个寄存器。

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

这种振荡将使你的电路切换,然后使用大量的能量为零,因为每次过渡消耗能量。因此,使用双寄存器进行时钟域交叉是非常重要的.

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

简单的例子:

  1. 将数据设置为总线(双寄存器的输入)
  2. 等待1(或更多)时钟周期,以确保数据在另一侧建立良好。
  3. 发送请求信号(双寄存器的输入)
  4. 最坏的情况:请求信号是亚稳态的,稳定后保持在0。下一个时钟周期将是1,因为至少一个时钟周期已经设置为1。最好的情况:下一个周期,目标将接受数据
  5. 数据是稳定的,请求是稳定的,在1 ->时可以消耗数据。向源发送确认。
  6. 确认到达(在发生亚稳态的情况下在双寄存器上)。如果是亚稳态,它可能需要更多的时钟周期才能到达。
  7. 请求落空。
  8. 另一个数据可以通过总线发送。

这个协议被称为四阶段协议.您可以在web上找到很多关于它的文档,因为它是异步设计的经典协议。

这是相当简单的理解和实施。不过,请记住,它将在可能非常重要的区域产生开销。

希望能帮上忙。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40846222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档