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.

srio 接收doorbell 64次中断后失败



大家好,

我在用Xilinx V6向C6670发送Doorbell包。

现在出现的问题是:V6向C6670发了64次Doorbell以后,C6670再也无法响应来自V6的Doorbell了,DOORBELL[n]_ICSR也观察不到对应位被set了。

代码就不贴了。

现在我怀疑的一个可能的问题是:V6的程序是没发一次Doorbell,srcID就自动加1,而C6670只能接收64种srcID的doorbell,超过了64,就不再响应了。

希望大家帮我分析一下,是不是这样的问题。V6程序不是我写的,要是确定是这个问题,我再让别人更改。

谢谢!!

  • 找到原因了,是V6发出来的Doorbell包的sourceID不是它本身,V6的deviceID为0xAA,但是发送出来的包中的sourceID为0xFF。

    导致DSP接收到Doobell包以后对外回复一个DONE包,而DONE包无法到达目的地。

    如此累计64次以后,DSP的SRIO不再接收Doorbell包什么的,并且对外发送Doorbell包也卡在LSU completion中断起不来。

    然后,改了FPGA程序,让包中的sourceID为其deviceID,0xAA。则一切正常。

    但是还是有一点不明白的是,DSP是如何知道自己发送的DONE包没有到达目的地,并且累计64次以后就失败了??

  • SRIO对外发包时(包括逻辑层响应包),物理层会缓存这个包,直到等到对方的物理层响应。在你的情况下,SRIO物理层的缓冲区被64个等待物理层响应的DONE包占满。

  • 明白了!多谢!