【问题标题】:Chisel invert Vec[Bool] one-liner凿子反转 Vec[Bool] 单线
【发布时间】:2021-11-25 03:45:32
【问题描述】:

是否有一个单行器接受 Vec[Bool] 并创建它的反转版本?

这是一个取 37 位的示例,将它们取反,然后对所有这些位进行 OR 约简。有没有单行可以代替inv_a的赋值?

class MyModule extends Module {
  val io = IO(new Bundle {
    val a = Input(Vec(37, Bool()))
    val b = Output(Bool())
  })

  val inv_a = Wire(Vec(37, Bool()))
  for (i <- 0 until 37) {
    inv_a(i) := ~io.a(i)
  }

  io.b := inv_a.reduce((a, b) => (a | b))
}

【问题讨论】:

    标签: chisel


    【解决方案1】:

    我认为这可以满足您的需求。

    val inv_a = (~ io.a.asUInt).asBools()
    

    【讨论】:

      【解决方案2】:

      或者,您可以在输入 Vec 上使用 map 来反转每个元素:

      val inv_a = io.a.map(!_)
      

      Scastie 中的示例(使用 Chisel v3.4.4):https://scastie.scala-lang.org/bcQIihPMThelC9h4jDfyxQ

      请注意,inv_a 的类型是 Seq[Bool],您仍然可以使用 reduce,但如果您需要 Vec[Bool] 后退,您需要将结果包装在 VecInit(...)

      val inv_a: Vec[Bool] = VecInit(io.a.map(!_))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-20
        相关资源
        最近更新 更多