AD采集,UDP传输

2019-07-15 21:27发布

       AD连续采集,fifo缓存,读频率大于写频率,千兆以太网传输,labview接收显示,大致在4K个点左右数据开始无规律漏包;如果从ROM中连续写入fifo,labview接收数据就是正确的。请问有人知道到底是什么原因吗?为什么总是在4K个点后呢?PS:signal tapii 里观察数据无丢失。


补充内容 (2017-8-30 15:30):
连续不停采集的数据能利用verilog编写的UDP协议传上labview而不漏包吗?总是感觉理论可行,但实际上就有问题!

补充内容 (2017-8-31 15:15):
我使用两个fifo交替存储,存到一定数据,才开始传输,写的频率远小于读的频率。理论上是不会有溢出情况的。但后来发现,程序运行过程中,有时该读取fifo数据,但并没有读出。可是条件成立,读使能,也有数据。它为什么不正确运行?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
若愚JX
1楼-- · 2019-07-16 15:20
zhq420923 发表于 2017-8-31 20:06
”如果从ROM中连续写入fifo,labview接收数据就是正确的“,这个是测试过的么,那检测一下AD采集端,采集端有没有可能丢数据。
”signal tapii 里观察数据无丢失“,是fifo读出的数据没有丢失么
确认一下fifo读取的是没有数据,还是读取的数据就是0x00 ...

后来发现,读ROM也是有问题的,和AD同样的问题。
我一直采数据,两个fifo交替存储,一个fifo存够数据后,才一次性读空,并传输。写fifo的频率很慢,如果正常运行是不会溢出的。
后来发现,程序有时并没有正常运行,条件到了,本应该读数了,但它读了一个就过了。
感觉像时序错乱了。labview里的结果就是4K个点后数据错乱。如果时序约束没约束好,会有这种错误吗?
zhq420923
2楼-- · 2019-07-16 16:29
可以给写fifo设置一个深度,例如fifo1写满100个字节,就切换到fifo2,然后开始读fifo1,读满100个字节或者读空为止;
”程序有时并没有正常运行,条件到了,本应该读数了,但它读了一个就过了“,是读了一个字节就退出了么,如果是低速的话,时序一般还好,可以看下时序报告,然后检查一下读fifo这一块的逻辑
若愚JX
3楼-- · 2019-07-16 20:01
zhq420923 发表于 2017-9-1 15:22
可以给写fifo设置一个深度,例如fifo1写满100个字节,就切换到fifo2,然后开始读fifo1,读满100个字节或者读空为止;
”程序有时并没有正常运行,条件到了,本应该读数了,但它读了一个就过了“,是读了一个字节就退出了么,如果是低速的话,时序一般还好,可以看下时序报告,然后检查一下读fifo这一块的逻辑 ...

fifo的读写就是你说的这样的;
有时是读了一个字节就退出了,
写频率是20M左右,读是62.5M。
时序报告是有问题的
360截图20170831154430958.jpg
zhq420923
4楼-- · 2019-07-16 20:46
 精彩回答 2  元偷偷看……
若愚JX
5楼-- · 2019-07-17 02:10
zhq420923 发表于 2017-9-1 17:20
这个。。时钟速率不高啊,警告还这么多,时序警告好像有点严重,fifo读写这一块写的很复杂么,优化一下吧;
可以用signaltap看一下读fifo异常退出时的情况,抓几个关键信号看下

现在看signal tapii已经没有异常,fifo的写、读也换了好几种方式,理论分析都没什么问题。但是labview始终是在4K个点后异常,想不通啊。 360截图20170907212623730.jpg
若愚JX
6楼-- · 2019-07-17 08:04
zhq420923 发表于 2017-9-11 13:32
PFGA资源够的话,把FIFO深度设置为超过4000,或者生成一个比如8000byte深度的rom,将rom里面的数据读取出来用labview显示,看有没有丢数据;
或者调试一下,改用串口打印数据,看有没有丢数据;

FIFO深度最大只能设置为4K

一周热门 更多>