如何解决检索RegInit的重置值
是否有办法通过探测产生类型的成员来获取RegInit
的重置值?我可以看到RegInit将返回类型(例如UInt
)。例如,我将有一个要通过regmap
val myRWReg = RegInit(3.U(10.W))
// ...
node.regmap(
0x0 -> Seq(RegField(10.W,myRWReg,RegFieldDesc("myRWReg","A RW Register.",reset = myRWReg.init)))
)
.init
不是可访问的成员,但在此处显示为暗示它是我正在寻找的内容。
有没有办法做到这一点,以便每当使用RegFieldDesc
时,重置描述都可以与硬件匹配,而不必保留另一个变量?
一种变通方法/解决方案是在我的示例中将3.U
设为根据任何参数进行更改的val
并简单地传递该参数,但是不确定是否还有其他可以使用的参数
解决方法
您可能还对DescribedReg
感兴趣:
https://github.com/chipsalliance/rocket-chip/blob/30e38e83a1a427bba5441afad83bde947fa75542/src/main/scala/regmapper/DescribedReg.scala#L7
它同时建立寄存器及其描述。 用法示例: https://github.com/chipsalliance/rocket-chip/blob/30e38e83a1a427bba5441afad83bde947fa75542/src/main/scala/tile/BusErrorUnit.scala#L58
,我最终想出了可能对其他人有用的东西。我还希望能够做的一件事是不必显式声明 Reg
。我希望通过连接推断出这一点。例如,我有一个在 Bundle
上驱动 8 位“端口”的 SW 寄存器。我可以制作一个 Reg
,但是如果它根据参数发生变化,我需要跟上它的大小。
object WavRWReg{
def apply[T <: Data](connection : T,reset: T,name: String,desc: String = ""): RegField = {
//val reg = RegInit(reset)
val reg = RegInit(connection.cloneType,reset)
reg.suggestName("swi_" + name)
connection := reg
//litValue returns the Bigint value
val rf = RegField(reg.getWidth,reg.asUInt,RegFieldDesc(name,desc,access=RegFieldAccessType.RW,reset=Some(reset.litValue)))
rf
}
}
因此这将创建 Reginit
到指定的重置 val,并且宽度是从连接类型推断出来的。重置值也会发送到 RegFieldDesc
,因此我不必在两个地方手动跟上它,从而减少错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。