我正在尝试在不同时钟域的 2 个模块之间同步一束信号。我可以通过在它们之间手动实例化 AsyncQueue 来做到这一点,并且还可以为每一侧连接时钟和重置。似乎有一种似乎不太可行的方法来做到这一点,AsyncBundle
我需要一些指导方针来理解如何做到这一点。在源端(在 clkA)我有:
val ioA = IO(Decoupled(UInt(32.W))
在接收器侧(在 clkB)我有:
val ioB = IO(Decoupled(UInt(32.W).flip)
所以做这样的事情是有道理的(我不确定下面的代码是否正确):
// in module A
val ioA = IO(new AsyncBundle(Decoupled(UInt(32.W))))
// in module B
val ioB = IO (new AsyncBundle(Decoupled(UInt(32.W)).flip)
// and somewhere in a module that contains both modules
b.io <> FromAsyncBundle(a.io)
以上有意义吗?我也注意到FromAsyncBundle
创建一个DecoupledIO
它会替换我在捆绑包中定义的那个还是只是为了交叉?如果它确实取代了我如何驱动它,例如从某些逻辑推送数据和有效。过境点两边的时钟会怎样?