TI中文支持网
TI专业的中文技术问题搜集分享网站

如何实现多个核映射不同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,多谢!!

han yang1:

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都帮你做了。就算你自己解决了映射问题,还涉及到数据搬移到每个核,程序下载怎么弄等等。

 

tim cui:

回复 han yang1:

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 文件)。运行时发生地址重映射,每个核映射到不同的物理地址?

han yang1:

回复 tim cui:

不是在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,可能有些不一样。

tim cui:

回复 Andy Yin1:

谢谢你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>"这个库。

谢谢!!

 

zhonghong zhang:

回复 han yang1:

han yang1 

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

赞(0)
未经允许不得转载:TI中文支持网 » 如何实现多个核映射不同DDR3物理地址为相同的逻辑地址
分享到: 更多 (0)