我有一个Vec[Decoupled[UInt]]
,我想根据选择信号连接到Vec
的{{1}}。但是,一旦Vec[Decoupled[UInt]]
嵌套在两层深度之后,它的方向性便消失了,因此它不会让我初始化就绪信号或使用输入来驱动输出。
例如,Chisel允许我实例化这一点:
Decoupled
但这会产生错误:
class Example extends Module {
val io = IO(new Bundle {
val in = Vec(3, Flipped(Decoupled(UInt(3.W))))
val out = Vec(3, Decoupled(UInt(3.W)))
})
io.in.foreach(_.ready := false.B) // Only here for consistency
io.out <> io.in
}
后者给出了读取的错误
class Example extends Module {
val io = IO(new Bundle {
val sel = Input(UInt(4.W))
val in = Vec(10, Vec(3, Flipped(Decoupled(UInt(3.W)))))
val out = Vec(3, Decoupled(UInt(3.W)))
})
io.in.foreach(_.foreach(_.ready := false.B))
io.out <> io.in(io.sel)
}
这是Chisel的错误还是我错过了什么?我该如何解决?
答案 0 :(得分:1)
这很奇怪。我还没有找到原因,但是我已经确认了您看到的错误行为。幸运的是,有一个简单的解决方法,将Flipped
放在Vec
之外。
class Example extends Module {
val io = IO(new Bundle {
val sel = Input(UInt(4.W))
val in = Flipped(Vec(10, Vec(3, Decoupled(UInt(3.W)))))
val out = Vec(3, Decoupled(UInt(3.W)))
})
io.in.foreach(_.foreach(_.ready := false.B))
io.out <> io.in(io.sel)
}
我已提交an issue on the Chisel repo来跟踪此错误。