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数据接收问题



现在用6678的SRIO从FPGA接收数据,FPGA做主!现在遇到一个问题,就是怎么判断FPGA发送过来的数据已经到达DSP指定的空间,比如我想把数据发送到6678的SL2,待数据完全到达我才能对数据进行处理,开始用的是在数据的最后发送一个标志位,DSP一直查询标志位是否到达,但是这样如果多核操作占用总线!请问有什么好的办法吗?谢谢!

  • 在DIO方式下,可以发送doorbell中断,参考帖子及例程:

    http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/p/53665/123500.aspx#123500

    http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/47664.aspx

    在message方式下可以通过配置Accumulator Queue等方式来产生中断。

  • 非常感谢您的回复,我现在是采用这个办法了。就是让FPGA方发完数据之后发送一个doorbell信号,但是遇到了一个问题。

    在DIO模式下,我让对方在数据的结尾发送一个标志位,已知发送数据的长度。当我接收到对方的doorbell中断时,我查询数据最后的这个标志位,发现该标志位并未到达。所以我猜想可能是因为当数据发送过来时需要内部DMA搬运到我指定的DSP内存空间,而doorbell则直接去触发这边的中断。

    数据搬运需要一定的时间,从而造成了doorbell先于我的数据达到,这样如果用doorbell来标志数据发送完毕,有点不合适,因为那时候数据并未完全到达相应的空间,因为数据占用总线的情况不同,所以数据到达晚于doorbell到达的时间也不一样,这个应该怎么解决啊,谢谢了!

  • 首先,要把Doorbell优先级设为比DIO包低,这样保证在SRIO链路上Doorbell比DIO包后到。

    然后,你说的DSP内部的问题理论上有可能,不过一般不容易出现,应该只有当系统总线负载很高的时候才有可能,应为Doorbell中断响应的时间大概要几百个周期,如果总线不忙的话,SRIO接收FIFO中残留的数据应该能在执行中断服务程序之前被传完。

    所以,最好是中断之后再去查询数据标志。注意,多次查询之间最好加一点延时,以免查询本身占用很多带宽。

    另外一个办法就是,FPGA每写完一组数据之后,再用NREAD去回读最后一个数据,然后再发doorbell,这样最保险,但SRIO的传输效率降低。

  • 想问一下,你说的中断之后再去查数据标志是什么意思,是指通过中断调用的函数置的标志,还是指其他的?

  • 我的意思是在Doorbell中断服务程序中去查询数据标志,或者在中断服务程序执行完后去查询数据标志。

     

  • 您好,Brighto Feng,首先非常感谢您的解答,谢谢您提供的这两种数据接收方式!另外感谢您提供的C66XX多核开发驱动程序。

    这几天又查看了一下SRIO的datasheet,发现doorbell其实可以专门可以用于DIO方式下数据发送完毕中断。在SRIO芯片手串的中断介绍那部分。不知道我理解的对不对,好像是说FPGA可以采用有response的写发送数据,等FPGA收到所有数据包的response后再发送doorbell,就可以保证数据完全发送到相应的空间。

    如果FPGA向DSP发送数据,那么DSP收到每一包都会有一个response反馈。这个反馈好像就是来自于vBUS。但是我测试了一下,发现当FPGA将数据发送完毕后,要等好多个时钟才能全部收到所有包的response,这样可能发送效率也低些。

    不知道我对芯片手册的理解对不对,手册的内容摘要部分如下:

     

  • 你的理解是对的。

    如果你每次发的数据量很大的话,可以稍微变化一下方式。比如你要发1KB数据,你可以先NWRITE (1K-256)B,再NWRITE_R 256B,最后再发DOORBELL.

  • 好的,非常感谢您的解答,谢谢!

  • 你好,Brighton Feng,

    我这里有一个 AIF2 的问题,如果你有时间请帮我看下,谢谢。

    http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/54952.aspx