嵌入式Lee

文章数:196 被阅读:578672

账号入驻

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

最新更新时间:2024-09-12
    阅读数:

一. 前言

前面我们移植了 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 切换 bash csh

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. 需要切换 bash csh, 先要安装 csh ,使用 root 用户,避免后面权限问题, 注意需要修改 root 用户的 bash csh

3. 设置环境,注意一定要在 openc906/C906_RTL_FACTORY source ,否则目录不对找不到 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的文章

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: TI培训

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved