数字IC实践项目(5)—RISC-V开源单核片上系统PULPino(开源项目)


写在前面的话


PULPino是一个为RISC-V RI5CY和Zero-RISCY内核建立的单核系统芯片。PULPino重用了PULP的大部分组件。它使用独立的单端口数据和指令RAM。它包括一个引导ROM,其中包含一个引导装载器,可以通过SPI从外部闪存设备加载程序。
下图是SoC的框图。SoC使用AXI作为其主要的互连,并有一个桥接APB用于简单的外围设备。AXI和APB总线都具有32位宽的数据通道。出于调试的目的,SoC包括一个高级调试单元,可以通过JTAG访问核心寄存器、两个RAM和内存映射的IO。两个RAM都通过总线适配器连接到AXI总线上。



项目难度:⭐⭐⭐⭐⭐
项目推荐度:⭐⭐⭐⭐
项目推荐天数:14~42天

项目简介和学习目的


RISCY是一个有序的单问题核心,具有4个流水线阶段,完全支持基本整数指令集 (RV32I), 压缩指令(RV32C)和乘法指令集扩展(RV32M)。它可以配置为具有单精度浮点数 指令集扩展 (RV32F)。
Zero-riscy 是一个有序的单问题核心,具有 2 个管道阶段,它具有 完全支持基本整数指令集(RV32I)和 压缩指令(RV32C)。可配置为具有乘法指令集 扩展(RV32M)和减少的寄存器数量扩(RV32E)。 它旨在针对超低功耗和超低面积限制。


当内核空闲时,平台可以进入低功耗模式, 其中只有一个简单的事件单元处于活动状态,其他所有内容都是时钟门控的,并且消耗的功率(泄漏)最小。
PULPino包含广泛的 外设,包括 I2S、I2C、SPI 和 UART。平台内部设备 可以通过JTAG和SPI从外部访问,允许预加载带有可执行代码的 RAM。在独立模式下,平台从 内部引导 ROM 并从外部 SPI 闪存加载其程序。整个项目可用于RTL仿真和FPGA,并于2016年采用UMC 65nm成功流片。其具有完备的调试及说明文件。


软件环境要求
复现整个项目推荐在Linux系统并配置以下软件环境:
ModelSim(linux版本)(原始版本>= 10.2c对其进行了测试)
CMake >= 2.8.0,建议使用大于 3.1.0 的版本
RISCV工具链,需要riscv32-unknown-elf-gcc编译器和朋友。
python2 >= 2.6
Verilator 3.884 仅在使用 Verilator 评估 PULPino 时才需要。


项目实践环境:
FPGA开发环境:
前仿: Modelsim SE-64 2019.2
综合: Quartus (Quartus Prime 17.1) Standard Edition****

数字IC开发环境:
前仿: VCS 2016
综合:DC 2016


项目学习目的:
(1)熟练掌握项目中各文件的工程管理;
(2)熟悉System Verilog HDL仿真、FPGA综合工具以及了解数字IC设计工具及流程;
(3)学习SOC的基本结构和基础原理;
(4)学习PUIPino结构和各模块功能;
(5)熟练掌握System Verilog语法和验证方法;
(6)熟练掌握Modelsim、CMake、Python等开发工具。
CPU Core


PULPino同时支持RISC-V RI5CY和RISC-V zero-riscy。这两个内核具有相同的外部接口,因此是接口部分是兼容的。

RISCY Core 结构


Zero-RISCY Core 结构



对比上述两个CPU Core,可以发现Decoder、GPR、CSR、LSU、ALU等模块是相互复用的。
IP Cores整个SOC系统涉及六个IP核,分别是:
(1)adv_dbg_if

(2)apb
(3)axi


(4)riscv



(5)zero-riscvy



(6)fpu


总结

整个项目涵盖了完整的SOC设计和验证,rtl和脚本齐全,不过需要注意的是其中riscv和zero-riscv等IP核经过了更新,时间跨度也比较长,在搭建软件环境和跑全流程方面会相对比较耗费时间,个人建议是从IP相关的知识进行学习,对于SOC设计感兴趣的同学可以选择继续学习,该开源平台每年几乎都在更新相关的工作。

感兴趣的同学可以查看pulp平台流片图:
苏黎世联邦理工学院集成系统实验室芯片库

项目地址:
https://github.com/pulp-platform/pulpino