python systemrdl 使用实例

         今天来看一个具体实例,上一篇传送门: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_namejson_obj['lsb'] = obj.lsbjson_obj['msb'] = obj.msbjson_obj['reset'] = obj.get_property('reset')json_obj['sw_access'] = obj.get_property('sw').namereturn 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 RDLCompileErrorrdlc.msg.fatal("JSON export does not support arrays",obj.inst.inst_src_ref)# Convert information about the registerjson_obj = dict()json_obj['type'] = 'reg'json_obj['inst_name'] = obj.inst_namejson_obj['addr_offset'] = obj.address_offset# Iterate over all the fields in this reg and convert themjson_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 RuntimeErrorjson_obj['inst_name'] = obj.inst_namejson_obj['addr_offset'] = obj.address_offsetjson_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 filewith 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.mzph.cn/news/53400.shtml

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

相关文章

简析SCTP开发指南

目录 前言一、SCTP基本概念二、SCTP开发步骤1. **环境配置**:2. **建立Socket**:3. **绑定和监听**:4. **接收和发送数据**:5. **关闭连接**: 三、 C语言实现SCTP3.1SCTP客户端代码:3.2 SCTP服务器端代码&a…

识别图片中的文字

前言 PearOCR 是一款免费无限制网页版文字识别工具。 优点如下: 免费:完全免费,没有任何次数、大小限制,可以无限使用; 安全:全部数据本地运算,所有图片均不会被上传; 智能&#xf…

SQL注入之HTTP头部注入

文章目录 cookie注入练习获取数据库名称获取版本号 base64注入练习获取数据库名称获取版本号 user-agent注入练习获取数据库名称获取版本号 cookie注入练习 向服务器传参三大基本方法:GPC GET方法,参数在URL中 POST,参数在body中 COOKIE,参数…

OpenSIPS 通话中 UPDATE 请求导致没有声音问题

文章目录 1. 问题现象2. 抓包排查3. 问题分析及解决方案 1. 问题现象 在 SIP 应用的开发中,通话一端听不到声音是比较常见的问题。一般来说,没有声音意味着 RTP 传输存在障碍,追根究底就是网络不通或者端口未开放等原因。但在实践中&#xf…

数据结构——图

文章目录 图的基本概念顶点边度无向图和有向图无权图和带权图 图的存储邻接矩阵存储邻接表存储 图的搜索广度优先搜索深度优先搜索 图是一种较为复杂的非线性结构。 为啥说其较为复杂呢? 根据前面的内容,我们知道: 线性数据结构的元素满足唯…

nodejs

文章目录 一、nodejs1.1、npm配置命令别名 一、nodejs 1.1、npm配置命令别名 我们可以使用“node index.js”的方式运行代码 也可以利用npm配置别名的方式运行代码 在package.json中配置别名,利用“npm run 别名”也可以运行 start是特殊的,可以“npm r…

ssm+Vue.js在线购物系统源码和论文

ssmVue.js在线购物系统源码和论文049 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势…

GPT---1234

GPT:《Improving Language Understanding by Generative Pre-Training》 下载地址:https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdfhttps://cdn.openai.com/research-covers/language-unsupervised/language_understa…

保姆级使用vmware安装Ubuntu-server版

保姆级VMware安装Ubuntu20服务器版 文章目录 保姆级VMware安装Ubuntu20服务器版前期准备一、安装vmware二、下载Ubuntu镜像 VMware安装Ubuntu201. 启动Workstation Pro或者Workstation Player,进入软件后新建一个虚拟机2. 进入引导界面选择默认的即可3. 点击下一步即可4. 选择操…

VR全景加盟会遇到哪些问题?全景平台会提供什么?

想创业,你是否也遇到这些问题呢?我是外行怎么办?没有团队怎么办?项目回本周期快吗?项目靠谱吗?加盟平台可信吗?等等这类疑问。近几年,VR产业发展迅速,尤其是VR全景项目在…

[ VMware 虚拟机 ] 启动不了图形界面,报 “The system is running in low-graphics mode” 错误

文章目录 问题现象异常原因解决方案 问题现象 在启动虚拟机的时候,不能正常的进入图形界面,报 “The system is running in low-graphics mode” 错误。 异常原因 启动界面的xorg.conf文件失败并删除。 解决方案 1、点击异常界面上的 “ok”后&…

编码基础一:侵入式链表

一、简介概述 1、普通链表数据结构 每个节点的next指针指向下一个节点的首地址。这样会有如下的限制: 一条链表上的所有节点的数据类型需要完全一致。对某条链表的操作如插入,删除等只能对这种类型的链表进行操作,如果链表的类型换了&#…

静态代码扫描持续构建(Jenkins)

前提条件 已正确安装、配置Jenkins环境,并装有 Gradle 插件、HTML 插件、SVN 插件等。如下图所示: 已正确安装、配置android sdk,在cmd窗口输入命令“android -h”,回车 配置步骤 打开Jenkins,新建一个job,输入项目…

Discuz!论坛发帖标题字数限制80字符可以修改吗?修改发帖标题字数的方法

Discuz!论坛发帖标题字数限制80字符修改方法 1.数据库修改2.修改JS验证字符数文件3.修改模板中写死的字符限制数4.修改函数验证文件5.修改语言包文件6.更新缓存 Discuz X3.4论坛网站帖子标题字数限制80字符,当我们想使用长标题的时候就得一删再删,实在是…

服务器CPU飚高排查

排查思路 当正在运行的Java服务导致服务器的CPU突然飙高时,我们该如何排查定位到哪个接口的哪行代码导致CPU飙高的问题呢?我主要提供两个方案: jstackarthas 准备工作 代码准备 现在需要准备一段可以让服务器CPU飙高的代码以及把代码部署…

FastJson在Java后端方面解析使用(二)

​ JSON现在常用来做前后端数据交互,两个蝴蝶飞只是简单的对JSON做一下讲解和简单使用。关于JSON,我还了解的远远不够。由于本人经验有限,嘴皮子不溜,所以学术性,概念性,底层性的知识点暂时不做介绍。文章中有错误之处…

【Python Flask+Nginx】实现HTTP、WS (两步实现,简单易懂)

目录 一、创建Flask应用 二、部署Nginx 2.1 下载Nginx 2.2 修改Nginx配置文件 2.3 启动Nginx 三、测试 一、创建Flask应用 首先我写了如下一个基于Flask的Demo,该Demo包含两个接口一个是HTTP接口(http://127.0.0.1:5000)&#xff0c…

Postman如何做接口自动化测试?

前言 什么是自动化测试 把人对软件的测试行为转化为由机器执行测试行为的一种实践。 例如GUI自动化测试,模拟人去操作软件界面,把人从简单重复的劳动中解放出来。 本质是用代码去测试另一段代码,属于一种软件开发工作,已经开发完…