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

访问regmap RegFields

如何解决访问regmap RegFields

我正在尝试寻找一种干净的方法来访问与regmap一起使用的*RegisterNode,以创建文档和测试文件TLRegisterNode具有通过某些Annotations生成json的方法。通过将它们添加regmap对象中,可以通过ElaborationArtefacts方法完成这些操作。其他协议似乎没有这些注释。

在拟订​​之后或期间是否要遍历“ regmap注册字段?

我不能只访问regmap,因为它实际上不是val / var,因为它是一种方法。我不太清楚这些信息存储在哪里。我真的不相信它实际上是在“存储”任何信息,就像它只是在创建将指定逻辑附加到基于RegisterNode的逻辑的硬件一样。

JSON输出实际上对我来说很好,因为我可以编写一个后处理脚本将JSON转换为所需的格式,但是我想知道是否可以访问此信息,或者是否可以在该位置添加自定义函数调用结束。我无法扩展case class *RegisterNode,但是我不确定是否可以添加自定义函数以在regmap方法的末尾运行。

这是我很快就放在一起的东西:

//in *RegisterRouter.scala

def customregmap(customFunc: (RegField.MaP*) => Unit,mapping: RegField.MaP*) = {
  regmap(mapping:_*)
  customFunc(mapping:_*)
}

def regmap(mapping: RegField.MaP*) = {
  //normal stuff
}

然后用户可以创建一个自定义函数来运行并将其传递给regmap或RegisterRouter

def myFunc(mapping: RegField.MaP*): Unit = {
  println("I'm doing my custom function for regmap!")
}

// ...

node.customregmap(myFunc,0x0 -> coreControlRegFields,0x4 -> fdControlRegFields,0x8 -> fdControl2RegFields,)

这只是我的一个简单例子。我相信,如果可能会出现这样的情况,最好将Seq功能添加RegisterNode的末尾的regmap方法,类似于TLRegisterNode当前的工作方式。因此,用户可以添加任意数字,而您仍然可以使用regmap调用

背景知识(不是问题的直接组成部分):

多年来,我已经建立了一个统一的注册脚本,在该脚本中我描述了特定IP的寄存器。它的工作原理与RegField / node.regmap非常相似,除了它显然不了解外交等方面。它将生成Verilog,但也将生成用于DV的各种文件(基本的“定义简单的Verilog模拟和更复杂的uvm_reg_block定义)还具有描述子系统的多个IP的能力,一直到SoC级)。它还将打印出SW和Sphinx reStructuredText的C头文件,以备文档使用。

外交实际上解决了我一直在处理的主要问题之一,因此我显然正在设法将我的大多数较新的设计推向Chisel / Diplo。

解决方法

我最终通过创建自己的 RegisterNode 解决了这个问题,它与火箭芯片 RegisterNodes 相同,只是我使用不同的精化工件来获取信息并将其存储以备后用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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”。这是什么意思?