1. Chiplab用户手册
1.1. 前言
chiplab项目致力于构建基于LoongArch32 Reduced的soc敏捷开发平台。如发现问题请在issues提出。
1.2. 目录结构
.
├── chip SoC顶层。
│ └── soc_demo SoC顶层代码实例。
│ ├── loongson 龙芯实验箱SoC顶层代码。
│ ├── Baixin 百芯开发板SoC顶层代码。
│ └── sim 仿真SoC顶层代码
├── fpga 综合工程。
│ ├── loongson 龙芯实验箱综合工程。
│ ├── 2019.2 对应Vivado 2019.2版本。
│ └── 2023.2 对应Vivado 2023.2版本。
│ └── Baixin 百芯开发板综合工程。
├── IP SoC IP。
│ ├── AMBA 总线 IP。
│ ├── APB_DEV APB协议通信设备。
│ ├── URT UART设备控制器。
│ └── NAND NAND设备控制器。
│ ├── AXI_DELAY_RAND 随机延迟注入。
│ ├── AXI_SRAM_BRIDGE AXI协议 -> SRAM接口转换。
│ ├── BRIDGE 1x2桥接模块。
│ ├── DMA DMA逻辑,用于设备作为master访问内存。
│ ├── SPI SPI Flash设备控制器。
│ ├── MAC MAC设备控制器。
│ ├── CONFREG 用于访问开发板上数码管、拨码开关等外设以及特殊寄存器。
│ ├── myCPU 处理器核逻辑。
│ └── xilinx_ip Vivado平台所创建的IP。
│ ├── 2019.2 对应Vivado 2019.2版本。
│ └── 2023.2 对应Vivado 2023.2版本。
├── sims 运行仿真以及存放testbench源码。
│ └── verilator 以verilator仿真工具为基础。
│ ├── run_prog 测试程序运行目录,包括func、性能测试程序、内核等。
│ ├── run_random 随机指令序列运行目录。
│ └── testbench testbech源码,提供仿真运行、在线比对、设备模拟等功能。
├── software 测试用例。
│ ├── coremark coremark性能测试程序。
│ ├── dhrystone dhrystone性能测试程序。
│ ├── func 功能测试点,验证处理器核设计是否与指令手册一致。
│ ├── linux 提供内核启动的支持。
│ ├── random_boot 为随机指令序列的运行提供支持。
│ ├── random_res 存放随机指令序列。
│ └── generic 通用的编译脚本。
└── toolchains chiplab运行所需工具。
├── loongarch32r-linux-gnusf-* gcc工具链。
├── nemu nemu模拟器,用于在线实时比对。
└── system_newlib newlib C库,用于编译C程序。
1.3. 使用方法
1.3.1. toolchains工具下载
toolchains这个目录是存在的,只不过里面是空的,需要用户自行下载,详情请参考toolchains/README.md。
1.3.2. 项目所需第三方工具安装
以Ubuntu (Windows 10+ 请基于WSL2)为例:
# 终端运行
sudo apt install verilator gtkwave #verilator version 4.224 (loongarch64 4.222+)
1.3.3. 实验步骤
1.3.3.1. 参数设置
设置CHIPLAB_HOME系统变量
# 终端运行
export CHIPLAB_HOME="your own chiplab pwd address"
1.3.3.2. 替换myCPU
IP/myCPU中存放的是处理器核代码,对外的接口和核顶层模块名称固定。该环境默认处理器核已实现AXI总线。
module core_top(
input aclk,
input aresetn,
input [ 7:0] intrpt,
//AXI interface
//read reqest
output [ 3:0] arid,
output [31:0] araddr,
output [ 7:0] arlen,
output [ 2:0] arsize,
output [ 1:0] arburst,
output [ 1:0] arlock,
output [ 3:0] arcache,
output [ 2:0] arprot,
output arvalid,
input arready,
//read back
input [ 3:0] rid,
input [31:0] rdata,
input [ 1:0] rresp,
input rlast,
input rvalid,
output rready,
//write request
output [ 3:0] awid,
output [31:0] awaddr,
output [ 7:0] awlen,
output [ 2:0] awsize,
output [ 1:0] awburst,
output [ 1:0] awlock,
output [ 3:0] awcache,
output [ 2:0] awprot,
output awvalid,
input awready,
//write data
output [ 3:0] wid,
output [31:0] wdata,
output [ 3:0] wstrb,
output wlast,
output wvalid,
input wready,
//write back
input [ 3:0] bid,
input [ 1:0] bresp,
input bvalid,
output bready,
//debug info
output [31:0] debug0_wb_pc,
output [ 3:0] debug0_wb_rf_wen,
output [ 4:0] debug0_wb_rf_wnum,
output [31:0] debug0_wb_rf_wdata
#ifdef CPU_2CMT
,
output [31:0] debug1_wb_pc,
output [ 3:0] debug1_wb_rf_wen,
output [ 4:0] debug1_wb_rf_wnum,
output [31:0] debug1_wb_rf_wdata
#endif
);
1.3.3.3. 仿真
仿真的工作目录位于sims/verilator/run_*,当前仅支持verilator。
run_prog: 该工作目录下可运行func测试用例、dhrystone、coremark性能测试程序、linux以及自定义C程序。run_random: 该工作目录下可进行随机指令序列测试。
具体使用方法请参考verilator仿真环境说明。
1.3.3.4. 综合
该步骤的工作目录位于fpga,当前支持龙芯实验箱及百芯开发板。
使用vivado打开loongson/20*.2/system_run.xpr(根据具体vivado版本选择)或者Baixin/system_run/system_run.xpr工程文件,添加处理器核代码后,可直接开始综合。若选择添加chiplab中的参考核,注意添加myCPU/IP下的xilinx IP。
处理器核输入时钟频率默认为33MHz,可对clk_pll_33xilinx IP的输出时钟频率进行调整,修改处理器核的输入时钟频率。此外,还需将chip/soc_demo/loongson/config.h或者chip/soc_demo/Baixin/config.h文件中的FREQ宏定义修改为对应频率。
1.3.3.5. 板上启动内核
板上内核启动步骤包括:flash加载pmon或uboot,通过网口加载内核。
内核由龙芯教育/la32r-Linux仓库提供源码。
pmon直接提供二进制文件。
uboot由龙芯教育/la32r-uboot仓库提供源码。
具体流程请参考load 内核启动的方法
内核中可尝试运行unixbench。
./ub.sh
cd pgms
./context1 10
内核与处理器核部分硬件参数绑定,比如频率、Cache等。内核编译时需确保参数设置与处理器核设计统一。
1.3.4. 常见问题
1.3.4.1. testbench无法编译
错误提示
g++: error: /usr/local/share/verilator/include/verilated.cpp: No such file or directory
g++: error: /usr/local/share/verilator/include/verilated_vcd_c.cpp: No such file or directory
根据verilator库文件所安装的位置,需要调整sims/verilator/run/Makefile内的VERILATOR_HOME变量。当机器上存在多个版本的verilator时,注意配置成相对应的库路径。