设计空间与 PPA
DULI 不是一套冻结的设计。每个机制都有便宜和激进两种实现方式,评估过程沿着 这条曲线,从即插即用的扩展走到最低延迟的版本。本页是这条曲线的地图。
基线
扩展在一颗专门构建的 RISC-V 实时核心上探索,这样测到的是机制本身的开销, 而不是某条商业流水线的特性:
| 属性 | 数值 |
|---|---|
| 指令集 / 流水线 | RV32IM,三级顺序执行,静态分支预测 |
| 存储 | 哈佛结构,64 位指令总线,64 位 AHB-Lite 数据总线,无 cache |
| 保护 | 8 项 PMP,支持 NAPOT 与 TOR |
| 性能 | 2.77 CoreMark/MHz |
| 频率 / 工艺 | 典型 200 MHz,最高 240 MHz,Nangate 45 nm |
| 核心面积 | 0.0715 mm² |
| 内核级中断 | 硬件 5 周期;经微内核 634 周期 |
四个可调项
| 维度 | 便宜的一端 | 快的一端 | 代价 |
|---|---|---|---|
| IID 查询 | RAM 表 | CPU 内 CAM | 延迟 vs. 核心面积 |
| 域表位置 | 主 SRAM | 专用 TCM | 总线竞争 vs. 额外访存端口 |
| 上下文切换 | 压栈到 SRAM | 寄存器组 + 溢出回退 | 压栈延迟 vs. 面积 |
| 被抢占的内核 PMP | 溢出到内存 | 影子寄存器组 | 几个周期 vs. 一组影子寄存器 |
五个变体对应依次出现的瓶颈:先表查询,再上下文压栈,再总线竞争,最后是 IID 本身。
V1 — 最小复杂度
IID 为 RAM 表,上下文压入主 SRAM,全部表放在同一块内存,不新增总线端口。 内核管理的 PMP 使用影子寄存器组。
37 周期,核心面积 +23%(0.0878 mm²),静态 1.89 mW,动态 22.4 µW/MHz。 这是必须保持原有存储接口的核心所选的点。目标休眠时,它已经比最好的软件方案快 3 倍,而普通计算负载下的动态功耗只增加约 3%。
V2 — 隐藏表延迟
用一个专用 TCM 端口存放上下文栈——这是最长的操作。PMP 与预算表访问现在与压栈 重叠,而不是互相竞争。
29 周期,+27%(0.0905 mm²),1.90 mW,23.9 µW/MHz。 新增端口带来的面积与 功耗开销很小;这是已经具备 TCM 的核心的甜点。它也是 V5 寄存器组耗尽时的回退 模式。
V3 — 消除压栈瓶颈
增加一组寄存器实现零延迟上下文切换;TCM 栈保留,用于无界嵌套。
17 周期,+48%(0.1057 mm²),2.23 mW,23.95 µW/MHz。 与 Cortex-R4 的 中断延迟相当。第二组寄存器会把面积推到 +70%,却只增加嵌套深度。
V4 — 解决表竞争
PMP 表搬到自己的 TCM 端口,与预算装入并行。
14 周期,+51%(0.1077 mm²),2.23 mW,23.95 µW/MHz。 与 Cortex-M0 的 内核级中断延迟相当——同时保持完整的隔离。
V5 — 零延迟识别
IID 变成 CAM,在中断应答周期内完成查询;16 项足以覆盖设计目标的六到八个进程 整合场景。
模型 11 周期,实测 15 周期,+66%(0.1186 mm²),2.53 mW,23.6 µW/MHz。 它比 Cortex-M3 的中断入口更快,而且动态功耗反而低于 V3/V4——因为 IID 单元不再 位于数据通路上。把 CAM 减半到 8 项,面积为 +57%;翻倍到 32 项,面积为 +81%。
全部变体
| 变体 | 延迟(周期) | 核心面积(mm²) | 相对基线 | 静态(mW) | 动态计算(µW/MHz) | 动态背靠背(µW/MHz) |
|---|---|---|---|---|---|---|
| 基线核心 | 5(内核级) | 0.0715 | 100% | 1.50 | 21.75 | 12.80 |
| V1 | 37 | 0.0878 | 123% | 1.89 | 22.40 | 25.00 |
| V2 | 29 | 0.0905 | 127% | 1.90 | 23.90 | 25.90 |
| V3 | 17 | 0.1057 | 148% | 2.23 | 23.95 | 28.65 |
| V4 | 14 | 0.1077 | 151% | 2.23 | 23.95 | 29.30 |
| V5 | 11 | 0.1186 | 166% | 2.53 | 23.60 | 26.60 |
| 内核路径 | 634 | — | — | — | — | — |
表中的 V1–V5 延迟为硬件模型值;V5 在 50 MHz FPGA 上端到端实测为 15 个周期。
| 变体 | 面积开销 | 延迟(周期) |
|---|---|---|
| Base | 0% | 5 |
| V1 | +23% | 37 |
| V2 | +27% | 29 |
| V3 | +48% | 17 |
| V4 | +51% | 14 |
| V5 | +66% | 11 |
“背靠背”一列是扩展真正工作时的功耗:基线核心动态功耗为 12.8 µW/MHz,持续 中断交付大约翻倍。普通计算时扩展不活动,所以 V1 的动态开销只有约 3%。
真实 SoC 中的面积
核心只是微控制器的一小部分。测量四颗去封装的 40 nm SoC(比 45 nm 测试芯片 更先进)后,扩展的占比一目了然:
| SoC | 裸片面积(mm²) | 核心占比 | V1 额外 | V2 额外 | V5 额外 |
|---|---|---|---|---|---|
| STM32H743(通用) | 23.78 | 0.3% | 0.07% | 0.08% | 0.20% |
| LPC55S69(安全) | 8.06 | 0.9% | 0.20% | 0.24% | 0.58% |
| ESP32-C3(Wi-Fi IoT) | 5.18 | 1.4% | 0.31% | 0.37% | 0.91% |
| TC387(汽车) | 56.46 | 0.1% | 0.03% | 0.03% | 0.08% |
即便假设一颗只有 1 mm² 的裸片,V1 也只增加不到 2%,V5 约为 5%。在真实硅片上, 扩展相对 Flash、SRAM 与外设几乎可以忽略。
如何选择
| 需求 | 选择 | 原因 |
|---|---|---|
| 不改动存储接口 | V1 | 37 周期,+23% 面积,即插即用 |
| 已有原生 TCM | V2 | 比 V1 多 4% 面积,换来 29 周期 |
| 延迟优先,面积次要 | V5 | 模型 11 周期 / 实测 15 周期 |
| 深嵌套且预算有限 | V2 | 无界嵌套,确定性溢出 |
| 折中点 | V3 / V4 | 17 / 14 周期,+48% / +51% |
所有变体保持相同的软件 API 与隔离语义。选择纯粹是 PPA 决策。