python systemrdl 使用实例

news2025/1/20 12:13:45

         今天来看一个具体实例,上一篇传送门:python SystemRDL 包介绍_Bug_Killer_Master的博客-CSDN博客

         通常来说,我们验证过程用到的情况大多都是需要提取reg field的路径以及reset 值等信息,所以比较常见的一种方法就是先把rdl compile+elaborate 成Node信息,然后输出成json文件,因为Python 在其标准库中有一个优秀的 JSON 序列化程序。这意味着我们需要做的就是将寄存器模型中的信息提取为原始数据类型,这些数据类型可以很好地转换为JSON。当然我们需要的所有信息都可以放到json文件中以便我们进一步使用。

          下面就是转成json的例子,首先假设我们的json文件里面各个层级的信息如下:

 1. convert_field

def convert_field(rdlc: RDLCompiler, obj: node.FieldNode) -> dict:
    json_obj = dict()
    json_obj['type'] = 'field'
    json_obj['inst_name'] = obj.inst_name
    json_obj['lsb'] = obj.lsb
    json_obj['msb'] = obj.msb
    json_obj['reset'] = obj.get_property('reset')
    json_obj['sw_access'] = obj.get_property('sw').name
    return json_obj

    FieldNode的所有property参考链接:SystemRDL Property Reference — SystemRDL Compiler documentation (systemrdl-compiler.readthedocs.io)

   2. convert_reg

def convert_reg(rdlc: RDLCompiler, obj: node.RegNode) -> dict:
    if obj.is_array:
        # Use the RDL Compiler message system to print an error
        # fatal() raises RDLCompileError
        rdlc.msg.fatal(
            "JSON export does not support arrays",
            obj.inst.inst_src_ref
        )
    # Convert information about the register
    json_obj = dict()
    json_obj['type'] = 'reg'
    json_obj['inst_name'] = obj.inst_name
    json_obj['addr_offset'] = obj.address_offset

    # Iterate over all the fields in this reg and convert them
    json_obj['children'] = []
    for field in obj.fields():
        json_field = convert_field(rdlc, field)
        json_obj['children'].append(json_field)

    return json_obj

RegNode的所有property参考链接:

3.covert_addrmap_or_regfile

def convert_addrmap_or_regfile(rdlc: RDLCompiler, obj: Union[node.AddrmapNode, node.RegfileNode]) -> dict:
    if obj.is_array:
        rdlc.msg.fatal(
            "JSON export does not support arrays",
            obj.inst.inst_src_ref
        )

    json_obj = dict()
    if isinstance(obj, node.AddrmapNode):
        json_obj['type'] = 'addrmap'
    elif isinstance(obj, node.RegfileNode):
        json_obj['type'] = 'regfile'
    else:
        raise RuntimeError

    json_obj['inst_name'] = obj.inst_name
    json_obj['addr_offset'] = obj.address_offset

    json_obj['children'] = []
    for child in obj.children():
        if isinstance(child, (node.AddrmapNode, node.RegfileNode)):
            json_child = convert_addrmap_or_regfile(rdlc, child)
        elif isinstance(child, node.RegNode):
            json_child = convert_reg(rdlc, child)

        json_obj['children'].append(json_child)

    return json_obj

4.json dump

def convert_to_json(rdlc: RDLCompiler, obj: node.RootNode, path: str):
    # Convert entire register model to primitive datatypes (a dict/list tree)
    json_obj = convert_addrmap_or_regfile(rdlc, obj.top)

    # Write to a JSON file
    with open(path, "w", encoding='utf-8') as f:
        json.dump(json_obj, f, indent=4)

5.top_function

import sys

# Compile and elaborate files provided from the command line
input_files = sys.argv[1:]
rdlc = RDLCompiler()
try:
    for input_file in input_files:
        rdlc.compile_file(input_file)
    root = rdlc.elaborate()
except RDLCompileError:
    sys.exit(1)
# Dump the register model to a JSON file
convert_to_json(rdlc, root, "out.json")

input rdl:

addrmap tiny {
    reg {
        field {
            sw=rw;
            hw=r;
        } f1[8] = 123;

        field {
            sw=r;
            hw=w;
        } f2[8];
    }r1;
};

output json:

