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