问题描述:
fpga通过srio,按照固定的10ms周期,将数据写入6678的sl2共享内存的固定空间后,再发送一个doorbell给core0,通知core0数据已经发送完毕;
core1-core6分别采用lsu1-lsu6,通过srio将sl2中的数据发送给其他dsp节点;
fpga写入sl2的时间点和core1-core6通过srio将sl2中的数据发送出去的时间点上有重叠,即存在同时访问sl2的问题,但各自操作的sl2地址上没有重叠;
问题现象:通过在core0上,对两次doorbell之间的时间间隔进行统计,发现时间间隔并不是严格的10ms周期,会出现较大的14ms等异常周期的出现;
现在怀疑是fpga通过srio写sl2,和core1-core6通过srio读sl2之间产生了冲突,导致了fpga不能及时的将数据写入到sl2,导致了异常的dbell周期出现;
但从流程上,一个是srio的收,一个是srio的发,srio的收发应该是全双工的,不应该有问题。
从msmc手册上,
问题:
(1)fpga通过srio写入sl2,应该是通过SMS Slave Port,但core1-core6采用srio将sl2的数据发送出去,也是采用SMS端口还是通过MSMC System Master Port口呢?接收和发送的数据流端口应该是怎样的呢?
(2)能不能调整srio接收和发送的优先级,比如提高接收的优先级,让数据可以及时写进来,保证周期的稳定性?
(3)msmc的总线带宽的竞争仲裁机制能不能调整,让写的优先?
(4)能不能指定两个数组,分别分配到msmc的不同BANK上,避免BANK的冲突,能够给出具体的示例说明
请各位专家能够给予解答。
Nancy Wang:
user1931146
msmc的总线带宽的竞争仲裁机制能不能调整,让写的优先?
试试看能不能通过SBND来调整优先级。
具体请看msmc手册2.3.3 MSMC Bandwidth Management
user1931146
能不能指定两个数组,分别分配到msmc的不同BANK上,避免BANK的冲突,能够给出具体的示例说明
试试看以下方法
#pragma DATA_SECTION(buffer,".my_sect")
修改cmd指定自定义段到不同的bank
.my_sect > SL2
memory bank地址的计算参考msmc手册2.3.2 MSMC Memory Banking
TI中文支持网