Verilator入门11:仿真玄铁测试case

这一节,介绍下如何使用verilator仿真玄铁,之前有相关介绍,本节将进一步介绍下玄铁具体case的仿真,首先需要clone玄铁代码:

git clone https://github.com/kknet/openc910.git

同时下载交叉编译工具,网站地址:https://www.xrvm.cn/community/download

下载工具:

我们这里下载的是x86_64版本,根据实际的操作系统下载,将文件解压到c910目录下面。在c910目录下运行如下脚本来设置必要的环境变量:

export TOOL_EXTENSION=/XXXXXXXXX/openc910/Xuantie-900-gcc-elf-newlib-x86_64-V2.0.3/bin
export VERILATOR_ROOT=/XXXXXXXXX/verilator
export PATH=$VERILATOR_ROOT/bin:$PATH
export PROJECT_PATH=`pwd`
export CODE_BASE_PATH=$PROJECT_PATH/C910_RTL_FACTORY

注意XXXXXXXX改成对应的目录,第一个TOOL_EXTENSION是我们前面下载的交叉编译工具的目录(注意设置到bin目录),第二个为VERILATOR的目录。

进入smart_run目录,这里面有一个Makefile,在我们设置好前面的环境变量之后,我们就可以通过这个Makefile来跑目前的一些测试case,现存的测试case在目录/smart_run/tests/cases下:

首先输入

make help

输出结果(目前测试的Makefile最后几个打印行没有加上双引号,会报错打不出来后面几行,如果遇到类似的问题,注意要加上):

注意修改Makefile的两个地方:

VERILATOR_FLAGS += --no-timing
SIMULATOR_OPT := -O0 -x-assign 0 -Wno-fatal --no-timing --threads ${THREADS}

这里加入--no-timing的verilator编译选项,因为verilator不支持#0这种延时相关的操作语句,加上这一选项会自动忽略掉时间相关的字段。

在smart_run目录下构建work文件夹。

我们跑一下coremark这个case,在smart_run目录下输入指令:

make runcase CASE=coremark SIM=verilator THREADS=8 

会先使用交叉编译工具编译coremark这个测试case,然后先调用verilator编译c910的整个project,如果打印如下消息说明整个编译过程完成了。

此时,在work/obj_dir目录下会生成我们要仿真的程序Vtop,此时会自动运行该仿真程序,也可以进入work目录下,输入:

./obj_dir/Vtop

运行该仿真程序,结果如下:

说明仿真已经跑完了。

注意目前实例代码会打印一条异常信息,对应的是core_portme.c里面的109行,可以先不管注释掉重新编译就可以了:

先说到这里,后面会进一步详细分析。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值