凿子:嵌套的Vecs中失去方向性的耦合

时间:2018-09-19 23:42:23

标签: chisel

我有一个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的错误还是我错过了什么?我该如何解决?

1 个答案:

答案 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来跟踪此错误。