{
    "type": "addrmap",
    "inst_name": "tiny",
    "addr_offset": 0,
    "children": [
        {
            "type": "reg",
            "inst_name": "r1",
            "addr_offset": 0,
            "children": [
                {
                    "type": "field",
                    "inst_name": "f1",
                    "lsb": 0,
                    "msb": 7,
                    "reset": 123,
                    "sw_access": "rw"
                },
                {
                    "type": "field",
                    "inst_name": "f2",
                    "lsb": 8,
                    "msb": 15,
                    "reset": null,
                    "sw_access": "r"
                }
            ]
        }
    ]
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/925621.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入理解python虚拟机:调试器实现原理与源码分析

调试器是一个编程语言非常重要的部分,调试器是一种用于诊断和修复代码错误(或称为 bug)的工具,它允许开发者在程序执行时逐步查看和分析代码的状态和行为,它可以帮助开发者诊断和修复代码错误,理解程序的行…

vue(element ui安装)

目录 一,element ui安装二,main.js三,使用element ui最后 一,element ui安装 先在盘服中找到你创建的node的位置 如有不懂根据可以看看上一章安装node 然后在终端找到 进入这个位置之后就可以安装了 输入npm i element-ui -S这个…

什么是长短时记忆网络(LSTM)

什么是长短时记忆网络(LSTM) RNN有一定的记忆能力,但不幸的是它只能保留短期记忆,在各类任务上表现并不好,那该怎么办? 人们将目光投向了自己,人类的记忆是有取舍的,我们不会记住每时每刻发生的所有事,会…

基于Java+SpringBoot+vue前后端分离高校办公室行政事务管理系统设计实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

奎文区残疾人联合会党组领导侯效刚、刘金玲莅临考察交流

2023年8月15日上午,为进一步提升残疾人精准化服务水平,推动“如康家园”残疾人之家建设有序展开,奎文区残疾人联合会党组书记兼理事长侯效刚,党组成员兼副理事长刘金玲,潍州路街道办事处副主任董江芹主任一行5人莅临潍…

RK3568评估板外接屏幕修改竖屏为横屏显示

问题 使用RK3568评估板外接HDMI屏幕时竖屏显示内容,需要修改为横屏显示。 解决办法 修改weston.ini配置文件,配置output输出参数 查看显示屏名称 使用ls /sys/class/drm/ 命令查看显示屏名称,如下图所示,示例屏为HDMI屏&#xff0…

1448. 统计二叉树中好节点的数目

题目描述: 给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。 「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。 示例: 解题思路: 通过左右子树分别判断是否大于…

胜券汇:运营商有望引领国内AI信创加速

8月20日,中国电信发布《中国电信AI算力服务器(2023-2024年)会集收购项目会集资历预审公告》。胜券汇研报点评称,中国电信集采4175台AI算力服务器,数量大幅增加,佐证AI服务器高景气量。估计国产占比约47%&am…

【三维重建】【深度学习】NeRF代码Pytorch实现--数据加载(上)

【三维重建】【深度学习】NeRF代码Pytorch实现–数据加载(上) 论文提出了一种5D的神经辐射场来作为复杂场景的隐式表示,称为NeRF,其输⼊稀疏的多⻆度带pose的图像训练得到⼀个神经辐射场模型。简单来说就是通过输入同一场景不同视角下的二维图片和相机位…

抢鲜体验!vLive虚拟直播5大实用新功能上线!

vLive虚拟直播系统2.6.2版本全新上线!新版本一共更新了5项实用功能,能让你的直播操作更加方便。现在就跟随小编一起来看看吧! 1.本地下载场景支持一键迁移 用户下载后的场景可以直接迁移至另一个磁盘,无需重复下载。 2.信号源添加…

《深度学习计算机视觉 》书籍分享(包邮送书三本)

深度学习计算机视觉介绍 随着计算机技术的发展和进步,计算机视觉领域得到了广泛的关注和研究。而深度学习作为一种强大的机器学习方法,已经成为计算机视觉领域的重要工具之一。本文将介绍深度学习在计算机视觉中的应用和取得的成果。 深度学习是一种模…

MeterSphere常用操作/脚本记录

设置变量 vars.put(“key”,“value”); //存为场景变量 设置环境变量 vars.put(${__metersphere_env_id}“key”,“value”); //存为环境变量 随机生成手机号 String phone “178123${__RandomString(5,0123456789)}”; //178123开头,后面5位随机 获取当前请求…

Python爬虫分布式架构 - Redis/RabbitMQ工作流程介绍

在大规模数据采集和处理任务中,使用分布式架构可以提高效率和可扩展性。本文将介绍Python爬虫分布式架构中常用的消息队列工具Redis和RabbitMQ的工作流程,帮助你理解分布式爬虫的原理和应用。 为什么需要分布式架构? 在数据采集任务中&#…

子查询和事务隔离以及用户管理

一、子查询 子查询是另一个语句中的select语句嵌套在另一个select中。注意子查询语法上必须使用()包起来。 嵌套的那个语句返回的结果有可能是: 一个字段,一行记录,一个列或一个表。嵌套的位置 where / having语句里面作为条件使用在from语…

DPLVO

在这篇论文核心: 实现了dso的点线优化框架实现了线特征的参数最小化 点的投影与线的投影 点在相机中是一个射线的投影,线其实是一个平面的投影。在vins等系统中采用逆深度对点特征进行表达,三维点只需要一维度的表达就可以了,大…

从VMware Workstation的虚拟机导入到esxi主机中

从VMware Workstation的虚拟机导入到esxi主机中 是从VMware Workstation中的虚拟机导入部署到ESXI主机中使用,使用真实环境导出和部署的过程,我为了帮助到有些初学者仅供参考,我做了知识共享。 1、打开VMware Workstation中的一个虚拟机&…

下半场开哨!AIGC+智能汽车,谁在引领市场新风口

“智能汽车已经成为AIGC应用的下一个‘重地’。” 中科创达副总裁、畅行智驾CEO屠科在8月22日于南京举办的《软件赋能汽车智能化转型发展高峰论坛》上发表演讲时表示:在AIGC时代,汽车的“智能属性”将加速释放,智能驾驶也将迎来快速发展。 中…

Windows 基础结构密码管理

在大多数 IT 环境中,Windows 服务器和系统是基础结构的重要组成部分。本地、域和服务帐户构成了对 Windows 基础结构的核心访问,因此,对于任何组织来说,破坏这些特权帐户中的任何一个都是最糟糕的情况: 本地管理员帐户…

在线翻译插件

今天找到一个浏览器在线插件,支持翻译本地PDF文档。 链接 支持各种浏览器,这里以Chrome为例。下载安装完扩展程序之后,如下操作: 选择需要翻译的PDF就OK了

基于Java+SpringBoot+vue前后端分离英语知识应用网站设计实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…