如定时框图所示,所有16位数据均在每个时钟周期上顺次传递,而片选控制线(chip select line)则呈现低电平。 现在,我们来看看在NI LabVIEW FPGA中,如何通过智能DAQ硬件上的3条数字线进行此类编程。
图16. 16位SPI通信程序框图
图16中,外部While循环确保了所有代码均能连续执行,而写入布尔输入控件则通过条件结构启动着数据传递。 顺序结构中的第一框架将片选控制线(chip select line)设置为低电平,之后由中间框架写入数据位并将时钟线切换16次。 最终,第三顺序框将片选控制线(chip select line)设置回TRUE状态,并将数据线重置为默认的FALSE状态。 这一简单范例只是借助智能DAQ进行数字通信时的一项内容。 用户若想应用数字握手,便需为ACK(备用)和REQ(暂停)线准备2路通道,其中一路通道面向并行运作的时钟信号和数据线。
数字线会时常抖动,在使用机电接触时更是如此,然而用户可通过NI LabVIEW FPGA,选择不同方式,在数字输入线上添加去抖动滤波器。 在消除状态的错误改动时,数字去抖动滤波器确保数值的变化能够保持一段最短的时间,因而规避了因抖动引发的错误读取。 图17展现了如何通过智能DAQ实现此项功能的内容。
图17. 智能DAQ硬件上的数字滤波器程序框图
数据传输方式
配备NI-DAQmx驱动程序的传统多功能DAQ和智能DAQ之间的最大差异在于:数据传输的执行方式。 NI-DAQmx驱动程序将承担由设备至主机的各项传输任务,此项操作中NI LabVIWE FPGA会对基于FPGA的所有板载硬件进行编程。 用户可通过多种途径缓冲设备上的板载数据,并使用不同方式(如:DMA通道或中断请求)传输数据。
NI LabVIEW FPGA中的FIFO缓冲区在LabVIEW项目浏览器中接受配置,并能借助板载内存或硬件逻辑获得运行。 图18显示了如何经由项目浏览器,在板载块存储器中配置整数的FIFO缓冲区。
图18. NI LabVIEW FPGA中的FIFO配置
FIFO一经创建,便能用于NI LabVIEW FPGA程序框图上多个循环之间的数据传递。 图19中的范例显示:数据先被写入左侧循环中的FIFO,并随即从右侧循环中的FIFO被读出。
图19. 通过FIFO和多循环实现的NI LabVIEW FPGA程序框图
同样通过LabVIEW FPGA FIFO获得应用的直接存储器访问(DMA)通道,在项目浏览器中接受了类似的配置。
图20. NI LabVIEW FPGA中的DMA FIFO配置
图21. 通过DMA FIFO和位组装实现的NI LabVIEW FPGA程序框图
所有的DMA FIFO数据传输宽度均为32位;因此,当其传递源自16位模拟输入通道的数据时,往往能够合并2路通道或2个样本上的数据再进行传输,从而提高带宽使用率。 这即是图21所展现的位组装。当数据被直接传递到主控计算机的内存后,便可通过在Windows环境下运行的NI LabVIEW主接口函数接受读取(图22)。
图22. 通过DMA FIFO读取和位拆装实现的主接口代码
如图22所示,主接口程序框图引用FPGA终端VI,然后使用While循环连续读取DMA FIFO。 32位的数据被分解为2路16位通道,在波形图表上接受采样和绘制。 主接口VI还能对FPGA VI前面板上的各类显示控件和输入控件进行读写操作;在这种情况下,“停止按钮”输入控件也被写入。
结论
尽管DAQ-STC2等固定ASIC能够满足数据采集的大多数需求,然而,唯有借助智能DAQ中基于可重新配置FPGA的I/O定时和控制,方能实现高度灵活性和完全定制。 借助NI LabVIEW FPGA,触发和同步任务获得了简化,因为通过绘制图形化程序框图即可充分满足用户需求;借助独立的模拟和数字I/O线,智能DAQ可利用FPGA提供的实际并行。 R系列智能DAQ设备已经针对多速率采样、自定义计数器操作和频率高达40 MHz的板载决策,为多功能数据采集进行了各项可能的修缮。