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.

6746的L1P memory的使用方法

Other Parts Discussed in Thread: CCSTUDIO

请教一下,想要把6746的L1P memory直接用作SRAM,不当作CACHE使用,只是用于存放固定代码,从数据手册来看好像是可以这么使用的,但是《TMS320C674x DSP Megamodule Reference Guide》中有这样的说法:

The L1P regions can only be written to using EDMA or IDMA accesses; the L1P regions cannot be written
to using CPU stores. The L1P regions can be read from using EDMA or IDMA accesses. CPU access is
limited to instruction fetch. The CPU cannot read from L1P, even if L1P is memory-mapped

感觉CPU不能直接从L1P中取指,那么实际使用时我应该怎么处理,使用时只需要在定义CMD文件的时候,指定固定代码在L1P SRAM对应的地址就可以了吗?还是需要其他使用方法?谢谢!

  • 理论上可以,但实现起来有点麻烦。

    #1.首先L1P, L1D是默认使能的,即默认是Cache,是不能按地址访问的,所以你说的在cmd文件直接里指定代码位置是行不通的。

    #2. L1P只能放程序,不能放数据,也就是上面说的不能用CPU store指令访问,这样的指令访问就是数据访问方式了,程序的访问是由CPU发起的fetch取指,而非读写指令。所以只能通过第三方来访问L1P, 比如IDMA,EDMA,它们发起的访问不是从CPU发起的,只要是它们能访问的地址,就没有限制。

    #3. 如果非要这么做,要用overlay, 先放在外面DDR,或flash,但其run address指定为L1P,系统启动后,将L1P配置为RAM,再将代码通过IDMA,EDMA之类的搬到L1P上,再调用它。

    http://processors.wiki.ti.com/index.php/Debugging_Overlays_With_CCStudio

    什么应用这么苛刻,放L2上不行吗?

  • 谢谢您的回复,由于我们的应用对时间性能要求比较严格,对执行时间的一致性也有要求,所以考虑是否能够把L1P RAM使用起来,从您的回复来看,若是想把L1P和L1D定义为SRAM使用,是有一些不方便的,但是我们目前想要评估一下所有应用程序的代码和数据都放在片内的可能性,所以就希望能够把6746的片内L1D 和L1P的32K空间都利用起来。若采用您建议的方式,来实现把L1P定义为RAM使用,确实比较困难,您建议的方式我后续会测试看看。以后有问题再咨询您。

    关于L1D RAM的使用需要请教您:

    1)从TI的数据手册来看,只说复位后L1P和L1D有可能被配置为"all RAM" 或 "maximal cache."两种方式中的任意一种,您说的默认是CACHE是什么意思?对于6746来说,默认复位后就是 "maximal cache."吗?

    2)若我使用legnecy NORBOOT的模式,在二级bootload代码的最开始直接把L1D 配置为RAM,这种应用方式是否可以在cmd文件中直接指定某些变量存储在L1D中?还是L1D RAM任何情况均不能通过cmd文件定义的方式来使用?

    3)如果想要把L1D定义为RAM使用,在系统启动后,将L1D配置为RAM后,应用程序通过地址指针的方式就可以访问L1D中的数据了,这么理解正确吗?

    谢谢!

  • xiaoan li 说:
    1)从TI的数据手册来看,只说复位后L1P和L1D有可能被配置为"all RAM" 或 "maximal cache."两种方式中的任意一种,您说的默认是CACHE是什么意思?对于6746来说,默认复位后就是 "maximal cache."吗?

    你指的那个手册?C6746复位后L1是Cache.

    xiaoan li 说:
    2)若我使用legnecy NORBOOT的模式,在二级bootload代码的最开始直接把L1D 配置为RAM,这种应用方式是否可以在cmd文件中直接指定某些变量存储在L1D中?还是L1D RAM任何情况均不能通过cmd文件定义的方式来使用?

    可以,因为你的二级boot已经把配置改了,后面的应用根据前面的状态使用当然可以。

    xiaoan li 说:
    3)如果想要把L1D定义为RAM使用,在系统启动后,将L1D配置为RAM后,应用程序通过地址指针的方式就可以访问L1D中的数据了,这么理解正确吗?

    可以。

    如果你要采用二级boot的方式,我觉得用direct NOR boot更好些,它不需要搬到片上内存而占用内存空间。