工程师们好,本人现在6678平台编写 模拟雷达信号处理程序,
目前的安排是 6678的0核做DMA数据搬移,通过SRIO从FPGA接收数据。然后1核做信号处理程序。
0核的程序和缓存只在LL2。
1核的部分数据在SL2。
为了区分开两个核的SL2,我在各自的CMD中故意错开了定义SL2,0核只定义前2M,1核2只定义后2M。
现在的进度是,硬件仿真,两个核各自独立加载程序和所需数据工作都可以进行。
但是一起工作,两个核一起加载.out,即0核进入main,等待SRIO中断,1核进入main,等待读写DDR。
一旦0核resume,开始向DDR搬运数据,再将1核resume,开始读取0核搬运好的数据,1核直接挂起无法继续。
而0核暂停,停止搬运,再启动1核,1核就可以完成程序。
所以,我觉得应该是多核同时读写DDR的优先级存在冲突,需要在两核的共同开放的另一片存储区添加标志位互相通信。
那么多核加载不同的.out这样的工程需要注意什么,是缓存一致性,要使能L1D和L1P吗,还是其他的问题,如IPC组件,BIOS组件等?
还有,TI能否提供类似的例程,就像0核搬运数据,1核做些简单数据计算这样的工程。
Shine:
C6678的MSMC负责处理系统中所有的master(包括8个核,以及SMS和SES接口)对MSMC SRAM和DDR3的访问请求。DDR3只有一个slave端口,如果多个master在同一个clock访问它,也由MSMC内的仲裁逻辑按优先级处理。
你可以试试配置starvation bound register,仲裁说明可以参考下面的MSMC文档。2.3.3 MSMC Bandwidth Managementhttp://www.ti.com/lit/ug/sprugw7a/sprugw7a.pdf