2. 开发环境搭建:Vivado/Quartus安装、RISC-V GCC工具链编译、Verilator仿真环境配置
做RISC-V处理器内核开发,第一件事就是把“家伙事儿”备齐。我见过不少新手,一上来就急着写代码,结果卡在环境配置上好几天。说白了,工具链就是你的武器库,武器不趁手,仗怎么打?
这一章,咱们就把三套核心环境捋一遍:FPGA厂商工具(Vivado/Quartus)、RISC-V GCC交叉编译链、以及Verilator仿真环境。这三样东西,你后面30章天天都要用。
2.1 FPGA厂商工具:Vivado与Quartus安装
先聊FPGA工具。你选哪家芯片,就用哪家工具。Xilinx(现在叫AMD)用Vivado,Intel(原Altera)用Quartus。我个人习惯两套都装,因为不同项目可能会换平台。
2.1.1 Vivado安装要点
Vivado这玩意儿,说实话,挺“重”的。完整安装包动辄几十个GB。我建议你装Vivado HLx Edition,选Vivado组件就够了,别勾那些Vitis、DocNav之类的——除非你后面要做嵌入式软核开发。
D:/Xilinx/Vivado/2024.1。我以前吃过这个亏,路径太长导致编译脚本报错,查了半天。
安装完成后,记得做两件事:
- 添加环境变量: 把
D:/Xilinx/Vivado/2024.1/bin加到系统PATH里,这样你才能在命令行直接敲vivado。 - 安装驱动: 如果你要用下载器(比如JTAG),得装Digilent Adept或者Xilinx Cable Drivers。不然板子连不上,你想想看,那得多郁闷。
2.1.2 Quartus安装要点
Quartus相对轻量一些。我推荐装Quartus Prime Lite Edition,免费版够用了。安装时选Cyclone IV/V或MAX 10器件支持,这些是教学板常用的型号。
2.2 RISC-V GCC工具链编译
RISC-V的GCC工具链,说白了就是把你写的C代码编译成RISC-V机器码。这东西有两种获取方式:直接下载预编译包,或者自己从源码编译。
我建议新手直接下载预编译包。自己编译?嗯,那得等好几个小时,而且容易出错。等你后面熟练了,再考虑自己折腾。
2.2.1 预编译工具链下载
推荐几个靠谱的源:
- SiFive官方: 提供
riscv64-unknown-elf-gcc预编译包,支持RV32和RV64。 - Bootlin工具链: 一个开源项目,提供各种架构的交叉编译链,RISC-V的也有。
- Ubuntu apt: 如果你用Linux,直接
sudo apt install gcc-riscv64-unknown-elf就行。
riscv64-unknown-elf-gcc 和 riscv64-linux-gnu-gcc。前者是裸机工具链(没有操作系统),后者是带Linux的。咱们做处理器内核验证,用裸机工具链就够了。
2.2.2 从源码编译(可选)
如果你非要自己编译,流程大概是这样的:
# 1. 下载源码
git clone https://github.com/riscv-collab/riscv-gnu-toolchain
cd riscv-gnu-toolchain
# 2. 配置(以RV32IMC为例)
./configure --prefix=/opt/riscv --with-arch=rv32imc --with-abi=ilp32
# 3. 编译(这一步很慢,建议开多线程)
make -j$(nproc)
这里解释一下参数:
--with-arch=rv32imc:指定指令集。rv32表示32位,i是基础整数指令,m是乘除法,c是压缩指令。--with-abi=ilp32:ABI接口。ilp32表示整数、长整型、指针都是32位。
编译完成后,你会在 /opt/riscv/bin 下看到一堆工具:riscv32-unknown-elf-gcc、riscv32-unknown-elf-objdump 等等。
int main(){ return 0; },然后用 riscv32-unknown-elf-gcc -o test test.c 编译。如果没报错,说明工具链OK了。
2.3 Verilator仿真环境配置
Verilator是个好东西。它能把Verilog/SystemVerilog代码转换成C++,然后编译成可执行文件来仿真。速度比商业仿真器(比如VCS、Modelsim)快得多。咱们做RISC-V内核开发,动辄跑几百万条指令,用Verilator最合适。
2.3.1 安装Verilator
我推荐在Linux环境下用Verilator。Windows也能用,但坑比较多。如果你只有Windows,建议装个WSL2(Windows Subsystem for Linux)。
安装步骤:
# Ubuntu/Debian
sudo apt install verilator
# 或者从源码编译(获取最新版本)
git clone https://github.com/verilator/verilator
cd verilator
autoconf
./configure
make -j$(nproc)
sudo make install
always_ff 都不认识,你想想看,那得多难受。
2.3.2 验证安装
装完后,跑一下这个命令:
verilator --version
如果输出版本号,说明装好了。然后咱们写个简单的测试:
// counter.v
module counter(
input clk,
input rst_n,
output reg [7:0] count
);
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
count <= 8'd0;
else
count <= count + 1;
end
endmodule
用Verilator编译:
verilator --cc counter.v --exe --build sim_main.cpp
这里 --cc 表示生成C++代码,--exe 表示生成可执行文件,--build 表示自动编译。你需要自己写一个 sim_main.cpp 作为仿真主程序。
2.3.3 仿真主程序模板
我一般用这个模板:
#include <verilated.h>
#include "Vcounter.h"
int main(int argc, char** argv) {
Verilated::commandArgs(argc, argv);
Vcounter* top = new Vcounter;
// 初始化
top->clk = 0;
top->rst_n = 0;
// 复位
top->rst_n = 0;
top->eval();
top->rst_n = 1;
// 仿真100个时钟周期
for (int i = 0; i < 100; i++) {
top->clk = !top->clk;
top->eval();
}
delete top;
return 0;
}
编译运行:
./obj_dir/Vcounter
如果没报错,恭喜你,Verilator环境搭好了。
2.4 环境配置总览
我把这三套环境的核心信息整理成了一张表,方便你对照:
| 工具 | 用途 | 推荐版本 | 安装方式 | 验证命令 |
|---|---|---|---|---|
| Vivado | FPGA综合、实现、调试 | 2023.2 / 2024.1 | 官网下载安装包 | vivado -version |
| Quartus | FPGA综合、实现、调试 | Prime Lite 23.1 | 官网下载安装包 | quartus --version |
| RISC-V GCC | C代码交叉编译 | 2024.04 (或最新) | 预编译包 / 源码编译 | riscv32-unknown-elf-gcc --version |
| Verilator | Verilog/SystemVerilog仿真 | v4.210+ | apt / 源码编译 | verilator --version |
2.5 整体环境关系图
下面这张图,展示了咱们这套开发环境里,各个工具是怎么配合的:
这张图把整个开发流程串起来了。你想想看,从写C代码到最终在FPGA上跑起来,中间经过了编译、仿真、综合、实现、下载五个环节。每个环节都有对应的工具。咱们后面每一章,都会在这张图上找到自己的位置。