我声明了我的特定数据的捆绑包:
class RValue (val cSize: Int = 16) extends Bundle {
val rvalue = Output(UInt(cSize.W))
val er = Output(UInt((cSize/2).W))
val part = Output(Bool()) /* set if value is partial */
}
我想将其用作模块中的寄存器:
val valueReg = Reg(new RValue(cSize))
//...
valueReg.rvalue := 0.U
valueReg.er := 0.U
那很好。但我想使用RegInit()在寄存器声明中对其进行初始化。可能吗 ?
val valueReg = RegInit(new RValue(cSize), ?? ) ??
Chick使用Bundle Literals的答案是很酷的新方法,它很不错,因为您可以在单个表达式中给Bundle任意值。
如果您只想在重置类型时将寄存器清零,则始终可以将原义零转换为捆绑:
val valueReg = RegInit(0.U.asTypeOf(new RValue(cSize))
您可以根据需要对任何文字执行类似的操作,但是除非您将所有内容清零或将所有内容设置为1,否则我不建议您这样做。
为了将每个字段设置为其他值,我认为Chick的方法更好,但是您在较旧代码中看到的普通样式如下:
val valueReg = RegInit({
val bundle = Wire(new RValue(cSize))
bundle.rvalue := 1.U
bundle.er := 2.U
bundle.part := 3.U
bundle
})
在Scala中,您可以将{ }
表达式放在任何地方,并且Block中的最后一个表达式将是返回值。因此,我们可以使用要将寄存器重置为的值创建一个Wire,然后将该Bundle作为初始化值传递。相当于写:
val valueRegInit = Wire(new RValue(cSize))
valueRegInit.rvalue := 1.U
valueRegInit.er := 2.U
valueRegInit.part := 3.U
val valueReg = RegInit(valueRegInit)
我希望这有帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句