MCU的“零等待”功能——各家都是怎么实现的?

张开发
2026/4/11 8:55:32 15 分钟阅读

分享文章

MCU的“零等待”功能——各家都是怎么实现的?
一、零等待功能做嵌入式开发的应该都遇到过这个问题MCU 的主频越做越高比如 168MHz 的时钟周期才不到 6ns但是片上 Flash 的读取速度最快也就 50-60ns这就导致 CPU 每次取指都得等待 Flash插入 1-5 个等待周期CPU 利用率直接下降无法跑满标称性能。零等待就是为了解决这个矛盾让 CPU 访问 Flash 的时候无需插入等待周期直接全速运行把性能完全释放出来。二、主流技术路线梳理市面上的零等待方案主要可以分为四类下面主要总结了ST、瑞萨、NXP、TI、GD、极海、复旦微等国内外主流通用MCU厂商采用的方案如有疏漏欢迎指正缓存预取加速通过I-cache此类方案核心逻辑是通过缓存和预取机制提前将 Flash 中的指令加载到高速缓存中CPU 需要时可以直接从缓存获取无需等待 Flash而且对整个 Flash 地址空间都有效代码的存放位置没有限制用户无需做任何调整。早期的 ARM Cortex-M3/M4 内核本身没有自带缓存模块所以头部厂商会自研加速模块。比如 ST 的 ART 自适应实时加速器NXP 的 MAM 存储器加速模块本质上就是为内核补充了一套专用的缓存加速逻辑通过智能预取、分支预测配合 128 位宽的并行总线实现了全 Flash 空间的零等待加速用户只需开启功能即可无需修改代码。随着内核的升级Cortex-M7、Cortex-M33 这类新一代内核自带了 I-cache指令缓存模块厂商就无需自研了直接复用内核的标准缓存即可这也成为当前高端 MCU 的主流方案。I-cache 的工作原理很简单将最近执行过的 Flash 指令块缓存到内核的高速存储中命中时 CPU 可以直接零等待读取缓存命中率通常可以达到 90% 以上大部分场景下都能实现零等待取指比如 ST 的 STM32H5/U5 系列、极海 APM32 新系列、先楫 HPM 系列复旦微FM33FC5系列都是基于这个方案实现的。SRAM 映射这类方案是目前国产品牌应用最多的。核心是通过地址映射的方式实现 SRAM 的透明访问拆分部分片上 SRAM 作为高速执行区上电时硬件自动将 Flash 前部的关键代码拷贝到这个区域然后做地址重映射CPU 访问 Flash 开头的地址时实际访问的是这个 SRAM借此实现零等待执行。雅特力 AT32、兆易创新 GD32、极海 APM32、沁恒 CH32 主要采用的是SRAM映射的方案。但要注意零等待区和常规 SRAM 的总容量是固定的可以根据需求调整两者大小如果需要更高的性能就缩小 SRAM扩大零等待区反之亦然。不过只有 Flash 的前 N KB 区域可以实现零等待。不同品牌实现细节略有差异比如 AT32 的零等待区最大可以扩展到 512KBGD32 的零等待区大小会随主频自动调整高于 120MHz 时仅支持前 256KB CH32 的零等待区最大可以调整到 64KB。部分对实时性要求特别高的场景比如车规、工业控制厂商会用到 TCM紧耦合存储器来实现。TCM 是 ARM 内核定义的标准高速存储通过专用的独立总线与 CPU 直接连接无需经过共享系统总线因此访问是真正的单周期零等待。TCM 分为两种ITCM 专门用来存放关键指令DTCM 专门用来存放高频访问的数据相比普通的 SRAM 拆分性能和确定性都要高很多附栈空间要放在DTCM内。例如GD的H7原生高速 Flash没什么好说的堆料方案瑞萨的 RX 系列是代表直接优化了 Flash 的工艺不需要任何额外的硬件模块整个 Flash 地址空间都能实现零等待功耗也更低实现简单不过成本。混合执行方案其代表是 TI 的 AM26xTI 推出了 OptiFlash 技术核心是混合执行把片上 SRAM 作为外部 Flash 的二级缓存自动将高频调用的热点代码放到 SRAM 里普通代码从外部 Flash 执行还支持启动时的并发加载CPU 可以在拷贝代码的同时直接从 Flash 运行设计的比较巧妙。

更多文章