首页 > 其他分享 >64位的单周期RISC-V 模拟器

64位的单周期RISC-V 模拟器

时间:2022-10-03 18:44:45浏览次数:88  
标签:项目 实现 RISC npc PA 64 Verilog 模拟器

分享一个我最近完成过的小项目--64位的单周期 RISC-V 模拟器,这个项目我最近参与一生一芯计划过程中完成的一个小项目。

需要用到的工具:Verilog、Verilator、计算机组成原理、汇编、RISC-V、C语言、C++、编译与链接、Mekfile、Linux、Shell


1. 于开始前

由于一生一芯计划的性质以及学术诚信的原因,该项目不会开源,本文章重在分享该项目的实现思路。当然,如果你在尝试复现该项目时,遇到了问题可以发给我邮箱([email protected]),如何提问可以参考这个网站


2.项目简介

该项目使用 Verilog 来实现单周期 RISC-V CPU 的行为,C 语言实现相关外设以及存储器的功能,外设包括 VGA、时钟、串口等。
最终的完整项目可以运行任意 C 语言程序,甚至可以跑一个红白机模拟器。


3.项目组成

该项目可以分为两个部分:
【1】使用 Verilog 编写的 RTL 代码:该部分实现了 CPU 除存储器之外所有功能。(这里我后面简称为npc)
【2】PA实验提供的框架代码:南京大学一个超硬核的编程实验(一个用来折磨人的实验


4.项目实现思路


【1】完成 PA 实验

完成 PA 实验至少到 PA2,做到熟悉 PA 实验提供的代码框架,便于后续的使用。


【2】编写 npc

使用 Verilog 实现一个64位单周期 RISC-V CPU除存储器之外所有功能,具体实现可以参考南京大学的数电实验


【3】将 npc 接入 PA 框架中

完成上面的俩步后,便是需要将npc接入到PA提供的框架代码中了。具体可以细分为几步:

① 熟悉编译过程


通过阅读 Verilator 编译生成的 Makefile,能给自己编写一个新的 Makefile 实现 C 语言仿真 Verilog,即调用通过 Verilator 生成的 C++ 文件,为后续把 npc 接入到 PA 框架中做好基础


② 改写 NEMU

改写 PA 中 NEMU 代码,具体的是,先改写 KConfig 配置文件,使其支持一个新 ISA-npc。作为验证,应先是直接复制在 PA2 中已经实现的 RISC-V64,改写对应的代码,完成编译。


③ 封装 npc 并调用

通过编写 API,封装 Verilog 编译生成的 C++文件,再改写 NEMU 中 inst.c 的实现,使其是调用我们刚刚封装的 API 实现正常工作的。


【4】调试与优化

这步时,我们已经有了一个完成的框架了,接着要做的就是不断的调试加优化了,而在调试时我们可以复用PA提供的一切的基础设施、外设与测试环境,这就是为什么要引用 PA 框架代码的原因之一。

标签:项目,实现,RISC,npc,PA,64,Verilog,模拟器
From: https://www.cnblogs.com/luokeIT/p/16750977.html

相关文章

  • POJ 1064 Cable master(浮点数二分 精度处理)
    POJ1064Cablemaster(浮点数二分精度处理)题目:​ 给出n棵木头,现在要求将木头裁成k个长度相同的小木头,请问这k个小木头的最大长度是多少。裁出来后不支持拼接。所有长度......
  • supervisor /usr/lib64/python2.7/socket.py line: 224
    配置了supervisor之后,写好了配置,最后发现一直报这个错误,supervisorerror:<class‘socket.error’>,[Errno2]Nosuchfileordirectory:file:/usr/lib64/python2.7/......
  • linux base64编码、解码
    base64编码解码base64编码base64file功能:从指定的文件file中读取数据,编码为base64的字符串然后输出;echo“string”|base64功能:将字符串string+换行编码为base64的字......
  • CF1144G & CF1693D & CF1647F
    CF1144G:给定一个长度为\(n\)的序列\(A\)。问能否把它拆成一个严格递增序列和一个严格递减序列(可以为空),如果有解则输出方案。\(n\le2\times10^5\)。设\(f_{i,0}......
  • storcli64
    storcli64常用操作查看所有的raid控制器以及所属的虚拟驱动设备:storcli64/call/vallshow查看raid控制器id为0、虚拟驱动设备id为0的所属磁盘:storcli64/c0/v0show......
  • 安装mysql-community-server-8.0.30-1.el7.x86_64报错解决办法
    1.错误如下:warning:/usr/local/src/mysql-community-server-8.0.30-1.el7.x86_64.rpm:HeaderV4RSA/SHA256Signature,keyID3a79bd29:NOKEYerror:Faileddepend......
  • 0064-Tui-图表示例
    环境Time2022-08-16Rust1.63.0Tui0.18.0前言说明参考:https://github.com/fdehau/tui-rs/blob/master/examples/chart.rs目标使用tui-rs显示图表。常量数据......
  • Codeforces Round #643 (Div. 2) ABD
    这套题目也太顶了,强推A-SequencewithDigitshttps://codeforces.com/contest/1355/problem/A题目大意:给定一个初始数值n,问我们在每次都加上这个数字的数位最大值*......
  • js 根据 base64 和图片 宽高 ,截取参数 裁减图片 并且返回 处理后的 base64 图片
    参考来源https://stackoverflow.com/questions/31193418/html5-canvas-todataurl-returns-blankhttps://www.geeksforgeeks.org/how-to-crop-images-in-reactjs/https:/......
  • Base64(AES128(字段,秘钥))对称加密
     代码实现如下:publicclassSecurityAESUtils{privatestaticStringAES_KEY="123456789qazwsx#";privatestaticStringAES_MODE="AES/ECB/PKCS5Pa......