Edit online

TCM + SRAM + PSRAM

5 Dec 2024
Read time: 2 minute(s)

D13x 支持把部分 SRAM 挂载成 Tightly Coupled Memory (TCM)。TCM 的主要优势在于其内存区域由 CPU 独占访问,不会与其他外设发生总线竞争,这对某些需要高实时性的代码来说至关重要。TCM + SRAM + PSRAM 配置和SRAM + PSRAM 配置的区别在于是否开启 TCM 上,本节仅描述两种配置的差异。

D13x 提供了 128K 的指令 TCM (ITCM) 和 128K 的数据 TCM (DTCM),分别用于存储实时代码和实时数据。开启 TCM 功能后,SRAM_S0 空间就会对应的减少 256K,因为这部分内存会被重新分配给 ITCM 和 DTCM 使用。

内存布局和使用策略


d13x_mem_layout2

如图所示,针对 TCM Memory 资源,软件会使用以下策略来进行分配:

  • 将 TCM 划分为 ITCM RegionDTCM Region 两个区域,分别用于实时代码和数据。

  • 将每个 Region 进一步划分成以下子区域:
    • 静态分配 Static:编译链接后可确认地址。
    • 动态分配 Heap:Heap 内存池运行时确定地址。
综合上述策略,TCM 空间被软件划分成四块区域:
  • ITCM Static:ITCM 静态分配区域。
    通过在函数定义中加入 TCM_CODE_DEFINE 宏声明,可链接到此区域:
    // 函数定义:
    void TCM_CODE_DEFINE test_func(void);
  • ITCM Heap:ITCM 动态分配区域,即 heap_itcm 内存池。

    可以通过以下函数从该内存池分配内存:

    aicos_malloc(MEM_ITCM, size);
  • DTCM Static:DTCM 静态分配区域。

    通过在全局变量定义中加入 TCM_DATA_DEFINE 宏声明,可链接到此区域:

    // 全局变量定义:
    TCM_DATA_DEFINE int a = 1;
  • DTCM Heap:DTCM 动态分配区域,即 heap_dtcm 内存池。

    通过以下函数,可从该内存池分配内存:

    aicos_malloc(MEM_DTCM, size);

参数配置

通过 scons --menuconfig 命令进入 menuconfig 配置界面,配置下列 Meomry 相关参数:
Board options  --->
    Mem Options  --->
  • 使能 TCM 空间

    SRAM parameter  --->
        [*] Enable TCM (Tightly Coupled Memory)  // 开启 TCM 功能,SRAM_S0 空间相应的会减小 256k