一站式 RISC-V 处理器设计与验证平台,源自"一生一芯"(YSYX) 项目。支持从 RTL 设计、功能仿真到 SoC 集成的完整开发流程。
本项目提供完整的 RISC-V CPU 软硬件协同开发环境,主要特性:
- 处理器设计:支持多周期和五级流水线两种微架构
- 功能验证:通过 DiffTest 与参考模型 (NEMU) 进行差分测试
- SoC 集成:基于 AXI4 总线的完整 SoC 框架
- 可视化调试:NVBoard 虚拟板卡支持 VGA、键盘、LED 等外设
- 丰富测试集:从基础指令测试到 Benchmark 性能评估
本教程将指导你在全新的 Ubuntu 22.04 系统上从零开始搭建项目,并最终运行 RT-Thread 实时操作系统。
# 更新包管理器
sudo apt update && sudo apt upgrade -y
# 基础开发工具
sudo apt install -y build-essential git gdb-multiarch ccache
# RISC-V 交叉编译工具链
sudo apt install -y gcc-riscv64-linux-gnu g++-riscv64-linux-gnu binutils-riscv64-linux-gnu
# SDL2 库(用于 NVBoard 可视化和设备仿真)
sudo apt install -y libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-mixer-dev
# Java 运行时(Mill 构建工具依赖)
sudo apt install -y default-jdk
# 其他工具
sudo apt install -y device-tree-compiler flex bison libreadline-dev python3 curlUbuntu 22.04 的 apt 仓库中 Verilator 版本较老,建议从源码编译安装:
# 安装 Verilator 编译依赖
sudo apt install -y autoconf help2man perl python3 make g++ libfl2 libfl-dev zlib1g zlib1g-dev
# 下载并编译 Verilator
cd /tmp
git clone https://github.com/verilator/verilator.git
cd verilator
git checkout v5.008 # 推荐版本
# 配置并编译(约需 5-10 分钟)
autoconf
./configure
make -j$(nproc)
sudo make install
# 验证安装
verilator --version
# 应输出: Verilator 5.008 ...注意:不要使用 sudo snap install mill,那是一个棋盘游戏,不是构建工具!
# 下载并安装 Mill 构建工具
curl -L https://raw.githubusercontent.com/lefou/millw/0.4.11/millw > /tmp/mill
chmod +x /tmp/mill
sudo mv /tmp/mill /usr/local/bin/mill
# 验证安装
mill --version
# 应输出: Mill Build Tool version 0.12.x# 克隆项目(假设克隆到 ~/ysyx-workbench)
cd ~
git clone <your-repo-url> ysyx-workbench
cd ysyx-workbench
# 设置环境变量(添加到 ~/.bashrc)
echo 'export NEMU_HOME=~/ysyx-workbench/nemu' >> ~/.bashrc
echo 'export AM_HOME=~/ysyx-workbench/abstract-machine' >> ~/.bashrc
echo 'export NPC_HOME=~/ysyx-workbench/npc' >> ~/.bashrc
echo 'export NVBOARD_HOME=~/ysyx-workbench/nvboard' >> ~/.bashrc
# 使环境变量生效
source ~/.bashrc
# 验证环境变量
echo $AM_HOME # 应输出: /home/<用户名>/ysyx-workbench/abstract-machinecd ~/ysyx-workbench/ysyxSoC
# 初始化子模块
make dev-init
# 生成 SoC Verilog(首次编译约需 2-3 分钟)
make verilog
# 验证生成
ls -la build/ysyxSoCFull.v
# 应看到生成的 Verilog 文件cd ~/ysyx-workbench/npc
# 构建流水线版本(推荐)
make -f Makefile.soc pipeline
# 验证构建
ls -la build_soc/ysyxSoCFull
# 应看到可执行文件cd ~/ysyx-workbench/rt-thread-am/bsp/abstract-machine
# 编译 RT-Thread
make ARCH=riscv32e-ysyxsoc
# 运行 RT-Thread
make ARCH=riscv32e-ysyxsoc run成功运行后,你应该看到类似以下输出:
\ | /
- RT - Thread Operating System
/ | \ 5.0.0 build Jan 31 2026 17:00:00
2006 - 2022 Copyright by RT-Thread team
msh >
cd ~/ysyx-workbench/am-kernels/tests/cpu-tests
# 运行单个测试
make ARCH=riscv32e-ysyxsoc ALL=add run
# 运行所有 CPU 测试
make ARCH=riscv32e-ysyxsoc run-
stddef.h: No such file or directory- 检查 RISC-V 工具链是否正确安装:
riscv64-linux-gnu-gcc --version - 确保安装了
gcc-riscv64-linux-gnu
- 检查 RISC-V 工具链是否正确安装:
-
mill命令卡住或显示游戏界面- 你可能安装了错误的 snap 包,运行
sudo snap remove mill - 按照第三步重新安装正确的 Mill 构建工具
- 你可能安装了错误的 snap 包,运行
-
Verilator 版本过低
- Ubuntu apt 仓库的版本可能较老,建议从源码编译 v5.0+
-
NVBoard 窗口不显示(WSL2 用户)
- WSL2 需要 X Server 支持,安装 VcXsrv 或使用 WSLg
- 设置
export DISPLAY=:0(WSLg)或export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0(VcXsrv)
- Linux (推荐 Ubuntu 20.04 / 22.04)
- WSL2 (Windows Subsystem for Linux)
# 基础开发工具
sudo apt install build-essential git gdb-multiarch ccache
# RISC-V 交叉编译工具链
sudo apt install gcc-riscv64-linux-gnu g++-riscv64-linux-gnu
# Verilator 仿真器 (推荐 v5.0+,建议源码编译)
# 见上方完整搭建教程
# SDL2 库 (NVBoard 可视化)
sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev
# Java 运行时 (Mill 构建工具)
sudo apt install default-jdk
# 其他工具
sudo apt install device-tree-compiler flex bison libreadline-dev设置以下环境变量(添加到 ~/.bashrc):
export NEMU_HOME=/path/to/nemu
export AM_HOME=/path/to/abstract-machine
export NPC_HOME=/path/to/npc
export NVBOARD_HOME=/path/to/nvboard配置完成后,执行 source ~/.bashrc 使环境变量生效。
如果你是第一次搭建环境,请先阅读 Ubuntu 22.04 完整搭建教程。
cd npc
# 流水线版本(推荐)
make -f Makefile.soc pipeline
# 多周期版本
make -f Makefile.soc soc
# 带 NVBoard 可视化的流水线版本
make -f Makefile.soc nvboard-pipelinecd am-kernels/tests/cpu-tests
# 运行单个测试
make ARCH=riscv32e-ysyxsoc ALL=add run
# 运行所有测试
make ARCH=riscv32e-ysyxsoc runcd rt-thread-am/bsp/abstract-machine
# 编译
make ARCH=riscv32e-ysyxsoc
# 运行
make ARCH=riscv32e-ysyxsoc runcd am-kernels/benchmarks/coremark
make ARCH=riscv32e-ysyxsoc runcd nemu
make riscv32-am_defconfig # 使用预设配置
make # 编译自主设计的 RISC-V 处理器核心,基于 Verilog 实现。
npc/
├── vsrc/ # Verilog 源码
│ ├── npc_soc/ # 独立仿真配置 (AXI4-Lite)
│ └── ysyxsoc/ # SoC 集成配置 (AXI4)
│ └── pipeline/ # 五级流水线版本
├── csrc/ # C++ 仿真顶层 (Verilator)
│ └── dev/ # 外设仿真 (VGA, 键盘等)
├── Makefile # 独立仿真构建
└── Makefile.soc # ysyxSoC 构建
关键特性:
- 双配置架构:独立仿真 (npc_soc) 和 SoC 集成 (ysyxsoc)
- 多周期与五级流水线两种实现
- I-Cache 支持(4KB, 2-way 组相联)
- AXI4 Burst 传输
构建选项:
make -f Makefile.soc soc # 多周期版本
make -f Makefile.soc pipeline # 流水线版本
make -f Makefile.soc nvboard # 多周期 + NVBoard
make -f Makefile.soc nvboard-pipeline # 流水线 + NVBoardNEMU (NJU Emulator) 是教学用的 RISC-V 解释器,作为"黄金模型"与 NPC 进行 DiffTest 验证。
nemu/
├── src/
│ ├── cpu/ # CPU 执行引擎
│ │ └── difftest/ # DiffTest 实现
│ ├── isa/ # 多 ISA 支持 (riscv32/64, x86, mips32)
│ ├── memory/ # 内存子系统
│ ├── device/ # 外设模拟
│ └── monitor/ # 监控器与调试器 (SDB)
├── configs/ # 预配置文件
├── Kconfig # 配置系统
└── Makefile
主要功能:
- 多 ISA 支持:RISC-V (32/64), x86, MIPS32, LoongArch32r
- DiffTest:与外部 DUT 进行差分测试
- 内置调试器 (SDB):支持单步、断点、监视点
- 设备模拟:串口、定时器、键盘、VGA、音频
常用命令:
make menuconfig # 配置
make # 编译
make run # 运行Abstract Machine (AM) 是裸机编程的硬件抽象层,实现"一次编写,到处运行"。
abstract-machine/
├── am/
│ ├── include/ # API 定义 (am.h, amdev.h)
│ └── src/ # 各架构/平台实现
│ ├── riscv/ # RISC-V 实现
│ │ ├── npc/ # NPC 平台
│ │ ├── nemu/ # NEMU 平台
│ │ └── ysyxsoc/ # ysyxSoC 平台
│ └── native/ # Linux 原生平台
├── klib/ # 内核库 (printf, malloc, string 等)
└── scripts/ # 构建脚本与链接脚本
抽象层级:
- TRM (Turing Machine):基本计算环境
- IOE (I/O Extension):输入输出设备
- CTE (Context Extension):中断/异常处理
- VME (Virtual Memory Extension):虚拟内存
- MPE (Multi-Processing Extension):多处理器
支持的架构-平台组合:
riscv32e-npc:RISC-V 32E + NPCriscv32e-ysyxsoc:RISC-V 32E + ysyxSoCriscv32e-nemu:RISC-V 32E + NEMUnative:Linux 原生
基于 Chisel/Scala 构建的 SoC 顶层与互联架构。
ysyxSoC/
├── src/ # Chisel 源码
│ ├── SoC.scala # SoC 核心
│ ├── CPU.scala # CPU 封装 (BlackBox)
│ ├── device/ # 外设封装
│ └── amba/ # AXI4/APB 桥接
├── perip/ # 外设 Verilog 实现
├── rocket-chip/ # Rocket Chip 依赖
└── Makefile
内存映射:
| 外设 | 地址范围 | 总线 |
|---|---|---|
| SRAM | 0x0f000000 | AXI4 |
| UART | 0x10000000 | APB |
| SPI | 0x10001000 | APB |
| GPIO | 0x10002000 | APB |
| Keyboard | 0x10011000 | APB |
| MROM | 0x20000000 | AXI4 |
| VGA | 0x21000000 | APB |
| Flash (XIP) | 0x30000000 | APB |
| PSRAM | 0x80000000 | APB |
| SDRAM | 0xa0000000 | AXI4 |
生成 Verilog:
cd ysyxSoC
make verilog基于 SDL2 的可视化硬件模拟库,模拟 FPGA 开发板的外设。
nvboard/
├── include/ # 头文件
├── src/ # 源码实现
│ ├── vga.cpp # VGA 显示
│ ├── keyboard.cpp # 键盘输入
│ ├── led.cpp # LED 指示灯
│ └── segs7.cpp # 七段数码管
├── scripts/ # 构建脚本
└── example/ # 示例项目
支持的外设:
- VGA 显示 (640x480)
- PS/2 键盘
- LED 指示灯
- 七段数码管
- 拨码开关
- 按钮
基于 AM 运行的各种测试和示例程序。
am-kernels/
├── tests/
│ ├── cpu-tests/ # CPU 指令测试 (add, shift, mul 等)
│ ├── am-tests/ # AM 功能测试 (video, keyboard 等)
│ └── psram-test/ # PSRAM 测试
├── benchmarks/
│ ├── coremark/ # CoreMark 性能测试
│ ├── dhrystone/ # Dhrystone 性能测试
│ └── microbench/ # 微基准测试
└── kernels/
├── hello/ # Hello World
├── typing-game/ # 打字游戏
├── snake/ # 贪吃蛇
└── litenes/ # NES 模拟器
运行测试:
cd am-kernels/tests/cpu-tests
# 在 NEMU 上运行
make ARCH=riscv32e-nemu ALL=add run
# 在 ysyxSoC 上运行
make ARCH=riscv32e-ysyxsoc ALL=add run
# 运行所有测试
make ARCH=riscv32e-ysyxsoc run移植到 AM 平台的红白机 (NES/FC) 模拟器,可以运行《超级玛丽》等游戏。
cd fceux-am
make ARCH=riscv32e-ysyxsoc runRT-Thread 实时操作系统在 AM 平台的移植版本。
rt-thread-am/
├── bsp/abstract-machine/ # AM 板级支持包
├── src/ # RT-Thread 内核
├── components/ # 组件 (文件系统, Shell 等)
└── tools/ # 构建工具
cd npc
make run IMG=/path/to/program.bin
make wave # 生成并查看波形cd npc
# 编译并运行
make -f Makefile.soc run IMG=/path/to/program.bin
# 启用 NVBoard 可视化
make -f Makefile.soc nvboard IMG=/path/to/program.bin
# 使用流水线版本
make -f Makefile.soc pipeline IMG=/path/to/program.bincd am-kernels/tests/cpu-tests
# 指定测试用例
make ARCH=riscv32e-ysyxsoc ALL=add run
# 运行 benchmark
cd am-kernels/benchmarks/coremark
make ARCH=riscv32e-ysyxsoc run.
├── abstract-machine/ # 硬件抽象层
├── am-kernels/ # 测试程序集
├── fceux-am/ # FC 模拟器
├── nemu/ # NEMU 参考模型
├── npc/ # 处理器核心
├── nvboard/ # 虚拟 FPGA 板卡
├── rt-thread-am/ # RT-Thread 移植
├── ysyxSoC/ # SoC 框架
├── init.sh # 环境初始化脚本
├── Makefile # 顶层 Makefile
└── README.md # 本文件
本项目各模块遵循其原有的开源许可证。