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.

如何实现多个核映射不同DDR3物理地址为相同的逻辑地址



目的是为了便于CCS工程的管理,想让一个CCS工程,相同的cfg配置和cmd(map)文件编译出的一个image能运行在多个DSP核,且数据、堆栈每个核私有。不想使用MAD工具,感觉满足不了一个CCS工程的条件。场景如下:

1. 4个核,运行4组不同的task,运行时用DNUM区分启动不同的task组

2. 想使用相同的配置,将私有数据映射到相同的一段ram,例如(0xa0000000 开始的64M),但实际4个核使用4段不同的物理地址。

3 代码段和共享数据直接使用实际的DDR3内存。

大概的方法是不是应该使用MPAX在程序加载到每个核之前将DDR3的一段物理地址映射为0xa0000000开始的虚拟地址,关键是数据加载前,load view变execute view之前完成映射。看了文档Multicore Shared Memory Controller,TMS320C66x DSP CorePac,还是不知道具体怎么操作,或者哪里有sample code,多谢!!

  • MAD 工具 支持prelink,就可以重映射物理地址,使得每个核访问的逻辑地址相同,实际对应不同的物理地址,不知道你为什么非要自己弄,

     

    在部署文件里面添加

      {    "name"   : "ddr-data",  

      "vaddr"   : "0xD0000000",    

    "paddr"   : [ "0x801000000", "0x802000000", "0x803000000", "0x804000000", "0x805000000", "0x806000000", "0x807000000", "0x808000000" ],   

     "size"   : "0x1000000",   

     "secNamePat"   : ["systemHeap" ],   

     "cores"   : [0,1,2,3,4,5,6,7],   

     "permissions" : ["UR", "UW", "SR", "SW"],   

     "cacheEnable" : true,    "prefetch"      : true,  

      "priority"  : 0,   

     "shared"  : false   },

    就可以了,

     

     

    我们项目就是这么弄的,我建议你研究下MAD工具的使用,会用了,多核程序部署很简单,因为MAD都帮你做了。就算你自己解决了映射问题,还涉及到数据搬移到每个核,程序下载怎么弄等等。

     

  • han yang1, 非常感谢你的建议。因为我们使用的6614有一个ARM运行linux,数据搬移到每个核,程序下载的这些问题,可以由linux完成。我主要是想一个CCS工程编译出来的.out文件可以直接运行于4个核,因为刚接触CCS/DSP开发,对很多工具比较陌生。

    按照你上面的配置

    "vaddr"   : "0xD0000000",    

    "paddr"   : [ "0x801000000", "0x802000000", "0x803000000", "0x804000000", "0x805000000", "0x806000000", "0x807000000", "0x808000000" ],   

     "size"   : "0x1000000",   

    是不是在CCS link的时候map的段为0xD0000000开始的16M 地址空间(利用cmd 文件)。运行时发生地址重映射,每个核映射到不同的物理地址?

  • 不是在link.cmd里面修改,是改MAD工具里面的配置文件deployment_template_C6678_windows.json

     在mcsdk_2_01_02_05\tools\boot_loader\mad-utils\map-tool\config-files 目录里面

    如何使用MAD工具给你一个连接,有详细说明,

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

     

    另外一个链接是开发包里面的一个多核例子

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

    我把我的这个配置文件给你参考

    我的是6678,可能有些不一样。

    deployment_template_C6678_windows.zip
  • 如果每个core的全局私有变量都是未初始化,则可以在应用使用之前对其进行MPAX配置即可,如果这些变量是需要初始化值的话,则需要在数据加载之前配置好MPAX,此时可以在boot.c中的c_int00函数的开始完成MPAX的配置。boot.c在相应的编译器目录下可以找到,如C:\ti\ccsv5\tools\compiler\c6000_7.4.2\lib\rtssrc.zip。

    参考附件在boot.c c_int00中增加相应的MPAX配置,将boot.c加入工程中编译即可。

  • 谢谢你Andy,但如果将boot.c加入工程的话,将会出现link错误,错误信息如下:

    <Linking>
    error #10056: symbol "_c_int00" redefined: first defined in
       "./platform/lib/bios/boot.obj"; redefined in
       "D:\ti\xdctools_3_23_03_53\packages\ti\targets\rts6000\lib\boot.ae66<boot.oe
       66>"
    error #10056: symbol "_stack" redefined: first defined in
       "./platform/lib/bios/boot.obj"; redefined in
       "D:\ti\xdctools_3_23_03_53\packages\ti\targets\rts6000\lib\boot.ae66<boot.oe
       66>" 

    请问如何让工程在link的时候不用"D:\ti\xdctools_3_23_03_53\packages\ti\targets\rts6000\lib\boot.ae66<boot.oe66>"这个库。

    谢谢!!

     

  • 你可以修改函数入口及stack变量名字,然后在project->build options->c6000 linker->Advanced options->symbol management,右边框框有一个specify program entry point for the output model(--entry point, -e)后面输入新的入口函数如_my_c_init00,函数入口名字默认为_c_init00

  • han yang1 

    您好,我刚刚接触DSP 多核开发,在做NAND FLASH 的自加载,现在单核的自加载可以完成,boot后可以从UART口看到输出的信息。现在需要做多核的启动,知道多核的实现有两种方法,一种就是利用hex6x工具将多个out合并并转换成bin然后烧写进去,但是单核自加载时,不需要转换工具,直接将out重命名为bin即可烧写,所以很纳闷,用转换工具是否最终可以实现,如果可以,是要做哪些改动?还有一种方法,需要用到MAD工具,我看到论坛里面有很多人的讨论,首先我需要安装哪些软件,您能给提供一个链接嘛?然后,MAD的操作步骤都有哪些呀,有没有6678开发板的demo呢?