《基于“矿板”低成本学习FPGA》移植OpenC906第三篇-跑仿真

文摘   2024-09-12 16:00   湖南  

一. 前言

  前面我们移植了openc906到淘到的fpga板子上,生成了bit文件。打样的扩展板和器件还没准备好,趁着这个时间我们来跑一遍openc906的仿真,熟悉下。    

   这里开发环境基于win11+WSL2+Ubuntu24, wsl环境准备可以参考之前分享的文章。

.准备工作

2.1下载源码

git clone https://github.com/XUANTIE-RV/openc906.git

如果连接不上可以取消代理设置

git config --global --unset http.proxy

git config --global --unset https.proxy

2.2安装必备工具

sudo apt install make

sudo apt install gtkwave iverilog

2.3CSH配置

sudo su切换到root用户

2.3.1安装csh

sudo apt install csh

2.3.2切换bashcsh

sudo nano /etc/passwd

将最后的/bin/bash改为/bin/csh

Ctrl+x退出,提示是否保存修改,输入y回车修改后退出。

重新打开终端,sudo su切换到root用户,并echo $SHELL查看是否切换到了CSH

2.2.3配置环境

cd openc906/C906_RTL_FACTORY/

source setup/setup.csh

2.4编译工具链配置

2.4.1下载工具链

从以下地址下载

https://www.xrvm.cn/community/download?id=4352528597269942272

我这里下载的是Xuantie-900-gcc-elf-newlib-x86_64-V2.10.2-20240904.tar.gz

wget https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource//1725611943439/Xuantie-900-gcc-elf-newlib-x86_64-V2.10.2-20240904.tar.gz

解压

tar -zxvf Xuantie-900-gcc-elf-newlib-x86_64-V2.10.2-20240904.tar.gz

2.4.2配置工具链路径

sudo nano openc906/smart_run/setup/example_setup.csh

设置工具链路径为setenv TOOL_EXTENSION /home/qinyunti/Xuantie-900-gcc-elf-newlib-x86_64-V2.10.2/bin

source openc906/smart_run/setup/example_setup.csh

提示语法错误

