# RISC-V 软核
# 简介
核(CORE)是一个数字系统的核心,负责整个系统的内存调度,中断管理,算术逻辑运算等,如同整个系统的大脑,是由物理电气实现逻辑功能的关键。尽管复杂,但不可忽略的是,核同其他数字器件一样,也是一个典型的逻辑器件,由逻辑门、触发器构成,因此可以由硬件描述语言(Hardware Description Language,HDL)来描述。既然核可以由HDL来描述,那么对于每一个特定功能和性能(即逻辑的时序和功能特定)的核而言,必有一组HDL描述等价于它,而具体的器件信号、封装等,只不过是这组HDL依赖具体工艺的一种物理实现。因此,我们应该认识到,所谓核,本质上是一种知识产权,是一种特定的可描述的逻辑结构,应用于FPGA设备中。当前的FPGA设计规模巨大而且功能复杂,因此设计的每一个部分都从头开始是不切实际的。一种解决的办法是:对于较为通用的部分可以重用现有的功能模块,而把主要的时间和资源用在设计中的那些全新的、独特的部分。我们将这种功能模块称作IP核(Intelligent Property) 。
IP核的提供方式通常分为软核、固核和硬核这3类。软核(Soft IP Core)在 EDA 设计领域指的是综合之前的寄存器传输级(RTL) 模型,通常是指以HDL代码(Verilog,VHDL…)为形式的可综合源代码;固核(Firm IP Core)在 EDA 设计领域指的是带有平面规划信息的网表;硬核 (Hard IP Core)在 EDA 设计领域指经过验证的设计版图。软核只具备功能仿真功能,需要经过综合以及布局布线才能使用,其优点是灵活性高、可移植性强,允许用户自配置。
软核是 IP 核应用最广泛的形式,使用 FPGA 的通用逻辑资源(LUT+FF)搭建而成的。其中,软核处于RTL层级,以可综合的HDL(Verilog,VHDL)源代码的方式存在。在前期调研过程中,本项目将开源的 riscv 软核 Rocket 烧录到 Nexys A7-100T 开发板上,并在其上运行裁剪过 Linux 操作系统。后期,XiUOS 也计划移植到 Nexys A7-100T 开发板上,软核仍采用开源的 Rocket。
# 一些常见软核
# 开源RISCV软核
Rocket,是 UC Berkeley 的 RISC-V 项目团队发起并设计的兼容 RISC-V 指令集的 CPU 核。它是一款64位、5级流水线、单发射顺序执行处理器,支持 MMU,支持分页虚拟内存,具有兼容 IEEE 754-2008 标准的 FPU,具有分支预测功能,具有 BTB(Branch Prediction Buff)、BHT(Branch History Table)、RAS(Return Address Stack),Rocket是采用 Chisel(Constructing Hardware in an Scala Embedded Language)编写硬件电路,可以通过编译得到对应的 Verilog 设计,还可以得到对应的 C++ 模拟器。
PULPino, 是一个开源的微型控制系统,基于一个32位RISC-V核心,由瑞士苏黎世联邦理工学院开发。核心IPC接近1,完全支持基整数指令集 (RV32I),压缩指令 (RV32C) 和部分支持乘法指令集扩展 (RV32M)。
Shakti,印度理工学院的一个项目,由 Verilog 编写,其使用了大量第三方 IP,根据需要分成了不同的类。该计划不仅构建开源,生产级处理器,还包括互连结构,验证工具,存储控制器,外围 IP 和 SOC 工具等相关组件。
蜂鸟,国内最早比较成熟的 RISC-V 实现,由胡振波(现在芯来创始人)开发,使用Verilog设计。其开源CPU为E200:使用2级流水线。
tinyriscv,国内开发者在GitHub上开源的一个微RISC-V处理器核,用verilog语言编写,以最简单、最通俗易懂的方式实现RISC-V指令的功能,没有对代码做任何的优化。
# 商业非开源软核
MicroBlaze,MicroBlaze 是功能齐全的、更少指令集的 FPGA 优化型 32 位 RISC 软处理器,可充分满足各种应用需求。MicroBlaze 是一款高度可配置的易用型处理器,可在 FPGA 以及全可编程 (AP) SoC 产品系列中使用。它免费配套提供 Vivado 设计与系统版以及 Vivado Webpack 版。
Nios II系列,是 Altera 推出的32位RISC嵌入式处理器。Nios II是应用于 Intel FPGA 的嵌入式软核处理器,它是 Qsys 嵌入式系统的核心部件,具有较强的性能和可定制特性。一片 FPGA 内部可以构建多个 Nios II 处理器,它们可以作为主 CPU,也可以是协处理器,在同一芯片内部协调有序地完成整个复杂系统的各项功能。Nios II 处理器内核是32位 RISC 架构处理器,包含了大多数现代32位处理器中常见的基本架构元素。