python高效控制模拟器_使用Python实现RISCV模拟器(一)
不用花几百块钱买开发板,也不需要折腾复杂的官方模拟器,只需要有Python就可以进行RISC-V的开发了
=====================================================================================================================================================================
1. 简介
pyriscv 是笔者开发的一套RISC-V数据精确的模拟器。由于Python对运算符重载、函数指针等高级编程方法有非常方便的支持,因此代码量非常的小,也便于阅读和理解。
目前pyriscv还在持续开发中。当前github上的版本只支持RV32I这个指令集,且没有实现FENCE、SYSTEM和CSR。
目前的代码量近300行,核心部分仅仅60多行。在开发过程中没有用到任何第三方库,仅仅使用Python自带的功能。
2. 快速运行
clone下来之后,src/pyriscv.py即为模拟器入口。交叉编译器产生elf后,需要使用交叉编译器提供的objcopy工具将elf转换为verilog memory格式,便于模拟器读取。模拟器的命令行参数即为
python3 pyriscv.py
在代码库里提供了一个示例app.S和链接脚本link.ld,没有安装riscv编译器的同学可以从这里下载到预先编译好的编译器。注意不要把这个编译器安装到带空格的目录里,在安装过程中要仔细观看它的默认安装路径https://github.com/gnu-mcu-eclipse/riscv-none-gcc/releasesgithub.com
全套命令为:
cd app
$riscv-gcc -g -march=rv32i -mabi=ilp32 app.S -nostdlib -Tlink.ld -o app.elf
$riscv-objdump -S -d app.elf > app.lst
$riscv-objcopy -F verilog app.elf app.mem
python3 ../src/pyriscv.py app.mem
3. 平台约定复位向量位于0x00000000,如果需要修改它,需要在link.ld中指定或者在代码里分配,同时,在例化PyRiscv时指定reset_vec这个参数。
任何对x0的写入均会打印到控制台上。因此,如果想使用printf,只需要在putc里将传入的字符扔给x0就可以了。当然,这样的设计不太理想,因为很多命令都会写入x0(例如跳转)
执行slt x0,x0,x0这条指令会退出模拟器
接下来的几个章节会对这个模拟器的设计进行分析,也欢迎大家评论、fork、star,我会尽可能在接下来的讲述中优先考虑回答读者的问题。
python高效控制模拟器_使用Python实现RISCV模拟器(一)相关推荐
- python方向键控制角色_用python和pygame游戏编程入门-控制角色移动
在上一节中我们知道了事件,以及如何捕捉键盘事件进行响应,本届我们结合第一节何上一节的内容,做一个用键盘控制角色移动的功能,代码如下: #!/usr/bin/env python #指定图像文件名称 b ...
- python高效处理文件_使用Python语言高效地处理一个文本文件
使用Python语言高效地处理一个文本文件: # -- encoding: utf-8 -- # 脚本功能:在指定的文件中查找指定的字符串 # 此脚本接受两个参数 # 参数1:指定一个文件名,在这个文 ...
- python编程控制机器人_基于Python开发的微信图灵机器人
在过去的几个月中,由于在新生群中回答问题费时费力,同时又有许多重复而又有固定答案的回答,我受到一些知乎文章的启发,维护了一个基于itchat的群聊机器人.从刚开始接入图灵机器人时只会尬聊的机器人,之后 ...
- python 手机控制电脑_用Python实现电脑手机文件互传秒完成
点击上方Python知识圈,设为星标回复1024获取Python资料阅读文本大概需要 3 分钟点击「阅读原文」查看pk哥原创精品视频.
- python如何控制传感器_在Python中单行写入传感器数据
我正在尝试使用Python将来自2个传感器节点的数据写入CSV文件.在AT模式下,通过Xbee Series 1进行通信,2个传感器节点上的Xbee终端设备将数据传递给连接到我的计算机的Xbee协调器 ...
- python控制电机_树莓派Python控制步进电机
步进电机控制在Python 玩了LED,开关和蜂鸣器后,我觉得自然的下一步是用步进电机或两个.这可能构成了一个想法的一部分,我不得不创建一个自动停止动画动画"转台",用于旋转和拍摄 ...
- python之torchlight使用_为什么Python被誉为全世界最高效的编程语言?
原标题:为什么Python被誉为全世界最高效的编程语言? JOBLOGIC-X (工作逻辑-X)是由900+来自Morgan Stanley, Goldman Sachs, PWC, Google, ...
- python控制硬件_用Python控制硬件14-脉冲驱动伺服电机
这次要演示的是控制伺服电机,用输入脉冲数控制旋转角度. 左侧是个低功率的步进电机,连接至右侧的伺服控制器,把复杂的相位控制转换成了简单的脉冲控制:只需确定旋转方向,输入指定数量脉冲,就能获得想要的角度 ...
- linux下运行python程序如何控制内存_用Python实现Linux系统占用指定内存,CPU满载,服务器压力测试,场景设计...
背景 提出两个需求 占满系统CPU 占用大内存 通过上网查资料,做实验使用Python实现了上述两个需求. 先看效果 执行前 内存 CPU 执行后 内存 CPU 代码实现 环境说明:代码使用Pytho ...
- python实现实时监控_基于 Python 的交换机实时监控系统的设计与实现
从高校校园网运维工作实际出发,论文提出了一种基于 Python 语言+SNMP协议的网络交换机监测系统设计思路与实现方法.整个系统系统采用B/S模式,基于轻量级的web开发框架web.py实现.后端采 ...
最新文章
- 多视图立体匹配论文分享 | Fast-MVSNet (CVPR2020)
- 话里话外:“按单制造”的业务特点(二)
- JavaScript快速入门(四)——JavaScript函数
- Java volatile关键字
- insert select 过滤掉重复数据
- 正确理解Python函数是第一类对象
- 支持向量机——深度AI科普团队
- php ffmpeg
- java 开源im_开源IM项目-InChat登录接口设计与实现(基于Netty)
- 【开源】MagicData-RAMC :180小时中文对话式语音数据集正式发布
- 分享一个千万数据的磁力搜索网站 bt书虫 php+mysql+nginx
- Win7中自带截图工具
- ant批量处理word文件内容_让你效率翻倍的15个Word批量操作小技巧
- 数据库分库分表之后如何查询统计?
- 非形式逻辑(04)因果关系和推理
- 新年新气象,新的一年新的开始,给自己定个小小的目标,以此为证
- 迷茫时代的明白人——书摘
- 加强银行余额调节表在财务管理中的作用
- 【渝粤教育】国家开放大学2018年秋季 7179-22T文献检索 参考试题
- 谈谈数据挖掘和机器学习
热门文章
- Linux中vim如何配置,Linux中vim的简单配置
- 第一次学游泳技巧_第一次学游泳作文8篇
- UVALive 6436 The Busiest City
- DNX451 与 DNXCORE50 获取当前应用程序目录
- 关于VM虚拟机一启动就会使电脑重启的问题
- 论文进入SCI、Ei等国际检索系统的意义(转贴)
- 微信支付.商家转账到零钱案例
- Warning: To load an ES module, set “type“: “module“ in the package.json or use the .mjs extensi
- VMware 虚拟机 linux执行 ifconfig 命令 eth0没有IP地址(intet addr、Bcast、Mask) UP BROADCAST MULTICAST 问题
- mysql force index 语法_MySQL FORCE INDEX 强制索引使用