在 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))
我想知道如何将 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))