在Ubuntu 22.04上搭建PULPino RISC-V仿真环境的完整指南
作为一款开源的32位RISC-V微控制器系统,PULPino因其精简的设计和丰富的外设支持,成为嵌入式开发者和学术研究的热门选择。然而,由于项目长期未更新,环境搭建过程中会遇到各种"坑"——从Python2的兼容性问题到特定版本的ModelSim需求,再到自定义工具链的编译错误。本文将带你一步步解决所有这些问题,最终在Ubuntu 22.04上成功运行Hello World仿真。
1. 环境准备与工具安装
在开始之前,请确保你使用的是Ubuntu 22.04系统(物理机或虚拟机均可)。我们将从最基本的依赖项开始,逐步构建完整的仿真环境。
1.1 Python2环境配置
由于PULPino项目多年未更新,它仍然依赖Python2环境,这与现代系统默认的Python3不兼容。以下是安全配置Python2环境的步骤:
# 安装Python2
sudo apt update
sudo apt install python2
# 设置Python2为默认版本(谨慎操作)
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 2
sudo update-alternatives --config python # 这里选择python2
注意:修改系统默认Python版本可能会影响其他应用程序。建议在虚拟环境中操作或事后恢复默认设置。
安装pip2(Python2的包管理工具):
wget https://bootstrap.pypa.io/pip/2.7/get-pip.py
python2 get-pip.py
1.2 ModelSim SE 2020.4安装
PULPino要求ModelSim版本在10.2c以上。我们推荐使用ModelSim SE 2020.4,以下是安装步骤:
- 从Intel官网下载ModelSim SE 2020.4 Linux版本
- 解压安装包并运行安装程序
- 安装必要的32位兼容库:
sudo apt install libc6-i386 lib32stdc++6 lib32z1
- 将ModelSim添加到系统PATH:
echo 'export PATH=$PATH:/path/to/modelsim/bin' >> ~/.bashrc
source ~/.bashrc
验证安装是否成功:
vsim -version
1.3 PULP-RISCV工具链编译
标准RISC-V工具链不支持PULPino的自定义指令集,因此需要专门编译pulp-riscv-gnu-toolchain:
# 安装依赖项
sudo apt install autoconf automake autotools-dev curl libmpc-dev \
libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo \
gperf libtool patchutils bc zlib1g-dev
# 获取源码
git clone https://github.com/pulp-platform/pulp-riscv-gnu-toolchain
cd pulp-riscv-gnu-toolchain
git submodule update --init --recursive
# 编译安装
./configure --prefix=/opt/pulp_riscv --with-arch=rv32imc --with-cmodel=medlow --enable-multilib
make -j$(nproc)
# 添加到PATH
echo 'export PATH=$PATH:/opt/pulp_riscv/bin' >> ~/.bashrc
source ~/.bashrc
验证工具链安装:
riscv32-unknown-elf-gcc --version
2. PULPino项目配置
2.1 获取PULPino源码
git clone https://github.com/pulp-platform/pulpino
cd pulpino
2.2 更新IP依赖
运行更新脚本时会遇到adv_dbg_if分支缺失的问题,这是已知问题但可以安全忽略:
./update-ips.py
提示:虽然脚本会报错adv_dbg_if的pulpinov1分支缺失,但master分支同样可用,不会影响后续仿真。
2.3 解决CMake -m32问题
现代CMake不再支持-m32选项,需要修改sw/CMakeLists.txt:
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32 -march=${GCC_MARCH} -Wa,-march=${GCC_MARCH}")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=${GCC_MARCH} -Wa,-march=${GCC_MARCH}")
3. 构建与仿真
3.1 准备构建环境
mkdir -p sw/build
cd sw/build
cp ../cmake_configure*.gcc.sh .
根据你的需求选择合适的配置脚本:
-
cmake_configure.riscv.gcc.sh: RISCY核心 -
cmake_configure.riscvf.gcc.sh: 带浮点的RISCY -
cmake_configure.zeroriscy.gcc.sh: zero-riscy核心 -
cmake_configure.microriscy.gcc.sh: 精简版zero-riscy
3.2 解决riscv.ld文件问题
运行配置脚本时会出现riscv.ld文件缺失的错误。创建fix_riscv_ld.sh脚本:
#!/bin/bash
riscv32-unknown-elf-ld --verbose | head -n -1 | tail -n +7 | \
sed '168 a \ \ _fbss = .;' | \
sed '169 a \ \ . = .;' > CMakeFiles/CMakeTmp/riscv.ld
赋予执行权限并运行:
chmod +x fix_riscv_ld.sh
./fix_riscv_ld.sh
可能需要重复运行配置脚本和修复脚本2-3次直到成功。
3.3 编译项目
make vcompile
3.4 运行Hello World仿真
控制台模式运行:
make helloworld.vsimc
GUI模式运行:
make helloworld.vsim
在ModelSim GUI中,执行以下命令查看波形:
add wave /*
run -all
4. 常见问题与解决方案
4.1 DPI相关警告
在GUI模式中可能会看到DPI警告,可以通过修改vsim/tcl_files/config/vsim.tcl解决:
- $VSIM_FLAGS -dpicpppath gcc"
+ $VSIM_FLAGS -dpicpppath /usr/bin/gcc"
4.2 其他测试用例
成功运行Hello World后,可以尝试其他测试用例:
make test_arithmetic.vsim # 算术测试
make test_io.vsim # IO测试
make test_interrupt.vsim # 中断测试
4.3 性能优化技巧
对于大型仿真项目,可以调整以下参数提升性能:
-
在
vsim/tcl_files/config/vsim.tcl中增加优化选项:set VSIM_FLAGS "$VSIM_FLAGS -O3" -
使用批处理模式减少GUI开销:
make helloworld.vsimc VSIM_FLAGS="-c -do 'run -all; quit'" -
增加仿真内存限制:
make helloworld.vsim VSIM_FLAGS="-sv_lib libriscv -dpicpppath /usr/bin/gcc -LDFLAGS -Wl,--no-as-needed"
5. 高级调试技巧
5.1 波形调试
在ModelSim中,可以通过以下命令增强调试体验:
# 添加所有信号到波形窗口
add wave -r /*
# 设置运行时间
run 100us
# 保存波形配置
do save_wave.do
5.2 代码覆盖率分析
启用代码覆盖率收集:
make helloworld.vsimc VSIM_FLAGS="-coverage"
生成覆盖率报告:
coverage save -onexit coverage.ucdb
coverage report -html -output covhtml
5.3 自定义指令跟踪
对于PULPino的自定义指令,可以添加特殊跟踪:
# 在仿真脚本中添加
when -label instr_trace "instr_valid == '1'" {
echo "PC: [examine -hex pc] Instr: [examine -hex instr]"
}
6. 项目结构与扩展
PULPino的目录结构说明:
pulpino/
├── rtl/ # RTL源代码
├── ips/ # IP核
├── sim/ # 仿真文件
├── sw/ # 软件部分
│ ├── apps/ # 应用程序
│ ├── build/ # 构建目录
│ └── cmake/ # CMake配置
└── vsim/ # ModelSim配置
添加自定义应用程序:
-
在
sw/apps/下创建新目录 -
添加
CMakeLists.txt和源代码 -
在顶层
sw/CMakeLists.txt中添加引用 - 重新构建并仿真
&spm=1001.2101.3001.5002&articleId=108155272&d=1&t=3&u=48d2a5891643497bb361708811930261)
2497

被折叠的 条评论
为什么被折叠?



