搭建开发环境:安装 Verilator、GTKWave 和 RISC-V GCC 工具链
好,咱们正式开始动手了。这一章的任务很明确——把吃饭的家当先备齐。你想想看,做芯片设计,没有趁手的工具,就像厨师没有刀,再好的菜也做不出来。
我个人习惯把开发环境分成三块:仿真工具、波形查看器、以及编译器。这三兄弟各司其职,缺一不可。咱们一个一个来搞定。
Verilator:你的数字电路仿真引擎
Verilator 是什么?说白了,它能把你的 Verilog 代码转成 C++ 或 SystemC,然后编译成可执行文件来仿真。速度比传统的仿真器快很多,我项目中跑上百万时钟周期的测试,基本都靠它。
安装其实很简单。在 Ubuntu 或 Debian 系统上,一行命令搞定:
sudo apt-get install verilator
如果你用的是其他 Linux 发行版,或者想装最新版本,建议从源码编译。我记得有一次项目需要某个新特性,apt 源里的版本太老,折腾了半天最后还是源码编译省心。
# 从源码编译 Verilator
git clone https://github.com/verilator/verilator.git
cd verilator
autoconf
./configure
make -j$(nproc)
sudo make install
-j$(nproc) 参数,能充分利用多核 CPU,速度翻倍。我第一次编译时忘了加,等了快十分钟才反应过来。
装完后验证一下:
verilator --version
看到版本号输出,就说明装好了。
GTKWave:让波形说话
仿真跑完了,怎么看结果?GTKWave 就是干这个的。它能打开 VCD 或 FST 格式的波形文件,让你直观地看到每个信号的变化。
安装同样简单:
sudo apt-get install gtkwave
嗯,这里要注意一点:GTKWave 的界面虽然看起来有点复古,但功能绝对够用。我刚开始用的时候也觉得它丑,后来发现它打开大波形文件的速度比很多商业工具还快,就再也没嫌弃过它。
RISC-V GCC 工具链:给 CPU 喂指令
咱们的软核 CPU 跑起来,总得有点程序让它执行吧?RISC-V GCC 工具链就是用来编译 C 代码,生成 RISC-V 机器码的。
这里我建议直接下载预编译的工具链,省时省力。你可以从 RISC-V GNU Toolchain 的 Release 页面 下载对应系统的版本。
下载后解压,然后把 bin 目录加到 PATH 里:
export PATH=$PATH:/path/to/riscv64-unknown-elf-gcc/bin
验证安装:
riscv64-unknown-elf-gcc --version
-march=rv32i -mabi=ilp32。
编写第一个仿真测试
工具都装好了,咱们来写个最简单的测试,验证整个环境是否打通。
先写一个 RISC-V 汇编程序,让 CPU 执行加法:
# test.S
.globl _start
_start:
li x1, 5 # 把 5 加载到寄存器 x1
li x2, 3 # 把 3 加载到寄存器 x2
add x3, x1, x2 # x3 = x1 + x2
nop
nop
nop
编译成机器码:
riscv64-unknown-elf-gcc -march=rv32i -mabi=ilp32 -nostdlib -o test.elf test.S
riscv64-unknown-elf-objcopy -O binary test.elf test.bin
然后写一个简单的 Verilog 测试模块,加载这个二进制文件:
// testbench.v
module testbench;
reg clk;
reg rst_n;
wire [31:0] pc;
wire [31:0] instr;
// 实例化你的 CPU 核心(这里先占位)
// cpu core(...);
initial begin
clk = 0;
rst_n = 0;
#10 rst_n = 1;
#100 $finish;
end
always #5 clk = ~clk;
initial begin
$dumpfile("wave.vcd");
$dumpvars(0, testbench);
end
endmodule
用 Verilator 仿真:
verilator --cc --exe --build testbench.v
./obj_dir/Vtestbench
最后用 GTKWave 打开波形:
gtkwave wave.vcd
知识体系一览
下面这张图帮你理清今天装的所有工具之间的关系:
这张图把今天装的三样工具串起来了。你写好的 Verilog 代码和编译好的 RISC-V 程序,交给 Verilator 去仿真,仿真结果输出成 VCD 波形文件,最后用 GTKWave 打开看信号变化。就这么简单。
好了,环境搭好了,第一个测试也跑通了。从下一章开始,咱们就要真正动手设计 CPU 核心了。到时候你会发现,今天花时间搭环境,绝对值得。