当前位置:诺佳网 > 电子/半导体 > 处理器/DSP >

RISC V 开源芯片项目:PULP(Parallel Ultra Low Power)平

时间:2025-04-09 | 栏目:处理器/DSP | 点击:

一、项目背景与核心目标

PULP(Parallel Ultra Low Power)是由瑞士苏黎世联邦理工学院(ETH Zurich)和意大利博洛尼亚大学(University of Bologna)于2013年联合发起的开源多核计算平台。其核心目标是为物联网IoT)终端节点边缘计算设备提供低功耗、高性能嵌入式解决方案。通过硬件与软件的协同优化,PULP在毫瓦级功耗下实现高效并行计算,满足传感器数据流处理、实时信号处理等需求。
*附件:pulp-master.zip


二、技术架构解析

1. 硬件设计
2. 内存与总线
3. 低功耗设计

三、软件生态与开发工具

1. 操作系统支持
2. 工具链
3. 应用开发

四、典型应用场景

  1. 物联网终端 :处理多传感器数据流(如加速度计、麦克风阵列),适用于智能农业、工业监测。
  2. 边缘AI :GAP8处理器搭载神经处理器(NPU),实现本地化图像识别与语音处理。
  3. 医疗设备 :低功耗ECG监测、可穿戴健康设备,支持长时间运行。
  4. 自动驾驶感知 :实时处理激光雷达点云数据,优化路径规划。

五、开源生态与合作模式


六、挑战与未来展望

  1. 技术挑战
    • 制造依赖 :部分工艺依赖台积电55nm/28nm制程,尚未完全实现开源流片。
    • 生态碎片化 :需与Arm TrustZone、Intel SGX等闭源方案竞争,推动RISC-V软件工具链统一。
  2. 未来方向
    • 异构计算 :整合CPU、GPU、NPU,支持更复杂的AI推理任务。
    • 车规级应用 :拓展至车载ECU和自动驾驶芯片,满足功能安全标准(ISO 26262)。
    • 量子安全 :研究抗量子攻击的硬件加密模块。

七、总结

PULP通过开源硬件设计模块化架构 ,成为物联网与边缘计算领域的标杆平台。其多核并行、低功耗特性在AIoT场景中展现出显著优势,未来有望通过生态扩展和技术迭代,推动RISC-V在工业与消费电子中的普及。


参考GitHub
https://github.com/pulp-platform/pulp

PULP平台

PULP (Parallel Ultra-Low-Power) 是一个开源多核计算平台,是苏黎世联邦理工学院和博洛尼亚大学之间持续合作的一部分 - 始于 2013 年。

PULP 架构针对需要灵活处理多个传感器生成的数据流的物联网终端节点应用,例如加速度计、低分辨率摄像头、麦克风阵列、生命体征监测器。

PULP 由先进的微控制器架构组成,在完整性和复杂性方面比 PULPino 领先了一大步,负责自主 I/O、高级数据预处理、外部中断,并包括一个紧密耦合的处理器集群,计算密集型内核扫描从主处理器卸载到该集群。PULP 架构包括:

RISCY 是一个有序的单发射内核,具有 4 个流水线级,它具有接近 1 的 IPC,完全支持基本整数指令集 (RV32I)、压缩指令 (RV32C) 和乘法指令集扩展 (RV32M)。它可以配置为具有单精度浮点指令集扩展 (RV32F)。它实现了多个 ISA 扩展,例如:硬件循环、后递增加载和存储指令、位作指令、MAC作、支持定点作、打包 SIMD 指令和点积。它旨在提高超低功耗信号处理应用的能效。RISCY 实现了 1.9 特权规范的子集。有关内核的更多信息,请参见http://ieeexplore.ieee.org/abstract/document/7864441/ 和 IP 文档。

Zero-Riscy 是一个有序、单发射内核,具有 2 个流水线级,它完全支持基本整数指令集 (RV32I) 和压缩指令 (RV32C)。它可以配置为具有乘法指令集扩展 (RV32M) 和减少的寄存器数扩展 (RV32E)。它旨在针对超低功耗和超低面积限制。zero-riscy 实现 1.9 特权规范的子集。有关内核的更多信息,请参见http://ieeexplore.ieee.org/document/8106976/ 和 IP 文档。

PULP 包括一个新的高效 I/O 子系统,通过 uDMA (micro-DMA) 与外设自主通信。内核只需要对 uDMA 进行编程并等待它处理传输。有关内核的更多信息,请参见http://ieeexplore.ieee.org/document/8106971/ 和 IP 文档。

PULP 支持接口上的 I/O,例如:

PULP 还支持集成硬件加速器 (HardwareProcessing Engines),这些加速器与 RI5CY 内核共享内存,并在内存映射上编程。可以在 hwpe-mac-engine 中找到一个示例加速器,该加速器在定点值的向量上执行乘法累加(更新 IP 后:请参阅下面的“入门”部分)。hwpe-stream 和 hwpe-ctrl 文件夹包含将流加速器插入数据和控制平面上的 PULP 系统所需的 IP。有关如何设计和集成此类加速器的更多信息,请参阅 hwpe-stream/doc 和 https://arxiv.org/abs/1612.05974。

开始

