This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于cache配置的问题,在L1或者L2中可以配置为cache或者SRAM,请问cache的配置与什么有关?有一些参考资料么?谢谢

关于cache配置的问题,在L1或者L2中可以配置为cache或者SRAM,请问cache的配置与什么有关?有一些参考资料么?谢谢

没有搞清楚应当如何配置cache,以及配置多大的cache,求指导!!!

  • CSL库里有设置cache的函数,如
    CACHE_setL1PSize
    CACHE_setL1DSize
    CACHE_setL2Size

    源码请参考csl_cacheAux.h文件。
  • 取决于你的代码/数据对访问延迟的容忍;
    L1/L2 cache/SRAM从内存模型的本质上来说,仍然是RAM,只是对软件是否透明和是否可直接(有效)访问,同时遵循"距离corepac越近的速度越快/延迟越小的规律(寄存器>L1>L2>L3>EMIF)":
    在无高实事性要求的系统中,一般将L2全部配置为cache来加速外部DDR/SDRAM的访问,此使用类似与PC x86处理器,L1/L2对软件透明;
    在部分算法/控制逻辑有强实事性要求的系统中,将相应的代码/数据放置于L2的部分或全部并将其配置为RAM模式;
    在严苛的性能要求的场景,将L1部分或全部配置为SRAM放至高速数据/代码.

    需要注意的是:
    L2一般默认为SRAM模式,L1一般默认为cache模式;
    L1使用SRAM模式需要先配置后使用,而且L1D和L1P仅能做对应用途的数据/代码存放.

    一个比较好的实事系统的内存使用例子是:
    L1的部分配置为SDRAM模式,将栈/ISR/中断向量表/严苛要求的少量数据/代码放至其中;
    L2保持默认的SRAM模式放置高性能算法/缓存数据;
    DDR放置外部数据,使用EDMA与L2 SRAM的缓存做背景传输/同步.

    配置的接口使用Shine提供的接口,如果是使用sys/bios,可以直接在platform里指定即可.

    更详细的资料,可以看SOC corepac手册资料及cache手册,