内存分布*
1. 概述*
GX8002 内部集成了 SRAM,大小为208K。内存的分布主要是通过 SDK 工程的 link.ld
链接脚本文件来进行规划。
2. 运行时内存分布*
下图是运行时的内存分布图,我们将内存分为3大块:npu 内存块、mcu_stage2 内存块、audio_in_sram 内存块。
2.1 npu 内存块*
- 如果 npu run in flash,也就是模型的 cmd 跟 weights 存放在 flash 中,npu 以 xip 的方式从 flash 中获取 cmd 跟 weights,那么上图的 npu 存放的是模型的 data_content,是 npu 运行时所需要的交互空间, NPU_SRAME_SIZE 必须大于等于 sizeof(data_content)
- 如果 npu run in sram,也就是模型的 cmd 跟 weights 存放在 sram 中,那么上图的 npu 存放的是模型的 cmd + weights + data_content,是 npu 运行时所需要的交互空间, NPU_SRAME_SIZE 必须大于等于 sizeof(cmd) + sizeof(weights) + sizeof(data_content)
- NPU_SRAME_SIZE 通过 menuconfig 来进行配置,如下图:
2.2 mcu_stage2 内存块*
- 存放的是工程的 stage2 代码。
2.3 audio_in_sram 内存块*
- GX8002 休眠时,芯片内部的 audio in 模块会继续工作,所需要的内存空间就在 audio_in_sram 内存块中,一般我们是将 audio in 的 logfbank 特征数据存放在此处,这样可以保证人声 vad 唤醒前的 logfbank 特征数据也能拿到。