[](https://github.com/pulp-platform/pulp#getting-started)

先决条件

[](https://github.com/pulp-platform/pulp#prerequisites)

为了能够使用 PULP 平台,您需要 PULP 工具链。获取说明可在此处找到:https://github.com/pulp-platform/pulp-riscv-gnu-toolchain。

构建 RTL 仿真平台

[](https://github.com/pulp-platform/pulp#building-the-rtl-simulation-platform)

要构建 RTL 仿真平台,首先要获取构成 PULP 系统的最新版本的 IP:

source setup/vsim.sh

make checkout

make scripts

make build

注意:运行脚本时可能会出现错误(无法生成子进程。打开的文件太多(os 错误 24)。虽然修复是 WIP,但解决方法是通过设置(例如 ulimit)4096 (ulimit -n 4096) 来增加计算机可用的进程数。

此命令构建一个不依赖于外围设备的外部模型的仿真平台版本。有关如何插入某些型号的真实 SPI、I2C、I2S 外设的详细信息,请参见下文(专有验证 IP)。

默认的依赖管理是使用 bender 来收集 IP 来完成的。如果您想使用旧版 IPApproX 工具,请设置 IPAPPROX 环境变量,例如通过运行 export IPAPPROX=1,并继续作,风险自负。

在 IP 上工作

[](https://github.com/pulp-platform/pulp#working-on-ips)

处理单个 IP 的最简单方法是使用 bender 和以下命令克隆它:

./bender clone $IP

这会将 IP 检出到 working_dir 目录,在那里可以修改 IP 并提交和推送更改。正确的链接将通过 Bender.local 文件中的覆盖来设置,从而强制 bender 工具使用此版本的依赖项。要构建平台,请确保在调用 ./bender clone 后从上面的 make scripts 步骤开始。

更改完成后,请确保使用新版本相应地更新调用 IP 依赖项的软件包中的 Bender.yml 文件。bender parents 命令可以帮助确定哪些依赖项的 Bender.yml 文件需要更新。请注意,在修改依赖项版本时,需要调用 ./bender update 命令以重新解析正确的版本。更新完成后,可以删除 Bender.local 中的相应行以恢复正常的依赖项解析,不再使用 working_dir 中的版本(请务必调用 ./bender update)。有关更多信息,请查看 bender 文档。

下载并运行简单的 C 回归测试

[](https://github.com/pulp-platform/pulp#downloading-and-running-simple-c-regression-tests)

最后,您可以下载并运行测试;为此,您可以查看以下存储库:

现在你可以将目录更改为你喜欢的测试,例如:对于 hello worldtest,运行

git clone https://github.com/pulp-platform/regression_tests.git

git clone https://github.com/pulp-platform/pulp-runtime.git

source pulp-runtime/configs/pulp.sh

export PATH=*path to riscv gcc toolchain*/bin:$PATH

export PULP_RISCV_GCC_TOOLCHAIN= *path to riscv gcc toolchain*

cd regression_tests/hello

mae clean all run gui=1

开源仿真平台依靠 JTAG 来模拟 PULP L2 内存的预加载。如果您想模拟更真实的场景(例如访问外部 SPI Flash),请查看以下部分。

如果您想查看 Modelsim GUI,只需键入

make conf gui=1

在开始模拟之前。

如果要保存(压缩的)VCD 以供进一步检查,请键入

make conf vsim/script=export_run.tcl

在开始模拟之前。您将在build//pulp/export.vcd.gz 中找到 VCD,其中 是测试的 C 源代码的名称。

专有验证 IP

[](https://github.com/pulp-platform/pulp#proprietary-verification-ips)

完整的仿真平台可以利用一些商用 SPI、I2C、I2S 外设模型连接到开源 PULP 仿真平台。在 rtl/vip/spi_flash、rtl/vip/i2c_eeprom、rtl/vip/i2s 中,您可以找到安装 SPI、I2C 和 I2S 型号的说明。

安装 SPI flash 模型后,可以切换到更真实的引导模拟,其中 PULP 的内部 ROM 用于执行初始引导并开始从 SPI flash 中自主获取程序。为此,测试台的 LOAD_L2 参数必须从JTAG 切换到 STANDALONE。

PULP-SDK 开发工具包

[](https://github.com/pulp-platform/pulp#pulp-sdk)

如果您是软件开发人员,您可以在此处找到 PULP-SDK:https://github.com/pulp-platform/pulp-sdk。

PULP 平台结构

[](https://github.com/pulp-platform/pulp#pulp-platform-structure)

按照 入门 部分所述进行完全设置后,此根存储库的结构如下:

要求

[](https://github.com/pulp-platform/pulp#requirements)

RTL 平台有以下要求:

仓库组织

[](https://github.com/pulp-platform/pulp#repository-organization)

PULP 平台是高度分层的,各种 IP 的 Git 存储库遵循层次结构,以保持最大的灵活性。IP 更新系统的大部分复杂性都隐藏在 bender 工具后面;但是,需要了解一些详细信息:

用于收集 IP 和创建仿真脚本的工具具有许多功能,这些功能不一定适用于最终用户,但对开发人员可能很有用;如果您想了解更多信息,例如将 ownrepository 集成到流程中,您可以在https://github.com/pulp-platform/bender/blob/master/README.md 中找到文档

您可能感兴趣的文章:

相关文章