这一节,介绍下如何使用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
运行该仿真程序,结果如下:
先说到这里,后面会进一步详细分析。