上篇博客已经说明了Syntacore公司提供的工具链和源代码的环境安装。本博客分析其默认的配置。
分析脚本
首先分析Syntacore公司提供的开源代码文件内容
$ cd $(SCR1_DIR)(本人设置的地址为~/scr1)
$ ls
其中sim目录中放置了测试用的testcase,src放置了rtl代码。build目录为软件工具链的中间文件以及hex文件生成目录。
接下来分析makefile。
$ gvim Makefile
可以看到,makefile分为硬件和软件两个部分,软件部分调用了sim目录下的对应指令集的Makefile,硬件部分直接调用各个仿真工具用于仿真。
部分代码分析如下:
这个部分是我们可以修改测试用指令集的地方。第一次试跑的时候将所有指令集都打开。
当我们调用$ make run_vcs时候会运行如下脚本, 依赖项$(test_info)会调用软件部分来编译链接生成仿真用的hex文件。硬件部分则是调用vcs跑软件仿真。
软件部分脚本如下:
根据你所选择的的指令集进入对应的文件夹并调用对应的makefile。
由于本人使用的服务器上系统版本比较老,无法执行riscv工具链,所以只能将软件部分移植到Ubuntu系统中。所以服务器上版本将run_vcs:后依赖项删除,如下所示
Ubuntu系统中将硬件部分删除,如下所示:
本人的系统默认采用vcs工具,所以将default后面更改为run_vcs
准备测试case
注:此部分为软件部分,所以下面的内容是在Ubuntu系统中完成。
接下来准备测试case,用于跑指令集测试。
riscv-isa test case
如果TARGETS宏加上了riscv-isa(也就是第84行没有被注释掉),那么需要下载riscv-tests。将riscv-tests克隆到自己定义的空目录<RISCV_TESTS_PATH>中
$ git clone https://github.com/riscv/riscv-tests
$ cd riscv-tests
$ git checkout a9433c4daa287fbe101025f2a079261a10149225
然后设置环境变量(建议加到~/.bashrc中)
export RISCV_TESTS=<RISCV_TESTS_PATH>
riscv-compliance test case
如果TARGETS宏加上了riscv-compliance(也就是第87行没有被注释掉),那么需要下载riscv-compliance。将riscv-compliance克隆到自己定义的空目录<RISCV_COMPLIANCE_TESTS_PATH>中
git clone https://github.com/riscv/riscv-compliance
cd riscv-compliance
git checkout 9f280717f26f50833357db9bfb77a8c79835f162
然后设置环境变量(建议加到~/.bashrc中)
export RISCV_TESTS=<RISCV_COMPLIANCE_TESTS_PATH>
coremark testbench test case
如果TARGETS宏加上了coremark(也就是第91行没有被注释掉),那么需要下载coremark。从网站http://www.eembc.org/coremark/download.php, 或者克隆 https://github.com/eembc/coremark
将以下文件拷贝至SCR1目录下的 sim/tests/benchmarks/coremark/src
core_main.c
core_list_join.c
coremark.h
core_matrix.c
core_state.c
core_util.c
3.开跑
以上测试case都准备好以后,进入SCR1目录
$ cd $(SCR1_DIR)
官方的makefile脚本options说明如下
$ make run_<SIMULATOR> BUS=<AHB, AXI> ARCH=<I, IM, IMC, IC, EM, EMC, EC> IPIC=<0, 1>
上述步骤中,我们更改了simualtor默认为run_vcs,其他参数同官方默认BUS=AHB ARCH=IMC IPIC=0.
所以我们直接make就行
$ make
最后看到命令行输出
表明所有源代码都成功编译并生成了hex文件。将$(SCR1_DIR)目录下的build目录拷贝至Centos系统即可开始rtl仿真。
下一篇博客会讲解如何进行rtl仿真。