微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

检索RegInit的重置值

如何解决检索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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?