参考:
(1)、PULPino datasheet:https://github.com/pulp-platform/pulpino/blob/master/doc/datasheet/datasheet.pdf
(2)、论文《基于RISC-V的PULPino+SoC的FPGA原型设计和物理实现》
1、OVERVIEW
PULPino是为RISC-V RI5CY和zero-riscy core 构建的单核芯片系统。PULPino重用了其bigger brother PULP的大部分组件。它使用单独的单端口数据和指令ram。它包括一个引导ROM,其中包含一个引导加载程序,可以通过SPI从外部闪存设备加载程序。
Figure 1.1 展示了SOC的框图。SoC使用AXI作为其与简单外设的APB桥的主接口。AXI和APB总线都具有32位宽的数据通道。 为了调试目的,SoC包括一个高级调试单元,它允许通过JTAG访问核心寄存器(core register)、两个RAMs和内存映射的IO。这两个ram都通过总线适配器连接到AXI总线。
图1.1 PULPino Overview.
PULPino主要针对RTL 仿真和ASICs,尽管也有一个FPGA版本。FPGA版本在性能方面并不是特别优的,因为我们主要使用它作为一个仿真平台,而不是一个standalone platform。
2、Memory Map
图2.1显示了PULPino的默认内存映射,假设有32kB的数据和指令内存。这可以在PULPino顶级系统版本文件中进行更改。
Figure 2.1: PULPino memory map.
2.1、Interrupt Vector Table
PULPino的IVT遵循了对RI5CY核心的定义。
表2.1:中断/异常(exception)偏移向量表
3、CPU Core
PULPino同时支持RISC-V RI5CY和RISC-V ZERO-RISCY。这两个core 具有相同的外部接口,因此与插头兼容(plug-compatible)。图3.1和3.2显示了两个core体系结构
The core使用一个非常简单的数据和指令接口来与数据和指令内存进行交互(talk)。为了与AXI接口,在PULPino中实例化了一个 core2axi 协议转换器。
为了调试,所有core register都被内存映射,允许通过AXI总线访问它们。core内部的调试单元通过此总线处理请求,并读取/设置 core register and/or halts the core。
The core支持 performance counters。这些主要用于 counting core internal events,如 stalls,但也有可能 count core-external events。为此,有ext_perf_counters_i端口,可以附加任意事件。然后,每当在该端口上看到 a logic high,the core 就会为该事件类型增加其 internal performance counter。
RISCY 核是一个有序的单发射核心,具有 4 级流水线,每个时钟周期能执行接近 1 条指令。该核心完全支持基本整数指令集、压缩指令集、乘法指令集扩展和单精度浮点指令集扩展,并且实现了多个 ISA 扩展,例如位操作指令、MAC 操作、支持定点操作、打包 SIMD 指令和点积。 它旨在提高超低功耗信号处理应用的能效。(见论文:基于RISC-V的PULPino+SoC的FPGA原型设计和物理实现)
Figure 3.1: RISCY core overview
ZERO RISCY 核是一个有序的单发射核心,有 2 级流水线,完全支持基本整数指令集和压缩指令集。它还可以配置为具有乘法指令集扩展和为嵌入式系
统而设计的,减少整数寄存器数目的基本整数指令集。 它旨在实现超低功耗和超低面积。(见论文:基于RISC-V的PULPino+SoC的FPGA原型设计和物理实现)
Figure 3.2: zero-riscy core overview
4、Advanced Debug Unit
高级调试单元有一个AXI主接口来访问外围设和内存。与PulpinoV1 the adv.相比,调试单元不再具有专门的调试接口来读出所有的core register。
所有的核心寄存器(core registers)现在都是内存映射的,这意味着它们可以通过AXI接口读取。因此,调试不仅可以通过JTAG进行,而且还可以通过SPI或任何其他接口进行。
JTAG信号被连接到SoC的引脚上。(信号:trstn、tck、tms、tdl、tdo、dbginf)
Figure 4.1: Advanced Debug Unit.