各位专家好:
最近在调试过程中遇到了一些问题,DSP通过SRIO从FPGA接收数据,乒乓写在共享内存上,doorbell中断后dma到DDR3中,收集齐数据后,每个核将各自分配
的数据从DDR3 dma到L2中进行运算,结果存放在MSM中,最后根据计算结果,从DDR3中对相应结果的源数据进行寻址,最后每个核计算完成后通过Hyperlink发送
(使用DMA)最终结果。发现相应计算结果多了以后,会出现SRIO丢针头,doorbell丢失现象。去掉DDR3中源数据寻址或者去掉Hyperlink传结果后srio恢复正常。
请问以上现象是否是因为DSP的总线冲突,或者其他什么原因?没有什么思路了,希望得到专家的指点,谢谢
Allen35065:
你先把各个步骤需要的时间测试一下,把时序图列出来看是否在某些部分有冲突,SRIO丢帧头是怎么看出来的?
li yanlong:
回复 Allen35065:
专家您好:
前两天有事没上网,回复晚了,望见谅。
各模块的时间已经测试过了,访问重叠的地方集中在DDR3和MSM上,最严重的冲突出现在运算的最后,1-7核随着门限调整对DDR3的访问量大大增加(CPU点
寻址)同时核0通过SRIO/HYPERLINK和DMA完成源数据和结果的传输。时间测试来看,同时访问DDR3时效率会变低,而MSM没测出此类问题。
SRIO的针头是SRIO人为加的数据针头不是底层的64bit信息。
谢谢!!!
xiao xiao6:
HI jacklee
SRIO 和 HYPERLINK 同属于高速接口,DMA同时对DDR3进行访问,可能是因为Hyperlink取数据时影响了SRIO的CRC校检,情致接收不了接下来的下一个DOORBELL,建议你分时处理两个高速接口
Allen35065:
回复 li yanlong:
你现在的SRIO用的是何种读写方式?
从你的反馈看,DDR3的带宽是个问题,毕竟DDR3的带宽和效率比MSM要低很多,以下有一些优化的方法可以根据你的系统调整试试看
1. 增大L2 cache以减少CPU读写DDR3的频率,弊端是要控制好时序invalidate或writeback;
2. DDR3是分bank的,同时对一个bank操作的话效率会降低,尽量把同一时间多核的读写分到不同的bank里去,bank的概念见DDR3控制器的手册或者google;
3. 根据Buffer读写的频度把一些关键的buffer放到片内RAM里去。
li yanlong:
回复 xiao xiao6:
你好 xiao xiao6:
目前通过加大FPGA端的SRIO FIFO深度,丢门铃问题基本解决了。不过总线冲突的问题确实存在,感谢你的回答!!!
TI中文支持网