不用花几百块钱买开发板,也不需要折腾复杂的官方模拟器,只需要有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/releases​github.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模拟器(一)相关推荐

  1. python方向键控制角色_用python和pygame游戏编程入门-控制角色移动

    在上一节中我们知道了事件,以及如何捕捉键盘事件进行响应,本届我们结合第一节何上一节的内容,做一个用键盘控制角色移动的功能,代码如下: #!/usr/bin/env python #指定图像文件名称 b ...

  2. python高效处理文件_使用Python语言高效地处理一个文本文件

    使用Python语言高效地处理一个文本文件: # -- encoding: utf-8 -- # 脚本功能:在指定的文件中查找指定的字符串 # 此脚本接受两个参数 # 参数1:指定一个文件名,在这个文 ...

  3. python编程控制机器人_基于Python开发的微信图灵机器人

    在过去的几个月中,由于在新生群中回答问题费时费力,同时又有许多重复而又有固定答案的回答,我受到一些知乎文章的启发,维护了一个基于itchat的群聊机器人.从刚开始接入图灵机器人时只会尬聊的机器人,之后 ...

  4. python 手机控制电脑_用Python实现电脑手机文件互传秒完成

    点击上方Python知识圈,设为星标回复1024获取Python资料阅读文本大概需要 3 分钟点击「阅读原文」查看pk哥原创精品视频.

  5. python如何控制传感器_在Python中单行写入传感器数据

    我正在尝试使用Python将来自2个传感器节点的数据写入CSV文件.在AT模式下,通过Xbee Series 1进行通信,2个传感器节点上的Xbee终端设备将数据传递给连接到我的计算机的Xbee协调器 ...

  6. python控制电机_树莓派Python控制步进电机

    步进电机控制在Python 玩了LED,开关和蜂鸣器后,我觉得自然的下一步是用步进电机或两个.这可能构成了一个想法的一部分,我不得不创建一个自动停止动画动画"转台",用于旋转和拍摄 ...

  7. python之torchlight使用_为什么Python被誉为全世界最高效的编程语言?

    原标题:为什么Python被誉为全世界最高效的编程语言? JOBLOGIC-X (工作逻辑-X)是由900+来自Morgan Stanley, Goldman Sachs, PWC, Google, ...

  8. python控制硬件_用Python控制硬件14-脉冲驱动伺服电机

    这次要演示的是控制伺服电机,用输入脉冲数控制旋转角度. 左侧是个低功率的步进电机,连接至右侧的伺服控制器,把复杂的相位控制转换成了简单的脉冲控制:只需确定旋转方向,输入指定数量脉冲,就能获得想要的角度 ...

  9. linux下运行python程序如何控制内存_用Python实现Linux系统占用指定内存,CPU满载,服务器压力测试,场景设计...

    背景 提出两个需求 占满系统CPU 占用大内存 通过上网查资料,做实验使用Python实现了上述两个需求. 先看效果 执行前 内存 CPU 执行后 内存 CPU 代码实现 环境说明:代码使用Pytho ...

  10. python实现实时监控_基于 Python 的交换机实时监控系统的设计与实现

    从高校校园网运维工作实际出发,论文提出了一种基于 Python 语言+SNMP协议的网络交换机监测系统设计思路与实现方法.整个系统系统采用B/S模式,基于轻量级的web开发框架web.py实现.后端采 ...

最新文章

  1. 多视图立体匹配论文分享 | Fast-MVSNet (CVPR2020)
  2. 话里话外:“按单制造”的业务特点(二)
  3. JavaScript快速入门(四)——JavaScript函数
  4. Java volatile关键字
  5. insert select 过滤掉重复数据
  6. 正确理解Python函数是第一类对象
  7. 支持向量机——深度AI科普团队
  8. php ffmpeg
  9. java 开源im_开源IM项目-InChat登录接口设计与实现(基于Netty)
  10. 【开源】MagicData-RAMC :180小时中文对话式语音数据集正式发布
  11. 分享一个千万数据的磁力搜索网站 bt书虫 php+mysql+nginx
  12. Win7中自带截图工具
  13. ant批量处理word文件内容_让你效率翻倍的15个Word批量操作小技巧
  14. 数据库分库分表之后如何查询统计?
  15. 非形式逻辑(04)因果关系和推理
  16. 新年新气象,新的一年新的开始,给自己定个小小的目标,以此为证
  17. 迷茫时代的明白人——书摘
  18. 加强银行余额调节表在财务管理中的作用
  19. 【渝粤教育】国家开放大学2018年秋季 7179-22T文献检索 参考试题
  20. 谈谈数据挖掘和机器学习

热门文章

  1. Linux中vim如何配置,Linux中vim的简单配置
  2. 第一次学游泳技巧_第一次学游泳作文8篇
  3. UVALive 6436 The Busiest City
  4. DNX451 与 DNXCORE50 获取当前应用程序目录
  5. 关于VM虚拟机一启动就会使电脑重启的问题
  6. 论文进入SCI、Ei等国际检索系统的意义(转贴)
  7. 微信支付.商家转账到零钱案例
  8. Warning: To load an ES module, set “type“: “module“ in the package.json or use the .mjs extensi
  9. VMware 虚拟机 linux执行 ifconfig 命令 eth0没有IP地址(intet addr、Bcast、Mask) UP BROADCAST MULTICAST 问题
  10. mysql force index 语法_MySQL FORCE INDEX 强制索引使用