2. 开发环境搭建:Linux环境配置、RISC-V GCC工具链安装、Verilog仿真工具安装、Makefile基础
说实话,做RISC-V处理器设计,第一步不是写代码,而是搭环境。
我见过太多新手,一上来就急着写Verilog,结果编译报错、仿真跑不动、工具链找不到——折腾半天,热情全没了。所以这一章,咱们先把地基打牢。
核心要点:一套干净、可复现的开发环境,能让你少走80%的弯路。
2.1 Linux环境配置
我个人习惯用Ubuntu 20.04 LTS,稳定、社区活跃、包管理方便。当然,CentOS或Debian也行,但别用太老的版本——你想想看,工具链编译时依赖的库版本不对,那才叫头疼。
需要安装的基础包:
sudo apt-get update
sudo apt-get install -y build-essential git vim curl wget
sudo apt-get install -y libgmp-dev libmpfr-dev libmpc-dev
sudo apt-get install -y autoconf automake libtool flex bison
sudo apt-get install -y texinfo python3 python3-pip
这里有个坑:libmpc-dev 这个包很容易漏掉。我之前帮一个学员远程调试,他编译GCC时卡了半小时,最后发现就是少了这个库。嗯,注意一下。
2.2 RISC-V GCC工具链安装
RISC-V GCC工具链,说白了就是一套交叉编译器。你在x86的电脑上写代码,编译出来的程序是给RISC-V处理器跑的。
安装方式有两种:
| 方式 | 优点 | 缺点 |
|---|---|---|
| 预编译二进制包 | 快,几分钟搞定 | 版本固定,不能定制 |
| 源码编译 | 灵活,可定制指令集扩展 | 慢,第一次编译要1-2小时 |
我建议初学者先用预编译包。等后面做定制指令集时,再回头编译源码。
预编译包安装:
# 下载RISC-V GNU工具链(以Ubuntu 20.04为例)
wget https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2023.12.20/riscv64-unknown-elf-gcc-2023.12.20-x86_64-linux-ubuntu20.04.tar.gz
# 解压到 /opt
sudo tar -xzf riscv64-unknown-elf-gcc-*.tar.gz -C /opt
# 添加环境变量
echo 'export PATH=$PATH:/opt/riscv/bin' >> ~/.bashrc
source ~/.bashrc
# 验证安装
riscv64-unknown-elf-gcc --version
如果看到版本号输出,恭喜你,环境搭好了。
小技巧:我习惯把工具链装在 /opt 下,而不是 /usr/local。这样万一要切换版本,直接改 PATH 就行,不会污染系统。
2.3 Verilog仿真工具安装
做处理器设计,仿真工具是吃饭的家伙。我推荐用 Icarus Verilog (iverilog) 配合 GTKWave 看波形。免费、轻量、够用。
sudo apt-get install -y iverilog gtkwave
验证一下:
iverilog -V
gtkwave --version
如果你以后做复杂SoC,可能会用到VCS或QuestaSim。但前期学习,iverilog完全够用。我在项目中用iverilog跑过几十万门的RTL,没出过问题。
写个简单的测试用例试试:
// test.v
module test;
reg clk;
initial begin
clk = 0;
forever #5 clk = ~clk;
end
initial begin
$dumpfile("test.vcd");
$dumpvars(0, test);
#100 $finish;
end
endmodule
iverilog -o test test.v
vvp test
gtkwave test.vcd
看到波形了吗?嗯,这就是你的第一个仿真。
2.4 Makefile基础
每次编译都敲一长串命令?太累了。Makefile就是帮你自动化这件事的。
一个最简单的Makefile:
# Makefile
TARGET = test
SRCS = test.v
VVP = test.vvp
all: $(VVP)
vvp $(VVP)
$(VVP): $(SRCS)
iverilog -o $(VVP) $(SRCS)
clean:
rm -f $(VVP) test.vcd
wave: $(VVP)
vvp $(VVP)
gtkwave test.vcd
用法:
make # 编译并仿真
make wave # 仿真并打开波形
make clean # 清理中间文件
这里有个小细节:all 是默认目标,直接敲 make 就会执行它。我习惯把 all 放在第一个,这样最顺手。
注意:Makefile里的缩进必须用Tab,不能用空格。这个坑我踩过无数次,每次都是编译报错才想起来。
2.5 知识体系总览
下面这张图,把本章的核心逻辑串起来了:
这张图把四个模块的关系讲清楚了。你从Linux环境出发,装上GCC工具链和仿真工具,再用Makefile把它们串起来。每一步都是下一步的基础。
我的建议:别急着一次性装完所有东西。先装Linux基础包,验证一下;再装GCC,写个hello world跑通;最后装仿真工具,跑个简单的testbench。每一步都确认没问题了,再往下走。
这样做的好处是——万一出问题,你知道是哪个环节的锅。
好了,环境搭好了,下一章咱们就开始写真正的RISC-V处理器代码了。
公众号:蓝海资料掘金营,微信deep3321