root@qinyunti:/home/qinyunti# source openc906/smart_run/setup/example_setup.csh
bash: /*Copyright: No such file or directory
bash: openc906/smart_run/setup/example_setup.csh: line 3: syntax error near unexpected token `('
bash: openc906/smart_run/setup/example_setup.csh: line 3: `Licensed under the Apache License, Version 2.0 (the "License");'

把前面的license部分注释掉

.编译

cd openc906/smart_run/

每次重新打开过终端后以下两条指令都需要执行

source ../C906_RTL_FACTORY/setup/setup.csh

source ./setup/example_setup.csh

make help可以查看命令

进行编译make compile,提示没有work目录需要手动创建

root@qinyunti:/home/qinyunti/openc906/smart_run# make compile
[THead-smart] Compiling smart now ...
[THead-smart] SIM = iverilog
/bin/sh: 1: cd: can't cd to ./work
make: *** [Makefile:65: compile] Error 2

创建work目录

mkdir work

在此编译提示以下错误

qinyunti% make compile
[THead-smart] Compiling smart now ...
[THead-smart] SIM = iverilog
iverilog: cannot open command file /gen_rtl/filelists/C906_asic_rtl.fl for reading.
make: *** [Makefile:65: compile] Error 1
qinyunti%

gen_rtl/filelists/C906_asic_rtl位于C906_RTL_FACTORY目录下而不是/目录下

查看Makefile文件

sudo nano Makefile

路径如下

ifeq ($(SIM), iverilog)
SIM_FILELIST := $(SIM_FILELIST) -f ${CODE_BASE_PATH}/gen_rtl/filelists/C906_asic_rtl.fl -f ${CODE_BASE_PATH}/gen_rtl/filelists/tdt>else
SIM_FILELIST := $(SIM_FILELIST) -f ../logical/filelists/sim.fl
endif
qinyunti% echo ${CODE_BASE_PATH}
/home/qinyunti/openc906/smart_run

看到目录对应不上

必须要位于openc906/C906_RTL_FACTORY下执行source ./setup/setup.csh

才会将${CODE_BASE_PATH}设置为openc906/C906_RTL_FACTORY路径才能对应上。

所以正确步骤如下,每一步的路径都要对。

假设当前位于 openc906外,

cd openc906/C906_RTL_FACTORY

source ./setup/setup.csh

然后

cd ../smart_run/

source ./setup/example_setup.csh

然后再make compile

如果还有提示

qinyunti% make compile
[THead-smart] Compiling smart now ...
[THead-smart] SIM = iverilog
xuantie_core.vvp: Permission denied
error: Code generator failure: -1
make: *** [Makefile:65: compile] Error 255

则使用注意要切换到root用户执行

.Runcase

work目录下生成了vvp文件

qinyunti# ls work
xuantie_core.vvp
qinyunti#

make showcase可以看到caselist

qinyunti# make showcase
Case lists:
ISA_THEAD
ISA_INT
ISA_LS
ISA_FP
coremark
MMU
interrupt
exception
debug
csr
cache
qinyunti#

执行coremark

make runcase CASE=coremark

提示如下错误

qinyunti# make runcase CASE=coremark
[THead-smart] Compiling smart now ...
[THead-smart] SIM = iverilog
Toolchain path: /home/qinyunti/Xuantie-900-gcc-elf-newlib-x86_64-V2.10.2/bin
/bin/sh: 1: Syntax error: Bad fd number
make[2]: *** [setup/smart_cfg.mk:61: coremark_build] Error 2
make[1]: *** [Makefile:101: buildcase] Error 2
make: *** [Makefile:125: runcase] Error 2
qinyunti#

先跳到/bin

cd /bin

cp bash ./sh

再回到smart_run目录下,重新runcase

还有错误

qinyunti# make runcase CASE=coremark
[THead-smart] Compiling smart now ...
[THead-smart] SIM = iverilog
Toolchain path: /home/qinyunti/Xuantie-900-gcc-elf-newlib-x86_64-V2.10.2/bin
make[2]: *** [setup/smart_cfg.mk:61: coremark_build] Error 2
make[1]: *** [Makefile:101: buildcase] Error 2
make: *** [Makefile:125: runcase] Error 2
qinyunti#

查看log

sudo nano work/coremark_build.case.log

看到如下错误

原来是Srec2vmem无可执行权限

添加可执行权限

sudo chmod a+x ./tests/bin/Srec2vmem

重新runcase

make runcase CASE=coremark DUMP=on

DUMP=on表示生成vcd文件。

coremark我电脑太慢了,换个简单点的跑

make runcase CASE=csr DUMP=on

这个很快就跑完了

五. 查看波形文件

波形文件位于work目录下

test.vcd

输入gtkwave回车,打开gtkwave

打开文件

此时可以双击左边的信号,查看波形

.总结

以上跑了一遍仿真,初步了解了整个流程,整个过程有如下几点需要注意

1.需要手动创建work目录

2.需要切换bashcsh,先要安装csh,使用root用户,避免后面权限问题, 注意需要修改root用户的bashcsh

3.设置环境,注意一定要在openc906/C906_RTL_FACTORYsource,否则目录不对找不到C906_asic_rtl.fl文件。

cd openc906/C906_RTL_FACTORY

source ./setup/setup.csh

4.设置编译器

cd ../smart_run/

source ./setup/example_setup.csh

example_setup.csh文件中前面使用了/**/ 注释不符合语法,改为#注释掉。

5.复制/bin/bash/bin/sh

cd /bin

cp bash ./sh

6.Srec2vmem文件添加可执行权限,sudo chmod a+x ./tests/bin/Srec2vmem












嵌入式Lee
嵌入式软硬件技术:RTOS,GUI,FS,协议栈,ARM,总线,嵌入式C,开发环境 and blablaba....多年经验分享,非硬货不发,带你扒开每一个技术背后的根本原理。
 最新文章