3、RISC-V软核IP获取与导入:常用开源RISC-V核介绍
好,咱们进入实战环节的第一个硬骨头——怎么把开源的RISC-V软核弄到手,再打包成Vivado能认的IP核。
说实话,我刚开始接触RISC-V那会儿,也被这个问题卡过。GitHub上一搜一大把,到底选哪个?下载下来一堆.v文件,怎么塞进Vivado?嗯,今天咱们就把这事捋清楚。
3.1 常用开源RISC-V核:三足鼎立
目前开源RISC-V软核里,最常用的就三个:VexRiscv、PicoRV32、Rocket Chip。它们各有各的脾气,我一个个说。
| 核名称 | 架构风格 | 资源占用 | 适合场景 |
|---|---|---|---|
| VexRiscv | SpinalHDL编写,可配置 | 约2k-4k LUT | 嵌入式、IoT、教学 |
| PicoRV32 | 纯Verilog,极简 | 约1k-2k LUT | 超轻量控制、替代8051 |
| Rocket Chip | Chisel生成,高性能 | 约10k+ LUT | SoC、Linux运行 |
3.2 逐个聊聊这三个核
VexRiscv
我个人最喜欢VexRiscv。为什么?因为它用SpinalHDL写的,配置起来特别灵活。你可以像搭积木一样,选择要不要乘法器、要不要分支预测、甚至要不要MMU。
我在一个IoT项目里用过它,只用了不到3000个LUT,跑到了100MHz。嗯,这个性价比很香。
获取方式:GitHub上搜"VexRiscv",或者直接克隆:
git clone https://github.com/SpinalHDL/VexRiscv.git
PicoRV32
如果你追求极致的简单,PicoRV32是首选。它只有一个.v文件,纯Verilog,没有依赖。说白了,就是给那些只想快速跑个RISC-V的人准备的。
我记得有一次帮客户做FPGA替换MCU的方案,就用PicoRV32,从下载到跑通Hello World,只用了半天。你想想看,这效率多高。
获取方式:
git clone https://github.com/YosysHQ/picorv32.git
Rocket Chip
Rocket Chip是伯克利出品,用Chisel语言生成。它是个大家伙,支持多级流水线、分支预测、甚至能跑Linux。但代价是资源占用大,配置也复杂。
我建议,除非你要做高性能SoC或者跑Linux,否则别轻易碰它。我曾经在一个项目里硬上Rocket Chip,结果光配置就花了两周,最后发现VexRiscv完全够用。
获取方式:
git clone https://github.com/chipsalliance/rocket-chip.git
3.3 从GitHub获取源码:避坑指南
源码下载本身不难,但有几个坑我得提醒你:
- 子模块问题:很多RISC-V核依赖子模块。比如Rocket Chip,直接clone下来编译会报错。你得加上
--recursive参数:git clone --recursive https://github.com/... - 版本锁定:我建议你下载时指定一个稳定版本,别用master分支。master可能随时有改动,今天能编译,明天就挂了。
- 仿真环境:有些核自带仿真脚本,但依赖特定工具链。比如VexRiscv需要安装SpinalHDL的sbt环境。嗯,这个我踩过坑,后面会细说。
3.4 将RTL源码打包为Vivado IP核
源码拿到手了,怎么变成Vivado能用的IP核?有两种方法:
方法一:直接添加RTL文件(简单粗暴)
在Vivado里新建工程,然后点击"Add Sources",把所有的.v文件加进去。Vivado会自动识别顶层模块。
这个方法最快,但缺点是不方便复用。下次换个工程,又得重新加一遍。
方法二:打包成IP核(推荐)
我个人习惯用这个方法。步骤如下:
- 在Vivado里点击Tools → Create and Package New IP
- 选择Package your current project
- 指定IP核名称、版本、厂商信息
- 在File Groups里添加所有RTL源文件
- 在Ports and Interfaces里配置接口(比如AXI总线)
- 点击Package IP完成打包
打包完成后,这个IP核会出现在Vivado的IP Catalog里,以后任何工程都能直接调用。
xdc约束文件。我曾经忘了加,结果综合后时序一塌糊涂,排查了半天才发现是约束没带进去。
3.5 知识体系一览
下面这张图,把咱们这节的核心逻辑串起来了:
3.6 实战建议
如果你是第一次搞,我建议从PicoRV32入手。它最简单,没有依赖,一个文件搞定。跑通了再换VexRiscv体验配置的灵活性。
至于Rocket Chip,等你把前两个玩熟了再说。别一上来就挑战高难度,容易劝退。
核心要点:
- 轻量应用选PicoRV32,灵活配置选VexRiscv,高性能SoC选Rocket Chip
- 下载时注意子模块和版本锁定
- 打包IP核时别忘了加约束文件
好了,这一节就到这。源码拿到手、IP核打好包,下一步就是把它例化到工程里了。别急,咱们一步步来。