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一步步进行。

环境安装

环境安装流程如下:

  1. 首先确认系统版本,建议的系统为Ubuntu 18.04,Orange Pi 上的版本为Ubuntu 22.04.3 LTS

  2. 也需要安装一些工具,这条指令只有一行,复制的时候需要注意。

    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
    
  3. 当然,没有在Orange Pi 上安装VCS + Verdi,那么就用iverilog + GTKwave来实现编译仿真看波形的操作了:

    sudo apt install iverilog gtkwave
    
  4. 克隆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 工具链文档

  1. 克隆仓库

    git clone https://github.com/riscv/riscv-gnu-toolchain
    

    注意,整个克隆可能需要大于6.65GB的磁盘容量,和下载流量。

  2. 安装依赖项

    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
    
  3. 配置和构建

    因为看到刚才在文档中下载的文件有Newlib的字样,所以选择这种方式进行配置:

    ./configure --prefix=/opt/riscv
    make
    

    这个过程等了很长时间,步骤1提到的大约6.55G的内容应该是在这里下载的。

  4. 更新PATH

    export PATH=/opt/riscv/bin:$PATH
    
  5. 验证安装

    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的文件:

image_generated

以第一组rv32mi-p-breakpoint为例:

  • rv32mi-p-breakpoint为二进制文件,编译后的程序烧录文件;
  • rv32mi-p-breakpoint.dump为程序对应的机器码顺序;
  • rv32mi-p-breakpoint.verilogICMDCM对应的存储数据。

这些内容都是后续仿真,调试中不可或缺的文件。

运行仿真

切换到仓库主目录下,可以运行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中返回:

image_test_pass

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

image_cpu_use

运行使用的时间log如下:

real	1m57.420s
user	2m13.176s
sys		0m0.919s

显然,这个时间相对于PC级的处理器还是有些差距的。

显示波形

已经安装了GTKWave,所以可以将仿真的结果以GUI的画面展示出来:

// Using GTKWave:
make wave SIM=iverilog

基于图形化的桌面是可以看到GTKWave的启动,以及仿真的波形状态:

image_sim_wave

图形界面上看波形,操作会稍微有点卡,如果引出来的信号少一点,效果略微流畅一些。

回归测试

官方手册还提供了跑回归测试的方法:

// 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相关的开发了。

Date

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部