TI论坛
直播中

李恩琪

7年用户 473经验值
私信 关注
[问答]

请问C6748 L1P与L1D 的CACHE与SRAM地址划分是按什么原则进行?

在TMS320C674x DSP Cache User's Guide内对L2的不同配置下CACHE与SRAM地址划分有介绍,如下图:

L2分配为cache的区间是从高地址来时的。
对应的L1D和L1P内CACHE与SRAM地址划分是按什么原则进行?

回帖(5)

余少虹

2018-7-31 06:15:50
L1D, L1P也是按照高地址来划分的,在下面的文档里有说明。

L1P cache converts memory from RAM to cache by starting at the top of the L1P memory map and working downwards.
 The L1D cache converts L1D memory to cache starting at the highest L1D memory address in L1D region 1 and working downwards.
http://www.ti.com/lit/ug/sprufk5a/sprufk5a.pdf
举报

李恩琪

2018-7-31 06:32:48
引用: vuywsdfwf 发表于 2018-7-31 06:15
L1D, L1P也是按照高地址来划分的,在下面的文档里有说明。

L1P cache converts memory from RAM to cache by starting at the top of the L1P memory map and working downwards.

在对C6748程序尝试优化处理时,发现官方C6748_StarterWare_1_20_04_01 system_configc674xcache.c内函数CacheEnable实现由异常。
原型:void CacheEnable (unsigned int memCfg)
实例:CacheEnable(L1PCFG_L1PMODE_32K | L1DCFG_L1DMODE_32K | L2CFG_L2MODE_0K);
其中宏定义:
L1PCFG_L1PMODE_32K:(0x4 << (((0x1 << 0) >> 1) * 4))
L1DCFG_L1DMODE_32K:(0x4 << (((0x1 << 1) >> 1) * 4))
L2CFG_L2MODE_32K:(0x4 << (((0x1 << 2) >> 1) * 4))
可以观察到CacheEnable输入参数memCfg实际为L1P,L1D与L2三者CACHE配置参数的拼接字,具体如下:
memCfg[3:0]为L1P的CACHE配置参数;
memCfg[7:4]为L1D的CACHE配置参数;
memCfg[11:8]为L2的CACHE配置参数;
原函数实现如下图(L1D的配置处理),红色椭圆部分宏定义DSPCACHE_L1DCFG_L1DMODE为0x7,导致配置给L1DCFG寄存器的实际为memCfg中L1P部分。类似的,在L2配置中存在相同问题。

经过分析是缺少移位操作,做如下调整后可修正。
举报

李恩琪

2018-7-31 06:48:54
引用: haikitty 发表于 2018-7-31 06:32
在对C6748程序尝试优化处理时,发现官方C6748_StarterWare_1_20_04_01 system_configc674xcache.c内函数CacheEnable实现由异常。
原型:void CacheEnable (unsigned int memCfg)
实例:CacheEnable(L1PCFG_L1PMODE_32K | L1DCFG_L1DMODE_32K | L2CFG_L2MODE_0K);

L2部分也要做类似修改
举报

陈艳

2018-7-31 06:56:57
引用: haikitty 发表于 2018-7-31 06:48
L2部分也要做类似修改

StarterWare也不再更新了,这些bug真是大坑
举报

更多回帖

发帖
×
20
完善资料,
赚取积分