数据采集卡的FIFO如何确定? 点击:4311 | 回复:11



飞天

    
  • 精华:1帖
  • 求助:0帖
  • 帖子:14帖 | 13回
  • 年度积分:0
  • 历史总积分:110
  • 注册:2002年12月12日
发表于:2004-01-05 14:24:00
楼主
我如果我要实现连续采集的话,或更大需要多大的缓冲区才可以?有时候太小了可能会丢失数据,但我不知道缓冲区的大小和那些 因素有关??根据什么来确定?1k,2k?? 请大侠指点! 谢谢!!



GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2003-07-29 17:50:00
1楼
可以计算得知概数. 相关因素包含采样频率, 多工系统的 delay, 数据搬移至 buffer 的时间... 举例来说: 1K words FIFO 用 1Khz 的采样频率, 只要 1 秒钟(再多一点点)的时间即会 overflow. 而 Windows 的 delay 约为数十个 us 至数百个 ms 之间. 在此情形下, 若是每秒去搬移一次全部的 FIFO data, 可能还 OK 吧! 若改用 10Khz 的采样频率, 那就约 100ms 的时间, 1K words FIFO 就会被填满了. 而 100ms 对于 Windows 的 delay 而言太小了些, 所以 FIFO overflow 的机会也就大增了(ISR or Application 可能还没有机会搬移 data, FIFO 就 overflow 了). 这边说的 Windows delay, 指的是 Interrupt latency... 之类的东西. 也就是说, 从 Interrupt 产生, 到开始 work 为止, 其所用掉的时间并不固定, 可能很短 (数十个 us) , 也可能很长 (数百个 ms). 当然, 这边都只是概略的计算而已.

飞天

  • 精华:1帖
  • 求助:0帖
  • 帖子:14帖 | 13回
  • 年度积分:0
  • 历史总积分:110
  • 注册:2002年12月12日
发表于:2003-07-29 20:01:00
2楼
首先感谢上面这位老兄的答复。你得意思说主要和采样频率有关?我看了采集卡说明书上说,采集卡最大采样率为330k,上面算出时间缓冲区为1/330k ×1k/2 =1.55ms,这儿1k即为FIFO大小,不知道这个算出的原理是什么?有什么用出阿?

GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2003-07-29 22:17:00
3楼
您不是在问 "连续采集需要多大的 FIFO" 吗 ? 主要的思想在於 搬进 (AD to FIFO) 的速度 必须小於 搬出的速度 (FIFO to Buffer), 如此 FIFO 才不会 overflow. 以采集频率及假定的 FIFO size, 可以计算出 FIFO 被填满的时间. 以此时间可以概略判断是否可行, 若是很明显的不可行, 那就表示 FIFO 太小/不够. 多算几次不同 FIFO size 与频率的组合结果, 您就有可能可以概略的判断出您所需要的 FIFO size 为何. 1K words FIFO (1024 Samples) 用最高速 330K Samples/秒 来填的话, 只需 1024 / 330,000 秒 = 0.0031 秒 = 3.1ms 2K words FIFO (2048 Samples) 用 330Khz 来填, 也只需 6.2ms 8K words FIFO, 330Khz, 需 0.0248 秒 = 24.8ms 这些时间都很短, 在 Windows 下, 可能 Disk I/O 一下就造成 FIFO overflow 了.

国安

  • 精华:1帖
  • 求助:0帖
  • 帖子:3帖 | 242回
  • 年度积分:0
  • 历史总积分:256
  • 注册:2002年4月15日
发表于:2003-08-05 10:44:00
4楼
GaryLin的回答很专业呀。这里补充一点,就是Interrupt Latency。 我们知道Windows是分层级的, Ring0是系统驱动层,也就是说特权层,可以做许多硬件相关的工作,Ring3是应用程序层. 从硬件产生中断到应用程序收到中断,这中间的时间确实如GaryLin所说,要20us - 50ms左右,而且时间不定.不过如果只算到驱动程序收到这个中断,则延迟小于1ms. 所以大部分Windows下的高速采集都要求除了FIFO之外在系统底层预留一块大的Buffer,当FIFO半满中断上来时直接把数据导到这个Buffer,并用乒乓缓存的方式与应用程序交换数据.

GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2003-08-05 11:30:00
5楼
关於 Interrupt Latency, 下面有篇 RTX and NT 的测试比较, 很起来还蛮有意思的!不过, 它是加入 DPC (一样是在 Kernel 层, 在 interrupt 之後)比较的. 有兴趣的话可以看看. RTX real time performance under Windows NT http://www.hitex.co.uk/venturcom/rtp.html

国安

  • 精华:1帖
  • 求助:0帖
  • 帖子:3帖 | 242回
  • 年度积分:0
  • 历史总积分:256
  • 注册:2002年4月15日
发表于:2003-08-05 11:48:00
6楼
好文章. 它讲的是DPC的Lattency.我做过Interrupt Latency的测试,如果是到Ring0的话,可以接收几khz的中断不漏,如果是到应用层的话,延迟就很可观了.会到数十ms.

GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2003-08-05 12:04:00
7楼
感谢国安老师的指教, 让 Gary 又有所收获了!

ssssssss

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 12回
  • 年度积分:0
  • 历史总积分:74
  • 注册:2002年6月29日
发表于:2004-01-02 16:04:00
8楼
有一个关键的问题没有清楚: fifo说的物理内存在卡上还是计算机内存里? 在那里设置他的大小呢? DMA是不是就是把数据从卡上搬运到计算机内存里?

交流的天空

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 93回
  • 年度积分:0
  • 历史总积分:114
  • 注册:2003年3月18日
发表于:2004-01-02 18:55:00
9楼
fifo是在硬件上面定好了的, 不能通过软件上面再来改, 同时只要使用Fifo这种方式来来采集, 都是把数据从FIFO搬到计算机内存。

ssssssss

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 12回
  • 年度积分:0
  • 历史总积分:74
  • 注册:2002年6月29日
发表于:2004-01-05 14:23:00
10楼
那么在使用板卡时,开始有一个板卡的注册和设置,buffer size的设置。这里的缓冲是啥呢?

ssssssss

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 12回
  • 年度积分:0
  • 历史总积分:74
  • 注册:2002年6月29日
发表于:2004-01-05 14:24:00
11楼
那么在使用板卡时,开始有一个板卡的注册和设置,buffer size的设置。这里的缓冲是啥呢?

热门招聘
相关主题

官方公众号

智造工程师