FPGA/ASIC技术
流处理是指以足够维持连续采集或信号生成的高速率将数据传输至仪器或从仪器输出。这就意味着任一项流处理应用的性能总是受限于数据的大小和传输速度。许多工程师利用了“流处理”技术,但是在很多应用中,数据无法以足够快的速率被生成或采集。在这些情况下,工程师们必须折衷处理,或者以足够低的采样率对要通过总线传输的数据进行采样,或者以所需的高速率进行采样但所持续时间较短(这个时间受限于仪器的板载存储器)。然而,无论哪一种的牺牲都不是我们希望的。
传统意义上,桌面仪器系统,如示波器、逻辑分析仪和任意波形发生器等,都已经实现了一定程度的数据流处理。虽然许多仪器具有非常高的采样率和带宽,但是与PC接口以返回数据给用户的总线却时常被忽略,实际上它会大大增加整体测试时间。例如,用独立示波器进行的大部分数据采集时间都是有限的,采集的持续时间由示波器中板载存储器的大小所决定(一***立任意波形发生器也面临同样的问题,除非待发生的波形是直接下载到板载存储器中)。数据采集完成之后,数据通过以太网(或者更为常用的GPIB)传输至控制PC。试考虑这样一种情形,事件触发之后以1GS/s的速率对数据进行采样。如果该设备每通道具有256MB的板上存储空间,那么约250ms后存储器就被写满了,数据采集就会停下来。如果仪器接口使用GPIB总线(其带宽约为1MB/s),那么用户必须等待约4.5分钟(250s),这些数据才可以传输至计算机供分析使用。现在,将其与具有相同采样率和板上存储空间的NI数字化仪/示波器相比较。相同的数据通过高带宽的PCI/PXI总线传输仅需要不到3秒的时间——超过80倍的性能提升。PCI Express/PXI Express总线甚至支持更快速的数据传输。
PXI Express正在改变着工程师们设计系统的方式。本文讨论了支持高速数据流处理的技术、最大化系统流处理性能的应用设计和在数据流导入磁盘与数据流导入存储器应用中可获得的数据速率基准。
流处理技术
在PCI Express技术之上构建的PXI Express,为每台仪器提供专用的带宽。PCI Express包括x1、x4、x8和x16等几种链路(读为"乘1"、"乘4"等),提供每通道250MB/s的吞吐量并具有极低的时延。对于仪器级硬件,x1与x4选项最为常见,它们分别提供了250MB/s和1GB/s(4×250MB/s)的专用吞吐量。相应地,整个系统的吞吐量随机箱内仪器数的增加而增加。下图着重阐述了各种总线的带宽与时延比较。时延描述的是数据传输中所发生的延迟,它常常在考虑系统设计时被忽略。许多人认识到,更高的带宽是希望得到的,但高时延也会对测试时间存在不利影响,所以也应当在系统设计中被考虑。
PXI平台,由于基于高带宽的PCI与PCI Express总线,因而支持仪器将数据流导入到除板上设备存储器之外的信号源或从其导出。一个PXI/PXI Express数字化仪/示波器能够以高采样率持续采集数据,因为高带宽总线支持将数据以高达1GB/s的速率实时传送至PC存储器或硬盘,这意味着数据可以在在设备存储器中被覆盖之前被读取。
数据采集或信号发生的瓶颈不再是总线,而实际上是对系统存储器(硬盘驱动器或者RAID阵列)进行读取/写入数据的操作。这就意味着工程师们可以以其所需的高采样率长时间采集数据或发生信号,而不必影响其采样率或测试时间。例如,利用一个PXIe-5122数字化仪与一个具有4TB容量的、12驱的RAID阵列,可以在两个同步采样的通道以100MS/s的最大采样率采集数据,持续时间超过2.5小时。
所有这些意味着什么?许多应用挑战因需要非常昂贵的专有系统而在先前无法解决,但由于使用商业可用的PXI Express,解决这些挑战变得可行。其中,一些应用包括信号智能中的RF/IF数据流处理、数据记录与回放、面向图像传感器与显示面板测试的数字视频发生/流处理,以及其它高数据吞吐量的应用。
数据流盘应用的最优方法
应用从单线程到多线程架构的演进被广泛认为是重大的编程挑战。LabVIEW为多核处理器提供了一个理想的编程环境,因为LabVIEW应用在本质上是多线程的。因而,LabVIEW编程人员通过几乎很少甚至无需额外的编码,便可以从多核处理器获益。多线程应用程序非常适用于并行测试和数据流盘应用,而且,在流处理应用中运用适当的编程技术,可以使PXI Express仪器发挥最大性能,这是通过代码的并行化完成的。
同样,并行机制还可以应用于创建数据流盘应用或从计算机处理器获取最大性能。在流盘应用中,两个主要占用总线和处理器的任务是:1)从数字化仪采集数据,和2)将数据写入到文件中。由于这一点是事先知道的,所以进程可以划分为多个循环。利用LabVIEW队列机构,每个循环间实现了数据共享。通常,这被称为一个生产者-消费者算法结构。
在上例中,上面的循环(生产者)从一个高速数字化仪中采集数据,并将其传递至一个队列。下面的循环(消费者)从队列中读取数据并将其写入到磁盘。在后台,LabVIEW为队列在PC中分配一个存储块。该存储器模块被用作两个循环间数据传递的临时存储FIFO。对于大多数编程语言,多个进程间的存储器共享要求不菲的编程开销。然而,LabVIEW处理了所有的存储器访问,以确保读-写竞争状况不会发生。队列结构的执行可以通过下图可视化展示:
全部0条评论
快来发表一下你的评论吧 !