检索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,因此我不必在两个地方手动跟上它,从而减少错误。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...