#chisel
Вопрос:
Есть ли однострочный, который берет Vec[Bool] и создает его перевернутую версию?
Вот пример того, как взять 37 битов, инвертировать их, а затем выполнить сокращение ИЛИ по всем из них. Есть ли однострочный, который может заменить присвоение 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))
}
Ответ №1:
Я думаю, это делает то, что ты хочешь.
val inv_a = (~ io.a.asUInt).asBools()
Ответ №2:
В качестве альтернативы вы могли map
бы на входе Vec
инвертировать каждый элемент:
val inv_a = io.a.map(!_)
Пример в Скасти (с использованием долота v3.4.4): https://scastie.scala-lang.org/bcQIihPMThelC9h4jDfyxQ
Обратите внимание, что тип inv_a
-это a Seq[Bool]
, который вы все еще reduce
можете использовать, но если вам нужна Vec[Bool]
спина, вам нужно будет обернуть результат в VecInit(...)
:
val inv_a: Vec[Bool] = VecInit(io.a.map(!_))