riscv-sodor 学习笔记

一、背景

近学习了riscv-sodor,是用Chisel写的,作为教程可谓是比较容易理解的了。对于代码解读的部分,有相关的博客已经给出了一些注解,可以帮助初学者学习和理解。

riscv-sodor-rv32_1stage(1)_a_weiming的博客-CSDN博客

riscv-sodor-rv32_1stage(2)_a_weiming的博客-CSDN博客

riscv-sodor-rv32_1stage(3)_a_weiming的博客-CSDN博客

riscv-sodor-rv32_1stage(4)_a_weiming的博客-CSDN博客

riscv-sodor-rv32_1stage(5)_rtl & simulation_a_weiming的博客-CSDN博客

首先,riscv-sodor,有好几种小版本,年代也比较久远,有将近10年的历史了。我做仿真的版本是:

GitHub - librecores/riscv-sodor: educational microarchitectures for risc-v isa

上面这个版本跟UCB官方github的几个版本有一些小区别,不过互相作为补充,可以参考着学习。我将另外两个我见过的版本列出来:

GitHub - ucb-bar/riscv-sodor: educational microarchitectures for risc-v isaGitHub - ucb-bar/riscv-sodor at sodor-old

文章开头列举的五个学习案例,其代码结构跟sodor-old比较接近。

当然,本着童叟无欺的态度,本篇博客并不是简单的陈述一些概念,而实将我跑仿真遇上的一些问题,以及怎么解决的,给列了出来,互相交流学习。

二、实验环境

本博客的实验环境是ubuntu20.04.1,内核版本5.11.0,x86_64.

若想跑通实验,首先要搭建环境,需要耗费一些时间。

1.verilator 和 gtkwave

verilator的安装,我这里就借花献佛了,直接参考“一生一芯”中的verilator的安装包,verilator_installer.tar.gz,使用命令,./install_verilator.sh ,比较简单方便。

gtkwave是后面查看波形的工具,可以直接用,sudo apt-get install gtkwave 命令来安装。

2.按照readme中的说明,下载并安装riscv-fesvr

cd riscv-fesvr

mkdir build

cd build

../configure --prefix=/usr/local

make install

如果riscv-fesvr是空的,可以删除riscv-fesvr文件夹,rm -r riscv-fesvr,然后用命令

git submodule update --init

来重新下载,如果因为网络问题不能直接下载,可以点击github中对应的riscv-fesvr文件,如下图所示

 然后通过Download ZIP选项,将代码下来下来之后,放入riscv-sodor的目录下,同样的,riscv-test下载不下来,可以这样操作。

 当然,这是比较笨的方法,但是很有效。

三、运行实验

1,如果一切顺利,那么就可以在riscv-sodor目录下运行

make run-emulator

但是,很不幸的是,你会发现,会出现一些问题。这原因也很简单,随着时间的发展,riscv-sodor所使用的chisel3版本与现有的最先进(latest.release)的版本不兼容,这就导致了问题的出现。解决方案也很简单粗暴,直接修改版本到指定的版本号,就可以通过编译了。修改riscv-sodor目录下build.sbt文件,前三行:

val chiselVersion = System.getProperty("chiselVersion", "3.4.3")
val defaultVersions = Map("chisel3" -> "3.4.3",
                         "chisel-iotesters" -> "1.5.3")

然后再次进行make run-emulator就可以通过了。

如果不想改动,直接下载文件,然后替换也可以,参考build.sbt链接:

build.sbt · abignail/riscv-sodor - Gitee.com

当然,这里面有一个大前提,就是riscv-fesvr和riscv-test要没有问题。riscv-fesvr的问题,在第二大部分已经介绍了,只要install成功了,就可以了。这里重点说一下riscv-test,文件夹面放置的是一些测试用例。可以编译生成32bit版本的,也有64bit版本的测试例。因为riscv-sodor是32位的处理器,所以,这里只需要32bit版本的可执行文件。说到可执行文件,我们不得不说一下交叉编译工具,现有的测试例都是用C语言或者汇编写的,要是想将人类容易理解的高级语言编译成机器执行所需的机器码,就需要RISC-V Toolchain,这个工具链,在riscv芯片开发和后期的嵌入式开发,都是需要的。

2,Building RISC-V Toolchain

git clone --recursive https://github.com/riscv/riscv-gnu-toolchain.git
cd riscv-gnu-toolchain
mkdir build
cd build
export RISCV=/opt/riscv
../configure --prefix=$RISCV --enable-multilib
make -j4

需要说明的是,这里在configure的时候,需要加上--enable-multilib,目的是可以交叉编译32bit的可执行文件。

3,编译测试例并运行仿真

a,编译指令测试例:

cd riscv-test/isa

make rv32ui

make rv32mi

b,编译benchmark

cd riscv-test/benchmark

vim Makefile

找到第40行,然后在 -static 后面添加,-march=rv32i  -mabi=ilp32,然后保存退出Makefile

make

make dhrystone.riscv

到这里,我们就可以轻松的执行 make run-emulator来进行仿真了。

如果发现屏幕上顺利的打印出很多passed,那么就是运行成功了。

如图所示。

 4,make run-emulator-debug

这个过程,相比于make run-emulator,我花费的时间稍微久了一些。因为,在/riscv-sodor/emulator/commom/Makefile.include中,没有对相应的规则进行描述,也就是脚本出现了一些问题。对问题的解决方法,我已经列在了下图中。

 为了方便,我直接附上下载这个Makefile.include的连接:

emulator/common/Makefile.include · abignail/riscv-sodor - Gitee.com

5,查看波形

当我们完成了make run-emulator 和 make run-emulator-debug 两项任务。在emulator对应的目录下,就会有一个output文件。里面存放的有仿真的和debug后出现的文件。如果要看波形,可以直接打开gtkwave,然后通过选择对应的.vcd文件查看波形。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值