2. 开发环境搭建:Vivado安装与配置、Verilator仿真环境搭建、交叉编译工具链安装
说实话,环境搭建往往是整个项目里最磨人的一步。我见过不少同学,代码写得挺溜,结果卡在工具链安装上,一卡就是一整天。所以这一章,咱们把 Vivado、Verilator 和 RISC-V 交叉编译工具链这三个核心环境一次性搞定。
我的建议是:按顺序来,别跳步。先装 Vivado,再搭 Verilator,最后装交叉编译工具链。这样出了问题,排查起来也方便。
2.1 Vivado 安装与配置
Vivado 是 Xilinx 的 FPGA 开发套件,咱们要把 E203 的 RTL 代码综合、实现、生成比特流,全靠它。我个人习惯用 Vivado 2019.2 或 2020.1 版本,这两个版本对 E203 项目兼容性最好。
2.1.1 系统要求与版本选择
| 项目 | 推荐配置 | 最低配置 |
|---|---|---|
| 操作系统 | Ubuntu 18.04 / 20.04 | Ubuntu 16.04 |
| 内存 | 16 GB 以上 | 8 GB |
| 硬盘空间 | 100 GB 以上 | 60 GB |
| CPU 核心数 | 8 核以上 | 4 核 |
嗯,这里要注意:Vivado 安装包本身就 20 多 GB,解压后占用更大。我曾经在 120 GB 的笔记本上装,装到一半硬盘满了……最后只能重装系统。所以硬盘空间一定要留足。
2.1.2 安装步骤
- 下载安装包:从 Xilinx 官网下载 Vivado HLx 版本,选择 WebPACK 或 Design Edition 均可。
- 解压并运行安装脚本:
tar -xzvf Xilinx_Vivado_SDK_2019.2_1106_2127.tar.gz cd Xilinx_Vivado_SDK_2019.2_1106_2127 ./xsetup - 选择安装组件:勾选 Vivado HL Design Edition,以及对应的器件支持(比如 Artix-7、Kintex-7 等)。
- 配置 License:安装完成后,打开 Vivado,通过
Help → Manage License加载你的 License 文件。 - 验证安装:在终端输入
vivado,如果能正常启动 GUI,说明安装成功。
2.1.3 配置环境变量
为了方便在终端调用 Vivado 命令,需要把 Vivado 的 bin 目录加到 PATH 里。编辑 ~/.bashrc,添加以下内容:
export VIVADO_HOME=/tools/Xilinx/Vivado/2019.2
export PATH=$VIVADO_HOME/bin:$PATH
然后执行 source ~/.bashrc 使其生效。验证一下:
vivado -version
如果能看到版本信息,就说明配置好了。
2.2 Verilator 仿真环境搭建
Verilator 是一个高性能的 Verilog/SystemVerilog 仿真器。它把 RTL 代码编译成 C++ 模型,然后通过 C++ 驱动来仿真。说白了,就是比传统的仿真器快很多。E203 的 RTL 仿真验证,我推荐用 Verilator。
2.2.1 安装依赖
在 Ubuntu 上,先安装必要的依赖包:
sudo apt-get update
sudo apt-get install git make autoconf g++ flex bison
sudo apt-get install libfl-dev libgoogle-perftools-dev
我记得第一次装的时候,忘了装 libfl-dev,结果编译 Verilator 时报了一堆 flex 相关的错误。所以这些依赖一个都不能少。
2.2.2 编译安装 Verilator
我建议从源码编译安装,这样能保证版本最新。步骤如下:
git clone https://github.com/verilator/verilator.git
cd verilator
autoconf
./configure
make -j$(nproc)
sudo make install
安装完成后,验证一下:
verilator --version
如果能看到类似 Verilator 4.210 的版本号,就说明安装成功了。
2.2.3 验证仿真环境
咱们用 E203 项目自带的仿真脚本来验证一下。进入 E203 项目目录,执行:
cd e203_project/sim
make run_test SIM=verilator
如果能看到仿真波形或者终端打印出测试通过的信息,就说明 Verilator 环境搭建成功了。
2.3 交叉编译工具链安装
交叉编译工具链,说白了就是在一台电脑上编译出能在另一台设备上运行的程序。咱们要在 x86 的电脑上编译出能在 RISC-V 处理器上运行的代码,就得靠它。
2.3.1 选择工具链版本
E203 项目推荐使用 RISC-V GNU 工具链。我习惯用 riscv64-unknown-elf-gcc 这个版本,它支持裸机程序编译,正好适合 E203 这种没有操作系统的嵌入式场景。
| 工具链版本 | 适用场景 | 推荐指数 |
|---|---|---|
| riscv64-unknown-elf-gcc | 裸机程序、RTOS | ★★★★★ |
| riscv64-linux-gnu-gcc | Linux 用户态程序 | ★★★☆☆ |
| riscv32-unknown-elf-gcc | 32 位 RISC-V 裸机 | ★★★★☆ |
2.3.2 安装预编译工具链
最省事的方法是直接下载预编译好的工具链。从 SiFive 官网或者 GitHub 上找到 riscv64-unknown-elf-toolchain 的预编译包,解压到某个目录:
wget https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.3.0-2020.04.0-x86_64-linux-ubuntu14.tar.gz
tar -xzvf riscv64-unknown-elf-gcc-8.3.0-2020.04.0-x86_64-linux-ubuntu14.tar.gz
sudo mv riscv64-unknown-elf-gcc-8.3.0-2020.04.0-x86_64-linux-ubuntu14 /opt/riscv
然后配置环境变量:
export RISCV=/opt/riscv
export PATH=$RISCV/bin:$PATH
验证一下:
riscv64-unknown-elf-gcc --version
如果能看到版本信息,就说明工具链装好了。
2.3.3 编译测试程序
写一个简单的 C 程序,测试一下工具链是否正常工作:
// test.c
int main() {
int a = 1, b = 2;
int c = a + b;
return c;
}
编译:
riscv64-unknown-elf-gcc -O2 -march=rv32imc -mabi=ilp32 -o test test.c
然后用 file 命令查看生成的可执行文件:
file test
如果输出中包含 ELF 32-bit LSB executable, UCB RISC-V,就说明编译成功了。
2.4 本章知识体系总览
为了让你对整个环境搭建有个全局认识,我画了一张结构图:
2.5 常见问题与避坑指南
环境搭建过程中,有几个坑我踩过,分享给你:
- Vivado 安装卡在 0%:我曾经遇到过安装进度条一直不动的情况。后来发现是网络问题,Vivado 安装过程中会下载一些在线组件。解决办法是断网安装,或者用离线安装包。
- Verilator 编译报错:如果编译 Verilator 时出现
flex: not found之类的错误,说明依赖没装全。回头检查一下flex和bison是否安装。 - 交叉编译工具链版本不匹配:E203 项目默认使用 RV32IMC 指令集。如果你用的工具链默认是 RV64,编译时会报错。记得在编译时加上
-march=rv32imc -mabi=ilp32参数。
好了,环境搭建就到这里。三个工具都装好并验证通过后,咱们就可以正式开始移植工作了。