Orange_Pi_AIpro运行蜂鸟RISC-V仿真
突发奇想,试一试Orange Pi AIpro上运行蜂鸟RISC-V的仿真。
准备
默认已经有一个Orange Pi AIpro,并且对设备进行一定的初始化配置,可以参考上一篇博文开源硬件初识——Orange Pi AIpro(8T)。
其次,默认要了解Verilog相关的EDA工具使用。
Humming Bird 相关资料
蜂鸟RISC-V开源项目:e203-hbirdv2 GitHub仓库地址,Gitee仓库地址,Quick Start-up;
最主要的步骤需要跟着Quick start一步步进行。
环境安装
环境安装流程如下:
-
首先确认系统版本,建议的系统为
Ubuntu 18.04,Orange Pi 上的版本为Ubuntu 22.04.3 LTS; -
也需要安装一些工具,这条指令只有一行,复制的时候需要注意。
sudo apt-get install autoconf automake autotools-dev curl device-tree-compiler libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev git -
当然,没有在Orange Pi 上安装
VCS + Verdi,那么就用iverilog + GTKwave来实现编译仿真看波形的操作了:sudo apt install iverilog gtkwave -
克隆
e203_hbirdv2仓库:# 从GitHub克隆 git clone https://github.com/riscv-mcu/e203_hbirdv2.git # 或者从Gitee克隆 git clone https://gitee.com/riscv-mcu/e203_hbirdv2.git
第二项的安装工具,有些系统里面已经存在了,整体内容比较多,安装之后还得一个个对,哪些是没有安装上的。
或者直接再安装一遍,如果已经安装过会提示下面的字样:
autoconf is already the newest version (2.71-2).
automake is already the newest version (1:1.16.5-1.3).
autotools-dev is already the newest version (20220109.1).
bc is already the newest version (1.07.1-3build1).
......
编译自测
这一步花了不少时间,但是快做完了,发现手册上的Note有说明:
In <your_e203_dir>/riscv-tools/riscv-tests/isa/generated directory, there are pre-generated executable files. If the test codes have been changed, just using above commands could regenerate executable files.
也就是说,仓库里是带有编译好的文件,如果再执行一次编译,只是将文件覆盖。如果没有编译需求的话,可以先跳过这一步,直接运行Demon进行仿真。
系统架构的原因
官方工具链里的系统架构是Ubuntu x86-64的,而Orange Pi AIPro的架构为aarch64也就是ARM64(可以通过指令uname -m查询)。
执行文件如果直接执行,被提示如下问题:
./riscv-nuclei-elf-gcc
bash: ./riscv-nuclei-elf-gcc: cannot execute binary file: Exec format error
使用file指令,查看当前二进制文件的架构与当前系统是否匹配:
file riscv-nuclei-elf-gcc
riscv-nuclei-elf-gcc: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.18, BuildID[sha1]=8b45da0b8ea77ca13deb8d87bc6e5bdb23c04d38, stripped
从 file 命令的输出可以看到,riscv-nuclei-elf-gcc 是一个 64 位的 x86-64 架构的 ELF 可执行文件,动态链接,并使用 ld-linux-x86-64.so.2 作为解释器。这意味着该文件只能在 x86-64 架构的系统上运行。
这么看,就需要重新编译工具链了。
重新编译工具链
访问工具链的源代码,可以在当前系统上重新编译工具链,以便生成适用于当前架构的二进制文件。
Gitee 上的 RISC-V GNU 工具链文档
-
克隆仓库
git clone https://github.com/riscv/riscv-gnu-toolchain注意,整个克隆可能需要大于6.65GB的磁盘容量,和下载流量。
-
安装依赖项
Ubuntu系统,执行以下内容:
sudo apt-get install autoconf automake autotools-dev curl python3 libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev ninja-build -
配置和构建
因为看到刚才在文档中下载的文件有
Newlib的字样,所以选择这种方式进行配置:./configure --prefix=/opt/riscv make这个过程等了很长时间,步骤1提到的大约6.55G的内容应该是在这里下载的。
-
更新
PATHexport PATH=/opt/riscv/bin:$PATH -
验证安装
riscv64-unknown-elf-gcc --version
尝试到第3步,但是数据下载太慢了,无奈终止,使用已经编译好的数据继续进行。
编译RSIC-V程序产生烧录文件
如果不出意外的话,按照目录上需要的内容进行动态链接库的引用,注意rv_linux_bare_9.21_centos64.tgz.bz2需要替换为下载的压缩包名称,或者是自己编译的路径:
cp rv_linux_bare_9.21_centos64.tgz.bz2 ~/
cd ~/
tar -xjvf rv_linux_bare_9.21_centos64.tgz.bz2
cd <your_e203_dir>/
mkdir -p ./riscv-tools/prebuilt_tools/prefix/bin
cd ./riscv-tools/prebuilt_tools/prefix/bin/
ln -s ~/rv_linux_bare_19-12-11-07-12/bin/* .
最后一步注意,需要创建bin目录下面的所有文件到动态链接库,之后使用指令进行编译:
cd <your_e203_dir>/riscv-tools/riscv-tests/isa
source regen.sh
主要内容为<your_e203_dir>/riscv-tools/riscv-tests/isa/generated的文件:

以第一组rv32mi-p-breakpoint为例:
rv32mi-p-breakpoint为二进制文件,编译后的程序烧录文件;rv32mi-p-breakpoint.dump为程序对应的机器码顺序;rv32mi-p-breakpoint.verilog为ICM,DCM对应的存储数据。
这些内容都是后续仿真,调试中不可或缺的文件。
运行仿真
切换到仓库主目录下,可以运行Verilog code的编译,这里以iverilog为例:
cd <your_e203_dir>/vsim
make clean
make install
// For iVerilog:
make compile SIM=iverilog
开始默认Testcase的仿真:
// For iVerilog:
make run_test SIM=iverilog
在Terminal中返回:

默认case工作的时候,Orange Pi AI pro只有一个CPU工作在100%的状态:

运行使用的时间log如下:
real 1m57.420s
user 2m13.176s
sys 0m0.919s
显然,这个时间相对于PC级的处理器还是有些差距的。
显示波形
已经安装了GTKWave,所以可以将仿真的结果以GUI的画面展示出来:
// Using GTKWave:
make wave SIM=iverilog
基于图形化的桌面是可以看到GTKWave的启动,以及仿真的波形状态:

图形界面上看波形,操作会稍微有点卡,如果引出来的信号少一点,效果略微流畅一些。
回归测试
官方手册还提供了跑回归测试的方法:
// For iVerilog:
make regress_run SIM=iverilog
make regress_collect
在这种情况下,CPU一直都是单核拉满,而且4个核看上去是随机工作的,总共用时:
real 68m43.395s
user 68m6.481s
sys 0m4.010s
哈哈,对的,花了68分钟才跑完。
整体体验还是不错的,就是没有把gcc编译这一部实现,如果能实现就能使用Orange Pi AIpro进行RISC-V相关的开发了。








![【代码随想录】【算法训练营】【第35天】[134]加油站 [135]分发糖果 [860]柠檬水找零 [406]根据身高重建队列](https://img-blog.csdnimg.cn/direct/8f9cc4a77f6345e99111333c898ab9bb.png)









