Tricore的cache使用仿真实验--Apple的学习笔记

一,前言

理论需要结合实际,这样可以验证对理论的理解是否正确,形成闭环。关于Tricore Memory及访问速度--Apple的学习笔记已经完成了初步的理论理解,所以接着就是做实验及再进行深入的理解。

二,带着问题来看的芯片手册

问题1,Dcache如何设置使能?

答:芯片手册上没找到清晰的步骤描述,我直接example参考代码是有的。

问题2,Dcache的地址段在哪里?

答:手册上可以清晰的找到。


image.png

问题3,某个变量对应的cache地址我怎么才能知道?

答:首先我想到的是类似Linux中的MMU的TBL表作为对应规则,这是猜测的。按计算机组成原理cache和主存有3种地址映射方式(全相关,直接映射,组相关)。但是芯片手册就看到块大小为256字节。具体地址映射规则之后需要研究下。

问题4,coreID怎么有6的,5号没有的?

答:看上去确实是这样,另外CoreID及对应的base地址。这样一看就能背出来,而之前看memoryMap的表内容太多反而记不住重点。下图有利于记忆,很棒。


image.png

三,实验:拿mcal的example代码来调试cache

注释掉原有的example功能,自己添加测试代码。
在如下有bypass的宏定义可以设置值,等于先不开cache。将值写特殊功能寄存器PCON。然后main函数的while(1)循环中添加1000字节数组赋值,然后读取到另外的数组中。

    /* Enable/ Disable the caches depending on the configuration. At this point cache are invalidated */
    {
        Ifx_CPU_PCON0 pcon0;
        pcon0.U       = 0;
        pcon0.B.PCBYP = IFX_CFG_SSW_ENABLE_TRICORE0_PCACHE ? 0 : 1; /* depending on the enable bypass bit is reset/set */
        Ifx_Ssw_MTCR(CPU_PCON0, pcon0.U);
        Ifx_Ssw_ISYNC();
    }

    {
        Ifx_CPU_DCON0 dcon0;
        dcon0.U       = 0;
        dcon0.B.DCBYP = IFX_CFG_SSW_ENABLE_TRICORE0_DCACHE ? 0 : 1; /* depending on the enable bypass bit is reset/set */
        Ifx_Ssw_MTCR(CPU_DCON0, dcon0.U);
        Ifx_Ssw_ISYNC();
}

编译后数组的默认地址是core0的DSPR。
打开Dache。定义变量到cache段。编译后看到数组testval保存在了segment8就是0x90000000开始的带cache段。
0x70000000 0x700007cf 2000 g testRead dsram0 .CPU0.bss .bss Objs/Cpu0_Main.o
0x90000000 0x900007cf 2000 g testval cpu0_dlmu .mycache .mycache Objs/Cpu0_Main.o
打开DCON0设置了使能DCACHE。到DCACHE的地址段0xD0000000开始查看到值。说明cache开始使用了。实验成功。

image.png

补充说明:但是我又关闭了cache,仅设置DCON0,居然0xD0000000也有数据。这个后续研究,这个cache开关寄存器的理解估计有误。

四,小结

至少cache我可以观察到数据了,又有了进一步的认知,但是还有2个问题,就是cache的映射规则和cache的开关寄存器控制,之后要继续研究下,也可能我是sim仿真所以效果不真实。

你可能感兴趣的:(Tricore的cache使用仿真实验--Apple的学习笔记)