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.

6678总线冲突问题



各位专家好:

      最近在调试过程中遇到了一些问题,DSP通过SRIO从FPGA接收数据,乒乓写在共享内存上,doorbell中断后dma到DDR3中,收集齐数据后,每个核将各自分配

的数据从DDR3 dma到L2中进行运算,结果存放在MSM中,最后根据计算结果,从DDR3中对相应结果的源数据进行寻址,最后每个核计算完成后通过Hyperlink发送

(使用DMA)最终结果。发现相应计算结果多了以后,会出现SRIO丢针头,doorbell丢失现象。去掉DDR3中源数据寻址或者去掉Hyperlink传结果后srio恢复正常。

请问以上现象是否是因为DSP的总线冲突,或者其他什么原因?没有什么思路了,希望得到专家的指点,谢谢

  • 你先把各个步骤需要的时间测试一下,把时序图列出来看是否在某些部分有冲突,SRIO丢帧头是怎么看出来的?

  • 专家您好:

           前两天有事没上网,回复晚了,望见谅。

           各模块的时间已经测试过了,访问重叠的地方集中在DDR3和MSM上,最严重的冲突出现在运算的最后,1-7核随着门限调整对DDR3的访问量大大增加(CPU点

    寻址)同时核0通过SRIO/HYPERLINK和DMA完成源数据和结果的传输。时间测试来看,同时访问DDR3时效率会变低,而MSM没测出此类问题。

           SRIO的针头是SRIO人为加的数据针头不是底层的64bit信息。

           谢谢!!!

  • HI jacklee

            SRIO 和 HYPERLINK 同属于高速接口,DMA同时对DDR3进行访问,可能是因为Hyperlink取数据时影响了SRIO的CRC校检,情致接收不了接下来的下一个DOORBELL,建议你分时处理两个高速接口

  • 你现在的SRIO用的是何种读写方式?

    从你的反馈看,DDR3的带宽是个问题,毕竟DDR3的带宽和效率比MSM要低很多,以下有一些优化的方法可以根据你的系统调整试试看

    1. 增大L2 cache以减少CPU读写DDR3的频率,弊端是要控制好时序invalidate或writeback;

    2. DDR3是分bank的,同时对一个bank操作的话效率会降低,尽量把同一时间多核的读写分到不同的bank里去,bank的概念见DDR3控制器的手册或者google;

    3. 根据Buffer读写的频度把一些关键的buffer放到片内RAM里去。

  • 你好 xiao xiao6:

           目前通过加大FPGA端的SRIO FIFO深度,丢门铃问题基本解决了。不过总线冲突的问题确实存在,感谢你的回答!!!

  • Allen Yin您好:

           我们现在的调试已经通过增大FPGA端的SRIO FIFO解决,以前他的FIFO开的太小,对速率要求比较高,深度增加后暂时没出现丢doorbell现象。

           我们的SRIO采用NWITE方式

          1.运算的数据量比较大,将L2的一半开了堆,栈也不小,还有许多全局变量,L2的容量很小,剩下的不到100K不能随便使用(开全局大数组),容易出现溢出的现象。

         2.DDR的访问我改成了汇编操作,效率提高了不少,您说的不同bank访问还没时间调整,后续会尝试

         3.多核公用的一些buffer放在了共享内存里。但是源数据太大,只能在ddr中访问

    谢谢!!!