一、项目背景与核心目标
PULP(Parallel Ultra Low Power)是由瑞士苏黎世联邦理工学院(ETH Zurich)和意大利博洛尼亚大学(University of Bologna)于2013年联合发起的开源多核计算平台。其核心目标是为物联网(IoT)终端节点和边缘计算设备提供低功耗、高性能的嵌入式解决方案。通过硬件与软件的协同优化,PULP在毫瓦级功耗下实现高效并行计算,满足传感器数据流处理、实时信号处理等需求。
*附件:pulp-master.zip
二、技术架构解析
1. 硬件设计
2. 内存与总线
3. 低功耗设计
- 动态电压频率调节(DVFS) :根据负载调整电压和频率。
- 电源门控 :关闭闲置模块以节省功耗。
- 事件驱动中断 :减少轮询开销,典型功耗低于10mW。
三、软件生态与开发工具
1. 操作系统支持
- FreeRTOS :轻量级实时系统,适用于资源受限设备。
- Nuttx :支持文件系统、网络协议栈,适合复杂嵌入式应用。
2. 工具链
- RISC-V GCC工具链 :支持RV32IMC扩展指令编译。
- Pulp-SDK :提供硬件抽象层(HAL)、驱动库及调试工具。
- 仿真与验证 :基于Verilator和ModelSim的RTL仿真环境,支持FPGA部署。
3. 应用开发
- 机器学习 :通过HWPEs加速CNN推理,支持TensorFlow Lite模型部署。
- 信号处理 :优化FFT、滤波器算法,适用于生物传感和音频处理。
四、典型应用场景
- 物联网终端 :处理多传感器数据流(如加速度计、麦克风阵列),适用于智能农业、工业监测。
- 边缘AI :GAP8处理器搭载神经处理器(NPU),实现本地化图像识别与语音处理。
- 医疗设备 :低功耗ECG监测、可穿戴健康设备,支持长时间运行。
- 自动驾驶感知 :实时处理激光雷达点云数据,优化路径规划。
五、开源生态与合作模式
- 管理架构 :由lowRISC基金会主导标准化,联合西部数据、新唐科技等企业推动商业化。
- 社区贡献 :
- 衍生项目 :
六、挑战与未来展望
- 技术挑战 :
- 制造依赖 :部分工艺依赖台积电55nm/28nm制程,尚未完全实现开源流片。
- 生态碎片化 :需与Arm TrustZone、Intel SGX等闭源方案竞争,推动RISC-V软件工具链统一。
- 未来方向 :
- 异构计算 :整合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 架构包括:
- RI5CY 内核或零 riscy 内核作为主内核
- 自主输入/输出子系统 (uDMA)
- 新的内存子系统
- 支持硬件处理引擎 (HWPE)
- 新的简单中断控制器
- 新外设
- 新的并行计算集群
- 新系统 DMA
- 新建事件单元
- 新 SDK
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,例如:
- SPI (作为主设备)
- I2S 系列
- 摄像头接口 (CPI)
- I2C 接口
- 串口
- JTAG
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)
最后,您可以下载并运行测试;为此,您可以查看以下存储库:
- 运行时测试:https://github.com/pulp-platform/regression_tests
- 纸浆运行时间:https://github.com/pulp-platform/pulp-runtime
现在你可以将目录更改为你喜欢的测试,例如:对于 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)
按照 入门 部分所述进行完全设置后,此根存储库的结构如下:
- rtl/tb 包含主平台 TestBench 和相关文件。
- rtl/vip 包含用于模拟外部外设的验证 IP,例如 SPI 闪光灯和相机。
- rtl 还可以包含其他材料(例如,全局包含、顶级文件)
- sim 包含 ModelSim/QuestaSim 仿真平台。
- pulp-sdk 包含 PULP 软件开发包;pulp-sdk/tests包含随 SDK 一起发布的所有测试。
- Bender.yml 包含 bender 工具的所有依存关系和源文件信息。
要求
[](https://github.com/pulp-platform/pulp#requirements)
RTL 平台有以下要求:
- 相对较新的基于 Linux 的作系统;我们测试了 Ubuntu 16.04 和CentOS 7。
- ModelSim 的最新版本(我们使用 10.6b 版本对其进行了测试)。
- Python 3.4,安装了 pyyaml 模块(您可以通过pip3 install pyyaml 获取它)。
- SDK 有自己的依赖项,如https://github.com/pulp-platform/pulp-sdk/blob/master/README.md
仓库组织
[](https://github.com/pulp-platform/pulp#repository-organization)
PULP 平台是高度分层的,各种 IP 的 Git 存储库遵循层次结构,以保持最大的灵活性。IP 更新系统的大部分复杂性都隐藏在 bender 工具后面;但是,需要了解一些详细信息:
- 不要假设任意 IP 的 master 分支是稳定的;许多内部 IP 可能包含其历史记录的某个时间点的不稳定更改。相反,在顶级平台(pulpissimo、pulp)中,我们总是使用稳定版本的 IP。因此,您应该能够安全地使用 pulpissimo 的master 分支。
- 默认情况下,将使用 HTTPS 从 GitHub 收集 IP。这使得每个人都可以在不先将 SSH 密钥上传到 GitHub 的情况下克隆它们。但是,对于开发来说,使用 SSH 通常更容易,特别是如果您想将更改推回去。
用于收集 IP 和创建仿真脚本的工具具有许多功能,这些功能不一定适用于最终用户,但对开发人员可能很有用;如果您想了解更多信息,例如将 ownrepository 集成到流程中,您可以在https://github.com/pulp-platform/bender/blob/master/README.md 中找到文档
-
RISC
+关注
关注
6文章
482浏览量
85080
发布评论请先 登录
明晚开播 |开源芯片系列讲座第28期:高性能RISC-V微处理器芯片

芯新闻|昊芯亮相第五届RISC-V中国峰会,共绘开源芯片新纪元

RISC-V 的平台思维和生态思维
直播预约 |开源芯片系列讲座第28期:高性能RISC-V微处理器芯片

大象机器人携手进迭时空推出 RISC-V 全栈开源六轴机械臂产品
RISC V 开源芯片项目:OpenTitan 详细解读

芯来科技携手芯芒科技发布RISC-V CPU系统仿真平台
关于RISC-V芯片的应用学习总结
深度数智DC-ROMA RISC-V Laptop II入选IEEE Spectrum“Top Tech 2025”

圣诞特辑 |开源芯片系列讲座第25期:RISC-V架构在高性能领域的进展与挑战

评论