在 Chisel 中将 Bundle Register 初始化为全 1 的最佳方法是什么?

What would be the best way to initialize a Bundle Register to all 1s in Chisel?

我想知道如何将 Bundle 寄存器初始化为全 1。假设我有捆绑包:

class MyBundle(val w: Int) extends Bundle {
  val a = UInt(w.W)
  val b = UInt(w.W)
  val x = Bool()
  val y = Bool()
}

我正在尝试类似的东西:

val myReg = RegInit(-1.S.asTypeOf(new MyBundle(32)))

但是,这假定带符号文字的宽度仅为 1,并且仅将包的 LSB 初始化为 1。想到的是:

val myReg = RegInit(-1.S(new MyBundle(32).asSInt().getWidth).asTypeOf(new MyBundle(32)))

但这似乎根本不起作用。

我怎样才能做到这一点?

您可以根据 Bundle 的宽度明确设置宽度。你在正确的轨道上。尝试:

val myReg = RegInit(-1.S(new MyBundle(32).getWidth.W).asTypeOf(new MyBundle(32)))

另请注意,如果您已经构造了 MyBundle,则可以直接引用它而不是构造新对象,例如:

val foo = Wire(new MyBundle(32))
val myReg = RegInit(-1.S(foo.getWidth.W).asTypeOf(foo))