有没有一个一行程序可以获取一个VecBool并创建它的一个倒排版本?
这是一个获取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))
}发布于 2021-10-04 21:18:33
我想这就是你想要的。
val inv_a = (~ io.a.asUInt).asBools()发布于 2021-10-05 16:19:01
或者,您可以在输入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] back,则需要将结果包装在VecInit(...)中
val inv_a: Vec[Bool] = VecInit(io.a.map(!_))https://stackoverflow.com/questions/69440691
复制相似问题