导言
最近花了点时间用VCS仿真了一下平头哥的开源RISC-V架构CPU,跑了几个case,但还没有时间去研究,仅仅是跑了一下,因为官方的教程没有特别的详细,加上有时候会出各种报错,所以把仿真的流程记录一下。
平台环境
Linux:CentOS7 仿真器:VCS2020 波形debug:Verdi2020 GNU tool chain:X86(2.6.0) 注意:我记录的问题仅在以上环境出现,并且后续版本不排除官方会修复一些问题,比如之前版本有脚本语法错误,当前版本就修复了。
前期准备
执行命令clone平头哥的仓库:
$git clone git@github.com:T-head-Semi/openc910.git
在官网下载工具链,官网地址如下:
https://occ.t-head.cn/community/download?id=4090445921563774976
Xuantie-900-gcc-elf-newlib-mingw-V2.6.1-20220906.tar.gz//这是我下载版本
下载完毕解压。
我放的目录如下:
└── openc910 ├── C910_RTL_FACTORY │ ├── gen_rtl │ └── setup ├── doc │ ├── openc910_datasheet.pdf │ ├── QR_code_openXuantie.png │ ├── 347216204351223201C910347224250346210267346211213345206214.pdf │ └── 347216204351223201C910351233206346210220346211213345206214.pdf ├── LICENSE ├── README.md ├── smart_run │ ├── impl │ ├── logical │ ├── Makefile │ ├── setup │ ├── tests │ └── work └── tools └── newlib
执行:
$cd openc910/smart_run/setup // 进入该文件夹 $gvim example_setup.csh // 打开文件
将如下一行修改为你自己的工具路径,就是你刚才下载并解压的工具链,这里我放在tools下,newlib就是那个解压后的工具,我改了个短的名字。
setenv TOOL_EXTENSION /usr/example/openc910/tools/newlib/bin
在smart_run目录下建立空文件夹work,这个文件夹我下载的代码版本缺失,实际需要用来存放仿真的一些文件。
注意C910_RTL_FACTORY文件夹下有个setup文件,里面是setup.csh,执行:
$cd openc910/C910_RTL_FACTORY/setup $csh $source setup.csh Root of code base has been specified as: /usr/example/openc910/C910_RTL_FACTORY
继续执行:
$cd openc910/smart_run/setup $csh $source setup.csh Toolchain path($TOOL_EXTENSION): /usr/example/openc910/tools/newlib/bin(你之前设置的工具路径)
最后一步修改文件夹smart_run下的Makefile 执行make help会打印可用的命令,如果你下载的和我是一个版本的代码,执行完会有报错,是因为最后几行打印信息,把”号丢掉了,大家添加上即可。文件中这2处如下设置,注意,我这里仅用VCS仿真,所以DUMP默认我就打开,后续命令就不用重复输出命令。
SIM = vcs DUMP = on
关于VCS的命令SIMULATOR_OPT处,修改为如下,对于2020版本最后加-debug_acc+all -debug_region+cell+encrypt,如果是比较老的版本加-debug_all,因为新版本快不支持-debug_all了,如果用这个命令,VCS会给警告。
SIMULATOR_OPT := -sverilog -top tb -full64 -kdb -lca -debug_access +nospecify +notimingchecks +lint=TFIPC-L -debug_acc+all -debug_region+cell+encrypt
仿真生成的文件以及log,全部在work文件夹,波形文件名字为:novas.fsdb大家进入work执行相关命令,用verdi打开文件即可,也可以在makefile中添加命令:
verdi: @cd ./work && verdi -sv -f ../logical/filelists/sim.fl -ssy -ssv -top tb -ssf novas.fsdb &
这样就可以直接用命令直接打开波形文件了。
仿真
前期准备工作完成,执行命令make showcase 打印可用的case,如下:
Case lists: ISA_AMO smoke_bus debug_gpr ISA_THEAD cache_op debug_memory ISA_FP ISA_IMAC coremark hello_world MMU csr ISA_BARRIER plic_int sleep
我们执行一个hello_world,输入命令:make runcase CASE=hello_world如果你用其他仿真器(例如Verilator),后面需要添加SIM=Verilator,或者makefile文件里面修改默认值。执行make help,会打印出执行命令的格式。
执行完,命令行打印如下:
Hello Friend! Welcome to T-HEAD World! !!! PASS !!!after ASM c is cangedd to 3!
**********************************************
simulation finished successfully
**********************************************
$finish called from file “../logical/tb/tb.v”, line 273.
$finish at simulation time 917950000
V C S S i m u l a t i o n R e p o r t
Time: 91795000000 fs
CPU Time: 16.990 seconds; Data structure size: 83.6Mb
然后执行make verdi 就可以打开波形了
总结
简单给个教程,减少大家查错误和看文档的时间,如果还有遇到一些问题,还可以和我讨论,当前就先把仿真跑起来,这个开源CPU还是值得一学的,尽管被删减了不少功能。