TI论坛
直播中

李晓龙

8年用户 195经验值
私信 关注
[问答]

请问SRIO数据接收怎么判断FPGA发送过来的数据已经到达DSP指定的空间

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

回帖(9)

杨娟

2019-1-3 11:55:03
在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等方式来产生中断。
                                                                          

举报

李晓龙

2019-1-3 12:13:44
引用: zbb9612 发表于 2019-1-3 16:34
在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

非常感谢您的回复,我现在是采用这个办法了。就是让FPGA方发完数据之后发送一个doorbell信号,但是遇到了一个问题。
在DIO模式下,我让对方在数据的结尾发送一个标志位,已知发送数据的长度。当我接收到对方的doorbell中断时,我查询数据最后的这个标志位,发现该标志位并未到达。所以我猜想可能是因为当数据发送过来时需要内部DMA搬运到我指定的DSP内存空间,而doorbell则直接去触发这边的中断。
数据搬运需要一定的时间,从而造成了doorbell先于我的数据达到,这样如果用doorbell来标志数据发送完毕,有点不合适,因为那时候数据并未完全到达相应的空间,因为数据占用总线的情况不同,所以数据到达晚于doorbell到达的时间也不一样,这个应该怎么解决啊,谢谢了!
举报

谭齐慧

2019-1-3 12:23:16
引用: hljgaoqf 发表于 2019-1-3 16:52
非常感谢您的回复,我现在是采用这个办法了。就是让FPGA方发完数据之后发送一个doorbell信号,但是遇到了一个问题。
在DIO模式下,我让对方在数据的结尾发送一个标志位,已知发送数据的长度。当我接收到对方的doorbell中断时,我查询数据最后的这个标志位,发现该标志位并未到达。所以我猜想可能是因为当数据发送过来时需要 ...

首先,要把Doorbell优先级设为比DIO包低,这样保证在SRIO链路上Doorbell比DIO包后到。
然后,你说的DSP内部的问题理论上有可能,不过一般不容易出现,应该只有当系统总线负载很高的时候才有可能,应为Doorbell中断响应的时间大概要几百个周期,如果总线不忙的话,SRIO接收FIFO中残留的数据应该能在执行中断服务程序之前被传完。
所以,最好是中断之后再去查询数据标志。注意,多次查询之间最好加一点延时,以免查询本身占用很多带宽。
另外一个办法就是,FPGA每写完一组数据之后,再用NREAD去回读最后一个数据,然后再发doorbell,这样最保险,但SRIO的传输效率降低。
举报

黄淳

2019-1-3 12:39:24
想问一下,你说的中断之后再去查数据标志是什么意思,是指通过中断调用的函数置的标志,还是指其他的?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分