首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Chisel invert Vec[Bool]一行程序

Chisel invert Vec[Bool]一行程序
EN

Stack Overflow用户
提问于 2021-10-04 18:21:39
回答 2查看 37关注 0票数 3

有没有一个一行程序可以获取一个VecBool并创建它的一个倒排版本?

这是一个获取37位的示例,将它们倒置,然后对所有位执行OR缩减。有没有可以替代inv_a赋值的一行程序?

代码语言:javascript
复制
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))
}
EN

回答 2

Stack Overflow用户

发布于 2021-10-04 21:18:33

我想这就是你想要的。

代码语言:javascript
复制
val inv_a = (~ io.a.asUInt).asBools()
票数 2
EN

Stack Overflow用户

发布于 2021-10-05 16:19:01

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

代码语言:javascript
复制
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(...)

代码语言:javascript
复制
val inv_a: Vec[Bool] = VecInit(io.a.map(!_))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69440691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档