C910开源项目库配置
C910开源项目库中有很多问题,比如我做到make compile的时候一直在报错无法找到工程下的某个文件,主要原因是平头哥官方提供的环境变量配置文件类型是.csh的,而我的linux工作站里没有csh而且没有联网。所以把csh文件内容做了修改也成功跑通了,现在分享一下。
配置工程文件环境变量
首先第一步是配置工程文件的地址变量,主要用于使用Makefile做仿真。执行以下指令:
$ cd C910_RTL_FACTORY
$ source setup/setup.csh
(注:如果你的电脑支持csh,那么只需要直接在终端输入csh
就会自动跳转到csh命令模式,后面还有一个需要修改的地方也可以进入csh模式之后直接source即可)
现在开始就遇到了第一个问题:由于我的虚拟机不支持csh,所以直接source setup.csh文档会报如下错误
对于这个问题,我采取的办法是把.csh文件改写成bash可以执行的文件,需要修改以下两个地方:
修改成:
#!/bin/bash
set pattern="\/setup"`echo '$'`
export CODE_BASE_PATH=`pwd|perl -pe "s/$pattern//"`
echo "Root of code base has been specified as:\n $CODE_BASE_PATH"
然后再执行这个指令就可以了:
$ source setup/setup.csh
出现这个结果就说明没问题了(如果不放心的话可以再echo一下 CODE_BASE_PATH)
修改Makefile中的错误
第二步,是在smart_run文件夹里
$ cd ../smart_run
$ make help
这里又会报错,这是由于Makefile里的文件的最后几行引号没写全,按照前面的写法,在分号前面全都加上引号就不会报错了。
链接 GNU编译链
第三步,下载GNU编译链。XuanTie玄铁官网 (xrvm.cn)
第四步,还需要你再source一个.csh文件,这个文件是GNU编译链工具的地址,需要你修改成从平头哥官网上下载的编译链解压后的bin目录的地址。
只需要修改csh为bash,setenv改成export就行,注意等号后面要写你自己的GNU编译链的绝对地址。
#!/bin/bash
export TOOL_EXTENSION=这里写你GNU编译链的绝对地址
echo 'Toolchain path($TOOL_EXTENSION):'
echo " $TOOL_EXTENSION"
然后在smart_run文件夹下source刚刚改过的.csh文件
source ./setup/example_setup.csh
新建work文档
第四步,尝试执行make compile,发现报错没有work文档
解决办法就是在smart_run文件夹下创建一个work文件夹就可以了,创建之后的文件结构如下:
|--C910_RTL_FACTORY/
|--gen_rtl/ ## Verilog source code of C910
|--setup/ ## Script to set the environment variables
|--smart_run/ ## RTL simulation environment
|--impl/ ## SDC file, scripts and file lists for implementation
|--logical/ ## SoC demo and test bench to run the simulation
|--setup/ ## GNU tool chain setting
|--tests/ ## Test driver and test cases
|--work/ ## Working directory for builds
|--Makefile ## Makefile for building and running sim targets
|--doc/ ## The user and integration manual of C910
再次尝试运行 make compile,就成功啦!
前仿真
跑一下前仿真主要是为了走一下流程,看一下代码的情况。
默认你已经配置好了verdi和vcs环境。
首先我们打开smart_run文件夹下面的makefile文件,查看一下Makefile关于vcs的内容:
大概在94行的位置,这里是启动vcs生成fsdb文件的配置,我们只需要在进行编译的时候加上一个参数即可:
make compile SIM=vcs UPF=on
CASE说明
这里是一些case的介绍,不保证完全准确:
ISA_AMO:原子内存操作(Atomic Memory Operations)测试套件,用于验证处理器执行原子内存操作的正确性。这些操作包括加载/存储、比较交换(compare-and-swap)、加载/保留/释放(load/reserve/release)等。
smoke_bus:烟雾测试(smoke test),用于验证处理器的基本功能是否正常工作。该测试套件通常包含一些简单的指令和操作,以确保处理器能够正确执行基本的指令集架构(ISA)。
debug_gpr:通用寄存器(general-purpose register)调试测试套件,用于验证处理器的通用寄存器是否能够正确读写。该测试套件通常包含一些对通用寄存器的操作,例如加载、存储、比较等。
ISA_THEAD:线程支持测试套件,用于验证处理器是否支持线程执行。该测试套件通常包含一些多线程程序,以确保处理器能够正确调度和执行多个线程。
cache_op:缓存操作测试套件,用于验证处理器的缓存是否能够正确工作。该测试套件通常包含一些对缓存的操作,例如加载、存储、刷新等。
debug_memory:内存调试测试套件,用于验证处理器的内存访问是否正确。该测试套件通常包含一些对内存的操作,例如加载、存储、比较等。
ISA_FP:浮点运算测试套件,用于验证处理器的浮点运算单元是否能够正确执行浮点运算。该测试套件通常包含一些浮点运算指令,例如加、减、乘、除、平方根等。(此case无法跑通)
ISA_IMAC:整数乘加累加单元(integer multiply-accumulate unit)测试套件,用于验证处理器的整数乘加累加单元是否能够正确执行整数乘加累加运算。该测试套件通常包含一些整数乘加累加指令。(此case无法跑通)
coremark:CoreMark测试套件,用于评估处理器的性能。该测试套件包含一些常用的计算任务,例如矩阵乘法、滤波等。(此case无法跑通)
hello_world:经典的“Hello, World!”程序,用于验证处理器是否能够正确执行程序。
MMU:内存管理单元(memory management unit)测试套件,用于验证处理器的内存管理单元是否能够正确管理内存。该测试套件通常包含一些对内存页面的操作,例如分配、释放、映射等。
csr:控制和状态寄存器(control and status register)测试套件,用于验证处理器的控制和状态寄存器是否能够正确读写。该测试套件通常包含一些对控制和状态寄存器的操作,例如设置、清除、读取等。
ISA_BARRIER:内存屏障(memory barrier)测试套件,用于验证处理器的内存屏障是否能够正确保证内存操作的顺序。该测试套件通常包含一些对内存屏障的指令。
plic_int:平台级中断控制器(platform-level interrupt controller)测试套件,用于验证处理器的平台级中断控制器是否能够正确处理中断。该测试套件通常包含一些对中断的生成和处理的操作。
sleep:睡眠测试套件,用于验证处理器是否能够进入睡眠状态。该测试套件通常包含一些对睡眠模式的控制指令。