Chisel中是否存在单行代码实现Vec[Bool]逐位取反的写法?
Chisel Vec[Bool]逐位取反的单行实现方案
完全可以用单行代码替换原有inv_a的赋值逻辑,核心是利用Chisel Vec内置的map遍历方法实现逐位运算。
替换方案
方案1:仅替换inv_a赋值逻辑
原有inv_a的Wire定义+for循环共3行,可直接替换为1行:
val inv_a = io.a.map(~_)
map方法会遍历io.a中的每一位Bool元素,执行逐位取反操作后返回长度、类型完全匹配的新Vec[Bool],无需手动声明Wire,返回结果可直接用于后续归约运算。
修改后的完整代码如下:
class MyModule extends Module { val io = IO(new Bundle { val a = Input(Vec(37, Bool())) val b = Output(Bool()) }) val inv_a = io.a.map(~_) // 单行替换原有逻辑 io.b := inv_a.reduce((a, b) => (a | b)) }
方案2:合并全部逻辑为1行
如果后续不需要复用inv_a变量,可直接将取反和OR归约合并为一行,省略inv_a的定义:
io.b := io.a.map(~_).reduce(_ | _)
修改后的完整代码如下:
class MyModule extends Module { val io = IO(new Bundle { val a = Input(Vec(37, Bool())) val b = Output(Bool()) }) io.b := io.a.map(~_).reduce(_ | _) }
内容的提问来源于stack exchange,提问作者nic
相关产品推荐
相关产品推荐

