完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
想把L2空间一部分设置成缓存,缓存大小为64kb,把DDR上最开始的16M设置成cacheable,我是这样配置的:L2CFG=0x2h;L2INV=1;MAR128=0XFFFFFFFFh;不知这样有没有问题。
我的问题是这样的: 1.不知道L2INV作用是什么,最低位设置成0和1的作用是什么?这点我没有没有看懂文档。 2.我知道要把MAR128寄存器的某个位设置成1,地址8000 0000h~80FF FFFFh区间才会成为cacheable,但不知道应该是哪一位,所以索性把MAR128=0XFFFFFFFFh。请高手指点迷津,给个文档链接。 3.缓存设成了64kb,不太清楚缓存使用了L2空间的哪一部分?是默认采用L2高位地址还是L2地位地址区间或者其他,不甚明了。 等候高手解答。thanks。 |
|
相关推荐
8 个讨论
|
|
这篇文档里有很好的解释:http://www.ti.com/litv/pdf/spru862b
#1. 就是清一下Cache. #2. 最低位。(http://www.ti.com/litv/pdf/spru871k) #3. 高地址(数字大的)是Cache, L2地址开始部分是RAM。 http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
|
|
lifei639156 发表于 2018-8-2 08:02 L2INV我还是不太明白。 文档上说L2INV的最低位: 0~代表 “normal operation”, 1~代表“All L2 cache lines are invalidated.” 我的理解是,“0”时,L2正常缓存外存的内容;“1”时,L2就不再缓存外存的数据,相当于外存的内容跳过L2直接进入L1缓存和DSP内核。 你能给分别解释下0和1代表的含义不?另外我咋使用这个寄存器?thank you。 |
|
|
|
|
|
lifei639156 发表于 2018-8-2 08:02 你好 Tony Tang,非常感谢你的回答。 但是L2INV我还是不太明白。 文档上说L2INV的最低位: 0~代表 “normal operation”, 1~代表“All L2 cache lines are invalidated.” 我的理解是,“0”时,L2正常缓存外存的内容;“1”时,L2就不再缓存外存的数据,相当于外存的内容跳过L2直接进入L1缓存和DSP内核。 你能给分别解释下0和1代表的含义不?另外我咋使用这个寄存器?thank you。 |
|
|
|
|
|
#1. 首先要理解在使用Cache时,什么时候需要做Cache与物理内存的同步。这部分如果不明白我们可以再解释。 #2. Cache 同步分为4种: Write back: 将Cache中更新的内容,写回到物理内存上,这样才可以确保第三方master读取物理内存时是更新过的数据。 Write back and invalid: 先write back,再将指定内存空间的地址在Cache中清除。 invalid: 将指定内存空间的地址在Cache中清除。 invalid All:将Cache中所有地址记录清除。(0:即不操作,1:清除所有),相信明白了#1,就知道何时采用何种同步方式。 Invalid不是Disable,所以后续的访问继续会Cache。 http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
|
|
lifei639156 发表于 2018-8-2 08:52 thank you,Tony Tang.非常感谢你详细的回答。 我还有两事不明。 1.在编写程序时,当某一个计算(比如是对一个大数组的处理)完成时,就需要一个命令把数据从缓存写回到内存,此时可以指定cache 为invalid或者不指定invalid,不知道是不是这样?(是不是也可以解释我以前程序的一个错误:以前我只在程序开头配置了一下缓存,程序中间过程没有对缓存做任何处理,也就是说中间所有的数据都没有写回,因此造成了一些 “中间结果及最终结果”的错误) 2.当数据处理步骤非常多时,好像不停的写回比较麻烦,是不是这本来就很麻烦,没有捷径? 《TMS320C64x+ DSP Cache User's Guide》这个文档我研究的还不是很仔细,还要再看看。以后希望有不会的地方再请教您。 非常感谢你的回答。 |
|
|
|
|
|
60user82 发表于 2018-8-2 09:04 #1. 要看这个数组是否被其它master访问,比如被EDMA搬到其它地方。如果只是CPU在访问这个数组,就不需要做写回操作。 #2. 同上,只有当系统中有其它master在访问同一个数组时,才需要考虑做Cache同步操作。简单来说,CPU处理数组,结果在Cache中,如果其它master访问此数组,则可能访问的结果是未处理的原始数据。 http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
|
|
lifei639156 发表于 2018-8-2 09:11 Tony Tang 你好, 看了这三个文档后, 【1】《TMS320C6424.pdf》 【2】《TMS320C64x+ DSP Megamodule Reference Guide》缓存部分 【3】《TMS320C64x+ DSP Cache User's guide》全文 依然不太会配置缓存,希望得到你的指教。问题有些多哈。 我用的是C6424芯片,c6424的L1P、L1D、L2地址映射如下(L1P、L1D、L2都分为两大部分): /*********************************************/ start end size 0x0080 0000 0x0081 FFFF 128K L2 RAM/Cache 0x00E0 8000 0x00E0 FFFF 32K L1P RAM/Cache 0x00F0 4000 0x00F0 FFFF 48K L1D RAM 0x00F1 0000 0x00F1 7FFF 32K L1D RAM/Cache 0x1080 0000 0x1081 FFFF 128K L2 RAM/Cache 0x10E0 8000 0x10E0 FFFF 32K L1P RAM/Cache 0x10F0 4000 0x10F0 FFFF 48K L1D RAM 0x10F1 0000 0x10F1 7FFF 32K L1D RAM/Cache /*******************************************/ 我的问题如下: 问题1:为什么L1P、L1D、L2分了这么多部分?是不是每一部分都可以使用?我试了下,应该没一部分都可以使用,但是如果把程序、数据放到L1P/L1D/L2上,程序总是跑飞,不知道配置时有什么主意事项? 问题2:对于c6424,设置缓存大小时,cache在高地址、RAM在低地址,如果我配置L1P cache=16KB、L1D cache为16KB、L2 cache为32KB,cache的地址应该是哪一部分(上面的地址区间太多了)?然后我就可以把剩下的memory配置到cmd文件中。 问题3:另外是先在cmd中配置RAM大小(放程序和数据,且main函数配置的cache地址和cmd中的地址不冲突),然后在main函数中利用没有使用的空间配置cache吗? 问题4:L1P cache默认大小是多少?起始地址应该是什么呢? 问题5:L1D cache不在main函数中配置,也能缓存L2和external memory 的程序,和文档【3】不符啊,不知道为什么? 问题6:这样配置不知道有没有问题?配置如下: (L1P、L1D、L2是我定义的int类型数据,因为在文档【3】27页中,有“Read back L1PCFG. This stalls the CPU until the mode change completes.”不太理解,就这样配置了) /****************************************************/ void main( void ) [ extern Int16 EVM6424_init(); EVM6424_init(); //CPU Init CACHE_L1PCFG = 0x00000003; // L1P on, L1P = CACHE_L1PCFG; CACHE_L1PINV = 1; // 1->L1P invalidated CACHE_L1DCFG = 0x00000003; // L1D on, L1D = CACHE_L1DCFG; CACHE_L1DINV = 1; // L1D invalidated CACHE_L2CFG = 0x00000004; // 0-cache disabled;1-32k;2-64kb;3-128kb;4-256kb;5~7-maxinum cache L2 = CACHE_L2CFG; CACHE_L2INV = 1; //1- all L2 cache lines are invalidated, 0-normal operation MAR_128=0xFFFFFFFF; ......(以下代码省略) /*************************************************/ 问题7:请问哪里可以找到cache配置的例程?光看文档也不是很清楚咋配置,急切需要一些例子。 问题8:由于内存分配或者stack溢出而出现的程序跑飞怎么排查?(这个问题好像有点大了) 以上问题有些多,回答起来肯定比较麻烦,还是希望您百忙之中给予解答,非常感谢! 最后,您能不能给我一个您的邮箱,有些截图我无法放当这个帖子中,希望能发邮件给你,Thank you! |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
341 浏览 1 评论
539 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
781 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
655 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1138 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
69浏览 29评论
199浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
256浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
205浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
65浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 23:20 , Processed in 0.916520 second(s), Total 57, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号