6678、FPGA,程序基于STK例程修改。
流程:FPGA通过srio传输数据后,将传输完成标志置1。该传输完成标志位于DSP的SL2中。DSP查询该标志的状态。如果为1,则去读取数据。读取数据后,将该标志清0。
问题现象:连续发送大量数据时(每隔1ms发送一次,每次64K,发送100000次),发送到90000次左右,DSP就会死机。这个时候FPGA仍在继续发送数据
排查:基本定位是DSP将标志位清0,这个动作有影响。推测有可能是DSP在清0的同时,FPGA要将其置1,这个时候发生了冲突。
但是不理解的是:
1、FPGA置1,使用的是带响应的写NWRITE_R。FPGA端能继续发送,说明一直能收到正常响应,那这个响应应该就代表已经写入内存中了吧?
2、在例程中,在操作SL2的优先级上,srioRegs->RIO_PER_SET_CNTL中的cba_trans_pri 为100,MDMAARBX中的优先级设置默认为0。这表明CPU是高于SRIO的。既然有这个仲裁机制,应该就不会出现这个问题了吧?
3、还是说NWRITE_R的响应只是代表到达了SRIO外设,并不代表已经成功写入内存了?即便使用NWRITE_R,是否也并不能保证写冲突的问题?
谢谢!