多功能可重配置I/O (RIO)设备(以前称为R系列设备)具有用户定义的板载处理功能,可完全灵活地实现系统定时和触发功能。多功能可重配置I/O设备并未使用固定的ASIC来控制设备功能,而是使用基于FPGA的系统定时控制器来配置所有模拟和数字I/O,以实现特定于应用的操作。使用多功能可重配置I/O硬件和NI LabVIEW FPGA模块,可完全灵活地实现自定义数据采集(DAQ)任务。
DAQ系统开发人员使用LabVIEW FPGA编程应用程序,可灵活实现任意类型的输入/输出操作。无需事先掌握VHDL等硬件设计工具,即可将LabVIEW代码嵌入FPGA芯片,实现真正的硬件定时速度和可靠性。
首先介绍DAQ硬件的常见组件。假设已拥有模数转换器(ADC)、数模转换器(DAC)和数字输入/输出线路,那么所有I/O操作都需要定时并采取某种控制方式才能实际运行。典型的多功能DAQ设备配备有功能丰富的ASIC,可提供大多数所需的功能。可重配置设备与市场上其他DAQ设备的区别在于,它们并未使用固定ASIC来控制设备功能,而是使用基于FPGA的系统定时控制器来配置所有模拟和数字I/O,以实现特定于应用的操作。可重配置FPGA芯片使用LabVIEW FPGA模块进行编程,在该编程环境中,LabVIEW数据流模式仍然适用,但提供了在最底层控制设备I/O的新函数集。LabVIEW FPGA I/O节点无需使用NI-DAQmx函数抽象出常见任务和功能,而是在基础层运行,对所有通道进行完全灵活的操作。下列章节中会展示具体的NI-DAQmx范例,便于了解如何使用可重配置硬件自定义各种数据采集任务。
先进数据采集中可重配置I/O的最常见用途就是自定义定时和触发。以下是使用NI-DAQmx触发的模拟输入任务的范例程序框图。
图1:使用NI-DAQmx触发模拟输入
该硬件并未使用不同的函数进行通道配置,而是使用称为FPGA I/O节点的函数来读取和写入所有模拟和数字通道,如图1所示。继续了解如何在LabVIEW FPGA中使用I/O节点实现完全相同的功能。
图2:使用R系列和LabVIEW FPGA触发模拟输入
全局通道、采样时钟、触发器或开始、停止和清除任务没有配置函数。所有这些均由简单模拟I/O读取替代,所有定时均由原生LabVIEW结构(如While循环和条件结构)控制。由于整个程序框图在FPGA硬件中执行,LabVIEW代码以硬件定时的速度和可靠性执行。深入了解该程序框图的工作原理。模拟I/O节点并未指定特定的采样率,而是使用For循环采集每个样本。FPGA I/O节点被调用时,对应的ADC实际上会对输入信号进行数字化,因此这个过程由For循环时钟控制。如需100 kHz的速率采样信号,则将该循环的指定延迟设为10 µs。循环定时器函数可确保从第二个循环迭代开始的特定时间延迟,因此,使用顺序结构来确保采样之间保持指定的时间间隔。LabVIEW FPGA中的条件结构功能强大,因为它本质上表示其所封装全部代码的硬件触发。所有函数和结构都在硬件中通过逻辑门执行,条件结构可确保采样在正确的时刻开始,精度在10 µs内。最后,由于现在在硬件层运行,抽象层较少,无需清除任务ID或释放内存。
使用基于FPGA的硬件的真正好处在于能够自定义所有定时和触发,并在硬件中实现信号处理和决策。现在,了解如何为一些自定义应用程序修改模拟输入触发。如需在两个模拟输入通道中的任何一个超过某个阈值时触发采集,该如何操作?这在LabVIEW FPGA中实现起来非常简单。
如需使用NI-DAQmx驱动程序对第二个模拟输入通道进行采样,程序框图与图1并无太大区别。但仍存在限制,因为两个通道将被迫使用相同的时钟频率引用相同的触发和采样。了解使用可重配置I/O和LabVIEW FPGA对多个通道进行采样的不同选项。
图4:使用R系列触发同步模拟输入
图4(上图)所示为基于模拟输入通道0 (AIO)的模拟触发,如何从两个不同的模拟输入通道同步进行采样。由于所有多功能可重配置I/O设备都有独立的ADC,因此可在完全相同的时刻对I/O节点中的两个通道进行采样。典型的多功能DAQ设备通过单个ADC多路复用所有通道,因此所有通道必须共享同一采样时钟和触发线路。图5(下图)所示为多功能可重配置I/O设备实际上以独立速率对不同模拟输入通道进行采样。通过将模拟输入I/O节点放置在独立的循环中,每个通道可以完全不同的速率进行采样,然后通过两个DMA通道分别传输数据。
图5:使用多功能可重配置I/O硬件触发多采样率模拟输入
最后,如需两个通道具有独立的采样率和独立的开始触发,可以将每个I/O节点放置在并行循环结构中,如图6所示。这充分利用了FPGA并行的优势,即每个任务使用自己的专用资源,并且完全独立于任何其他采集任务执行。
图6:使用多功能可重配置I/O硬件独立触发多采样率模拟输入
NI-DAQmx驱动程序内置了多种同步选项,用于及时关联输入和输出。以下是使用数字开始触发同步的模拟输入通道和模拟输出通道的程序框图,通过指定模拟输入的数字触发,并使用模拟输入开始触发信号触发模拟输出生成。
图7:使用NI-DAQmx同步模拟输入和输出
使用多功能可重配置I/O硬件实现相同的同步方案非常简单,无需任务ID和板载信号路由。以下是LabVIEW FPGA程序框图上的实现方式。
图8:使用R系列同步模拟输入和输出
再次使用条件结构在FPGA芯片上实现硬件触发,数字通道0上的上升沿会触发在真条件分支中的代码。模拟输入和输出节点在顺序结构中同时被调用,几乎没有抖动。如需它们具有独立的速率,可以轻松将模拟I/O节点放置在各自的独立While循环中。还必须指出,程序框图中显示的正弦发生器函数是一个Express VI,可用于交互式配置查找表中的正弦值。
图8所示的程序框图与图7所示的NI-DAQmx VI功能相同,但如需自定义该任务,只有可重配置I/O设备才能提供这种灵活性。例如,如需添加暂停触发,可在内部While循环中添加条件结构,并使用另一个数字I/O节点选择真或假条件分支来轻松完成。硬件编程的强大功能为I/O定时和同步提供了无限可能。
多功能同步的另一个范例是使用板载计数器生成有限脉冲,并将计数器输出用作模拟输入采样时钟。该过程是实现可重触发有限采样的常用方法。以下是此类采集所需的NI-DAQmx代码。
图9:使用NI-DAQmx可重触发有限模拟输入
现在,将其与具有相同功能的LabVIEW FPGA程序框图进行比较。
图10:使用R系列和LabVIEW FPGA可重触发有限模拟输入
在图10中,由于LabVIEW代码在硬件中执行,因此驱动程序配置步骤明显减少。通过简单的数字输入线路和For循环结构,可以创建硬件可重触发的有限采集。图9中的前一个程序框图使用两个板载计数器创建可重触发的有限脉冲序列,而典型的多功能DAQ设备通常只有4个计数器可用。然而,多功能可重配置I/O设备可使用LabVIEW FPGA将任何数字线路配置为计数器。后续章节中详细介绍了计数器/定时器的实现方式。
通过频率触发采集可进一步提升可重配置I/O设备的硬件定时灵活性。虽然典型的多功能DAQ设备无法做到这一点,但高速板载决策可用于计算输入信号的频率,然后在条件结构中选择所需的代码。对于多设备同步,多功能可重配置I/O设备也可使用PCI/PCI Express板卡的RTSI总线或PXI模块的PXI触发总线。这些外部定时和同步线路也可通过程序框图上的FPGA I/O节点访问。
多数多功能DAQ设备的模拟输出通道可实现FIFO缓冲区,用于连续模拟波形生成。生成的波形可使用FIFO作为循环缓冲区,连续重新生成一系列模拟值,无需主机进一步更新。由于数据并非总是流传输至设备,因此较少依赖于通信总线的可用性。但如需修改波形,则必须重启输出任务才能将新数据写入FIFO。另一种选择是连续将数据流传输至硬件FIFO,但这会导致输出任务延迟。多功能可重配置I/O设备可将波形输出存储在硬件中,甚至使用硬件触发改变波形,从而创建任意波形发生器。
以下是使用数字输入线路触发输出波形变化的函数发生器范例。根据数字I/O线路0和1的组合,模拟输出有4种不同的状态或条件分支。
图11a:R系列条件分支为0-零输出的函数发生器
图11b:R系列条件分支为1-正弦波的函数发生器
如两条线路均为低,则执行条件分支0,如图11a所示,输出为恒定值0 V。如DIO线路0为高,DIO线路1为低,则执行条件分支1,并在模拟输出0上生成正弦波。该正弦生成条件分支(图11b)使用正弦发生器Express VI,可在LabVIEW FPGA中使用所需的整数值交互式配置正弦波形。
图11c:R系列条件分支为2-方波的函数发生器
条件分支2(图11c)仅在While循环的每次迭代中切换一个布尔值。如果该值为低,则将整数15000写入模拟输出0,对应于16位DAC输出寄存器中的值15000。有符号16位整数值可在-32768和32767之间。输出范围为-10 V到10 V时,将-32768写入模拟输出0会生成-10 V,而将32767写入会生成10 V。在本例中,写入15000,则输出电压略低于5 V。(数学计算如下:15000/32767 × 10 V = 4.5778 V)基本上,条件分支2输出的是在0到4.578 V之间切换的方波。
图11d:R系列条件分支为3-锯齿波的函数发生器
最后一个条件分支(图11d)在DIO 0和DIO 1都为高时执行,并使用查找表连续生成锯齿波。查找表VI是另一种Express VI,可通过编程存储任意波形值并进行索引。在本范例中,已配置了在模拟输出通道0上生成的锯齿波。
通过在FPGA上存储所有值,可消除对总线可用性的依赖,并确保波形更新的硬件定时速度和可靠性。上述使用模拟输入的所有触发和同步灵活性也适用于模拟输出;使用多功能可重配置I/O设备,以完全相互独立的速率更新不同的模拟输出通道。这意味着可修改单个周期波形的频率,而不影响其他通道的输出。请注意,该功能在大多数数据采集硬件上不可用。
如前所述,典型的多功能DAQ设备通常只有4个板载计数器,而多功能可重配置I/O设备可以在任何可用的数字线路上实现计数器功能。数字I/O节点可利用LabVIEW FPGA中的一种特殊结构,称为单周期定时循环,可在2.5 MHz至200 MHz的指定速率执行代码。例如,使用40 MHz时钟,可使用单周期定时循环在任意数字线路上创建40 MHz计数器。图12(下图)是程序框图的范例。
图12:使用R系列的简单事件计数器
由于计数值发送至数据类型为U32(32位整数)的显示控件,因此该代码可在FPGA芯片上产生40 MHz、32位计数器。该代码可多次复制粘贴,从而得到多个计数器,所有计数器都可以在不同的数字线路上完全并行运行。但是,使用多功能可重配置I/O设备的真正价值在于计数器操作的自定义。用户可选择每三个上升沿递增一次计数器,甚至根据计数寄存器的值触发模拟采集。许多复杂的计数器操作,比如有限脉冲序列生成或级联事件计数,需要使用两个计数器,这通常意味着典型多功能设备上的所有板载计数器都要使用。对于高达160条数字线路的设备而言,可重配置硬件的计数器最大数量通常不受I/O可用性限制,而是取决于FPGA芯片。由于LabVIEW代码在硅芯片上运行,因此无需“启动”或“重置”通用计数器,并可以完全控制计数器操作。
图13(下图)范例为在NI-DAQmx中使用计数器生成带暂停触发的连续脉冲序列。
在LabVIEW FPGA中,暂停触发无需配置,因为一个简单条件结构在硅芯片中可实现相同的功能。以下是使用多功能可重配置I/O设备实现相同功能的示意图(图14)。
使用NI-DAQmx驱动程序的传统多功能DAQ和可重配置硬件的主要区别在于数据传输的实现方式。NI-DAQmx驱动程序可将设备到主机的所有传输抽象出来。而对于所有基于FPGA的硬件,这些传输必须完全在LabVIEW中进行编程。可通过多种方式缓冲设备板载数据,并使用不同的数据传输方法,如DMA通道和中断请求。
LabVIEW FPGA中的FIFO缓冲区可在LabVIEW项目浏览器中配置,并可使用板载内存或硬件逻辑实现。图18所示为如何在LabVIEW项目浏览器中配置一个使用板载块内存的整数FIFO缓冲区。
图20:LabVIEW FPGA中的DMA FIFO配置
图21:使用DMA FIFO和位打包的LabVIEW FPGA程序框图
所有DMA FIFO传输均为32位,因此当从16位模拟输入通道传输数据时,合并采样并一次在两个通道传输数据或采样通常更为高效。这称为位打包,如图21所示。如果数据直接传输至主机PC内存,可使用Windows环境下运行的LabVIEW主机接口函数读取数据(图22)。
图22:使用DMA FIFO读取和位拆包的主机接口代码
如图22所示,主机接口程序框图引用FPGA目标VI,然后在While循环中持续读取DMA FIFO。32位数据被拆分为两个16位通道进行采样,并在波形图上绘制出来。主机接口VI还可以读取和写入FPGA VI上的任意前面板显示控件或输入控件,在本例中,停止按钮输入控件也被写入。
尽管像NI-STC3等固定ASIC可以满足大多数数据采集需求,但只有通过R系列的基于FPGA的可重配置I/O定时和控制,才能实现完全的灵活性和自定义。使用LabVIEW FPGA,触发和同步任务变得与图形化方法绘制程序框图一样简单,可以轻松完成所需操作;使用独立的模拟和数字I/O线路,R系列板卡可利用FPGA提供的真正并行性。无论是多速率采样、自定义计数器操作,还是40 MHz板载决策,R系列设备都彻底改变了多功能数据采集的可能性。