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环境配置 RISC-V GCC工具链 Verilog仿真工具 Makefile基础 Ubuntu 20.04 / 基础包 依赖库安装 预编译包 / 源码编译 环境变量配置 iverilog + GTKWave 编译 / 仿真 / 看波形 目标 / 依赖 / 命令 自动化编译流程 目标:一套可复现的RISC-V开发环境

这张图把四个模块的关系讲清楚了。你从Linux环境出发,装上GCC工具链和仿真工具,再用Makefile把它们串起来。每一步都是下一步的基础。

我的建议:别急着一次性装完所有东西。先装Linux基础包,验证一下;再装GCC,写个hello world跑通;最后装仿真工具,跑个简单的testbench。每一步都确认没问题了,再往下走。

这样做的好处是——万一出问题,你知道是哪个环节的锅。

好了,环境搭好了,下一章咱们就开始写真正的RISC-V处理器代码了。


公众号:蓝海资料掘金营,微信deep3321