chisel - 如何在 Chisel 中初始化 Bundle 的 Reg?
问题描述
我为我的特定数据声明了一个 Bundle :
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 提供任意值。
如果您只想在复位类型时将寄存器清零,您总是可以从字面零转换为 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)
我希望这有帮助!
推荐阅读
- wordpress - 如何在 Wordpress 中更改 get_site_url() 的 url?
- python - 闭包如何“知道”它需要保留状态信息?
- redis - Redis 从 3.0.7 升级到 5
- android - Messenger InstantGames - Web 请求在 Messenger 网页上运行良好,但在通过 Messenger 移动应用程序播放时失败
- regex - 如何在路径中间使用随机字符串删除HDFS中的文件
- python - 用于将串在一起的单词拆分为单个单词的 Python 函数
- python - 如何通过索引其他列的所需部分来在熊猫数据框中创建新列
- python - 如何找到列表中的最高值和最低值?
- kubernetes - 如何在 k8s 上调试被驱逐的 pod
- opengl - 尝试使用 Ping-Pong 帧缓冲区时出现奇怪的颜色伪影