首页 > 解决方案 > 如何在凿子中同步 2 个时钟域之间的包

问题描述

我正在尝试在不同时钟域的 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它会替换我在捆绑包中定义的那个还是只是为了交叉?如果它确实取代了我如何驱动它,例如从某些逻辑推送数据和有效。过境点两边的时钟会怎样?

标签: chiselrocket-chip

解决方案


推荐阅读