如需要使用DMA传输FPGA终端的多个I/O通道的数据至主控计算机,建议写入数据至DMA缓存前先将每个通道的数据组合至单个数组。按照上述方式组合数据称为交错。由于传输交错的数组仅需要一个DMA通道,即释放了其他DMA通道用作其他任务,因此交错多通道数据很重要。从DMA缓存读取交错数据后,抽取数组以获取每个通道的数据。

注: 如所有通道的数据均为相同的数据类型,交错可发挥最佳性能。否则,LabVIEW写入缓冲区时可能强制转换数据,这将降低精度。

在FPGA终端上交错数据

下图为获取和交错数据的FPGA VI的示意图。

上图中的VI从3个输入通道获取数据:AI0、AI1和AI2。VI使用“创建数组”函数交错通道数据至单个数组。最后FIFO方法节点将该数组写入至DMA通道。DMA通道每次从FPGA终端传输数组的一个元素至主控计算机。

根据交错,数组包含下列元素:

数组元素 数据
0 来自AI0的采样1
1 来自AI1的采样1
2 来自AI2的采样1
3 来自AI0的采样2
4 来自AI1的采样2
5 来自AI2的采样2
注: 建议设置缓冲区的元素数量为用户交错的通道数量的整数倍。该设计确保缓冲区能够为每个通道存储相同数量的数据点。在该范例中,缓冲区有6个元素,即为每个通道提供两个元素的存储空间。

在主控计算机上抽取数据

下图为在主控计算机上读取数据的VI。

注意下图中的操作:

  • 读取DMA通道时,必需指定要读取的元素数量。如要在该范例中计算该数量值,可使用每个通道的采样次数乘以通道总数。在该范例中,通道数量为3。
  • “抽取一维数组”函数已被改变大小,以包含3个输出接线端;因此,该函数将交错数组拆分为3个独立的数组。第一个数组包含AI0的测量结果,第二个数组包含AI1的测量结果,第三个数组包含来自AI2的数组。
    注: 如还有第四个通道的数据,用户可重新改变抽取一维数组函数的大小,以包含第四个输出接线端。
  • “创建数组”、“二维数组转置”和“转换为双精度浮点数”函数用于准备要在波形图表中显示的数据。用户可使用最适合应用的抽取数据的方法替换上述函数。