3、RISC-V软核IP获取与导入:常用开源RISC-V核介绍

好,咱们进入实战环节的第一个硬骨头——怎么把开源的RISC-V软核弄到手,再打包成Vivado能认的IP核。

说实话,我刚开始接触RISC-V那会儿,也被这个问题卡过。GitHub上一搜一大把,到底选哪个?下载下来一堆.v文件,怎么塞进Vivado?嗯,今天咱们就把这事捋清楚。

3.1 常用开源RISC-V核:三足鼎立

目前开源RISC-V软核里,最常用的就三个:VexRiscvPicoRV32Rocket 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环境。嗯,这个我踩过坑,后面会细说。
注意:下载后先看README!很多问题README里都写了,别像我一样闷头搞半天才发现。

3.4 将RTL源码打包为Vivado IP核

源码拿到手了,怎么变成Vivado能用的IP核?有两种方法:

方法一:直接添加RTL文件(简单粗暴)

在Vivado里新建工程,然后点击"Add Sources",把所有的.v文件加进去。Vivado会自动识别顶层模块。

这个方法最快,但缺点是不方便复用。下次换个工程,又得重新加一遍。

方法二:打包成IP核(推荐)

我个人习惯用这个方法。步骤如下:

  1. 在Vivado里点击Tools → Create and Package New IP
  2. 选择Package your current project
  3. 指定IP核名称、版本、厂商信息
  4. File Groups里添加所有RTL源文件
  5. Ports and Interfaces里配置接口(比如AXI总线)
  6. 点击Package IP完成打包

打包完成后,这个IP核会出现在Vivado的IP Catalog里,以后任何工程都能直接调用。

小技巧:打包时记得添加xdc约束文件。我曾经忘了加,结果综合后时序一塌糊涂,排查了半天才发现是约束没带进去。

3.5 知识体系一览

下面这张图,把咱们这节的核心逻辑串起来了:

RISC-V软核IP获取与导入流程 VexRiscv PicoRV32 Rocket Chip 从GitHub获取源码(git clone + 子模块) 方法一:直接添加RTL文件 方法二:打包为Vivado IP核 Vivado工程中可用的RISC-V软核IP

3.6 实战建议

如果你是第一次搞,我建议从PicoRV32入手。它最简单,没有依赖,一个文件搞定。跑通了再换VexRiscv体验配置的灵活性。

至于Rocket Chip,等你把前两个玩熟了再说。别一上来就挑战高难度,容易劝退。

核心要点

  • 轻量应用选PicoRV32,灵活配置选VexRiscv,高性能SoC选Rocket Chip
  • 下载时注意子模块和版本锁定
  • 打包IP核时别忘了加约束文件

好了,这一节就到这。源码拿到手、IP核打好包,下一步就是把它例化到工程里了。别急,咱们一步步来。

专注资料整理