为了解决Verilog中由不同时钟域引起的亚稳态问题,使用了双寄存器方法。使用双寄存器方法解决亚稳态性
但据我所知,亚稳态的最终输出是不确定的。输出与输入无关。
所以,我的问题是如何使用双寄存器方法,以保证输出的正确性?
谢谢。
为了解决Verilog中由不同时钟域引起的亚稳态问题,使用了双寄存器方法。使用双寄存器方法解决亚稳态性
但据我所知,亚稳态的最终输出是不确定的。输出与输入无关。
所以,我的问题是如何使用双寄存器方法,以保证输出的正确性?
谢谢。
你不能完全确定你是否避免了亚稳态。 正如你所提到的,亚稳触发器的输出是不可预测的,所以即使采用“双寄存器”方法,当你有亚稳态时,你也可能传播错误的值。
这种方法却从来没有打算解决亚稳态,但试图以减少亚值进入你的电路的概率。所谓的here MTBF(平均无故障时间)。为了减少MTBF,你甚至可以链接更多的2个寄存器。
即使这没有解决的一个值的非预测的烦躁,有趣的是,使用这些双寄存器,因为当一个值是亚稳态,它会振荡,直到它稳定为0或1
该振荡将使您的电路切换,然后使用大量的能量,因为每个转换都消耗能量。由于这个原因,使用双寄存器进行时钟域交叉非常重要。
为了确保您的数据是有效的,虽然,你可以使用两个时钟域之间的请求 - 应答机制。
快速例如:
该协议被称为四相协议来发送。您可以在网上找到大量有关它的文档,因为它是异步设计的经典协议。
这是很容易理解和实施。请记住,它会产生一个非常重要的开销。
希望它有帮助。
谢谢Krouitch,但我仍然有些困惑。所以,在第4步之后,我只能保证请求信号稳定在1,但是如何保证数据也是稳定的?谢谢。 –
如果您在发送请求前至少发送了一个时钟周期的数据,那么数据必须稳定。如果不是这意味着路径对于您选择的时钟周期来说太长。 这里是一篇文章,说明我的意思:http://www.eetimes.com/document.asp?doc_id=1276114 – Krouitch
这个问题可能更适合http://electronics.stackexchange.com/ –
好的,谢谢。我可以再次发布这个问题吗? –