FPGA|CPLD|ASIC论坛
直播中

若愚JX

8年用户 58经验值
擅长:可编程逻辑 嵌入式技术
私信 关注
[问答]

AD采集,UDP传输

       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数据,但并没有读出。可是条件成立,读使能,也有数据。它为什么不正确运行?
  • 360截图20170831154430958.jpg

回帖(14)

张三

2017-8-29 11:19:28

最佳答案

PFGA资源够的话,把FIFO深度设置为超过4000,或者生成一个比如8000byte深度的rom,将rom里面的数据读取出来用labview显示,看有没有丢数据;
或者调试一下,改用串口打印数据,看有没有丢数据;
举报

chenwei6991627

2017-8-29 15:31:59
网络也要分包的啊!!!
举报

若愚JX

2017-8-29 16:27:25
引用: chenwei6991627 发表于 2017-8-29 15:31
网络也要分包的啊!!!

我一次传输512字节,因为labview最大一次接收548字节
举报

张三

2017-8-31 08:39:53
fifo的存储深度是多少,有可能是存储数据满了导致丢数
举报

若愚JX

2017-8-31 15:10:14
引用: zhq420923 发表于 2017-8-31 08:39
fifo的存储深度是多少,有可能是存储数据满了导致丢数

fifo的深度设置4K,1K,512都试过,没影响。我是用的两个fifo交替存储,写fifo的频率降低,也没有用。理论上是不会溢出的。
举报

张三

2017-8-31 20:06:46
”如果从ROM中连续写入fifo,labview接收数据就是正确的“,这个是测试过的么,那检测一下AD采集端,采集端有没有可能丢数据。
”signal tapii 里观察数据无丢失“,是fifo读出的数据没有丢失么
确认一下fifo读取的是没有数据,还是读取的数据就是0x00
举报

若愚JX

2017-9-1 10:15:18
引用: zhq420923 发表于 2017-8-31 20:06
”如果从ROM中连续写入fifo,labview接收数据就是正确的“,这个是测试过的么,那检测一下AD采集端,采集端有没有可能丢数据。
”signal tapii 里观察数据无丢失“,是fifo读出的数据没有丢失么
确认一下fifo读取的是没有数据,还是读取的数据就是0x00 ...

后来发现,读ROM也是有问题的,和AD同样的问题。
我一直采数据,两个fifo交替存储,一个fifo存够数据后,才一次性读空,并传输。写fifo的频率很慢,如果正常运行是不会溢出的。
后来发现,程序有时并没有正常运行,条件到了,本应该读数了,但它读了一个就过了。
感觉像时序错乱了。labview里的结果就是4K个点后数据错乱。如果时序约束没约束好,会有这种错误吗?
举报

张三

2017-9-1 15:22:18
可以给写fifo设置一个深度,例如fifo1写满100个字节,就切换到fifo2,然后开始读fifo1,读满100个字节或者读空为止;
”程序有时并没有正常运行,条件到了,本应该读数了,但它读了一个就过了“,是读了一个字节就退出了么,如果是低速的话,时序一般还好,可以看下时序报告,然后检查一下读fifo这一块的逻辑
举报

若愚JX

2017-9-1 15:47:20
引用: zhq420923 发表于 2017-9-1 15:22
可以给写fifo设置一个深度,例如fifo1写满100个字节,就切换到fifo2,然后开始读fifo1,读满100个字节或者读空为止;
”程序有时并没有正常运行,条件到了,本应该读数了,但它读了一个就过了“,是读了一个字节就退出了么,如果是低速的话,时序一般还好,可以看下时序报告,然后检查一下读fifo这一块的逻辑 ...

fifo的读写就是你说的这样的;
有时是读了一个字节就退出了,
写频率是20M左右,读是62.5M。
时序报告是有问题的
举报

张三

2017-9-1 17:20:22
这个。。时钟速率不高啊,警告还这么多,时序警告好像有点严重,fifo读写这一块写的很复杂么,优化一下吧;
可以用signaltap看一下读fifo异常退出时的情况,抓几个关键信号看下
举报

若愚JX

2017-9-7 21:27:29
引用: zhq420923 发表于 2017-9-1 17:20
这个。。时钟速率不高啊,警告还这么多,时序警告好像有点严重,fifo读写这一块写的很复杂么,优化一下吧;
可以用signaltap看一下读fifo异常退出时的情况,抓几个关键信号看下

现在看signal tapii已经没有异常,fifo的写、读也换了好几种方式,理论分析都没什么问题。但是labview始终是在4K个点后异常,想不通啊。 360截图20170907212623730.jpg
举报

若愚JX

2017-9-11 14:36:33
引用: zhq420923 发表于 2017-9-11 13:32
PFGA资源够的话,把FIFO深度设置为超过4000,或者生成一个比如8000byte深度的rom,将rom里面的数据读取出来用labview显示,看有没有丢数据;
或者调试一下,改用串口打印数据,看有没有丢数据;

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

若愚JX

2017-9-11 17:35:32
引用: 若愚JX 发表于 2017-9-11 14:36
FIFO深度最大只能设置为4K

发现一个问题,读空后,signal tap ii看到fifo输出不为0,为最后一个读出的数据;若读空后,异步清零,输出为另一个数据,但仍然不为0.

补充内容 (2017-9-11 21:40):
查了下资料,好像cyclone4的fifo的异步清零,只能清标志
举报

若愚JX

2017-9-29 10:16:10
我有的点懵,好像应该是Labview的问题,此问题依然没有解决!
举报

更多回帖

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