目前我们在做一个数据采集卡,现在速率只有5Mbytes/s,设备的采集速率>5M,就会出现掉数据现象.目前我们采用的方案如下: 驱动:在CY自带驱动基础上改的异步块传输,目前驱动中两次读操作的时间间隔约70us(固定消耗),用程序每次读5K数据,设备开始采集数据前,应用程序先向驱动提交了16个异步读请求; 固件:SLAVE FIFO模式,8位数据宽度,配置EP6为512,双缓冲,IN端点,PC端从EP6读数据; FPGA:FPGA写FIFO速率 = 2 * 数据采集速率(如:FPGA写FIFO速率 == 10M,则数据采集速率 == 5M).
测试过程及现象: 我们将数据采集速率设置为10M(目前测试数据是在FPGA中模拟的),FPGA写FIFO速率为20M,读请求IRP从放入总线到读请求完成返回耗时1ms(驱动观测数据),这个时间跟"数据采集速率5M"是相关的,但按理讲应该跟"FPGA写FIFO速率10M"相关才对(硬件工程师确认 FPGA写FIFO速率为20M).从理论上讲这样的数据传输方案应该是可以的,但实际情况是会掉数据,这个现象我一直没想明白是怎么回事,或是我理解错误了.大家帮我分析下问题出在哪了,谢谢大家了.
问题: 1.我目前的驱动设计方案可行吗?(我是做软件的) 2.FPGA写FIFO速率 = 2 * 数据采集速率,这样的设置合理吗? 3.提高数据采集速率(要求无误码,不掉据),可以采取哪些措施(应用程序,驱动,固件,FPGA).
目前我知道加大PC端每次读请求的数据量,设置FIFO数据线为16位可以提高速率.第一种方法可行,但效果不明显,将PC端每次读请求的数据量设到最大,10M速率下有掉数据现象(不过我们的项目要求每次读请求的数据量必须为5K,对我意义不大,闷)第二种方法,正要尝试.
大家帮帮我,我的问题出在哪地方了,还在同样问题中挣扎的兄弟些也来一起讨论,一起解决问题啊.谢谢大家了 |