如何部分初始化寄存器向量(例如,底层捆绑类型的某些字段)

How to partially initialize a vector of registers (e.g. some fields of underlying bundle type)

假设我有一个像这样的寄存器向量(ValidIO 围绕 UInt 创建了一个包并添加了一个 "valid" 字段):

val vreg = Reg(Vec(16, ValidIO(UInt(32.W))))

以简洁的方式仅初始化 Vec 的所有元素中的有效字段的最佳方法是什么?现在我知道如何通过将寄存器分成两个向量来做到这一点:

val vDataReg = Reg(Vec(16, UInt(32.W)))
val vValidReg = RegInit(VecInit(Seq.fill(16) {false.B}))

但这并没有重用我原来的类型ValidIO(一般来说可能更复杂)。

你可以试试

val vreg = Reg(Vec(16, ValidIO(UInt(32.W))))
vreg.foreach(_.valid := false.B)

不知道有没有办法一次性搞定line/statement

编辑:重置时初始化

val vreg = RegInit(Vec(Seq.fill(16) {
  val w = Wire(ValidIO(UInt(32.W)))
  w.valid := false.B
  w.bits := DontCare
  w
}))

有点冗长但包含在一个块中