一种基于PXI的多功能数据采集模块

时间:2022-10-16 09:00:16

一种基于PXI的多功能数据采集模块

摘要: 在FPGA设计过程中使用逻辑分析仪会占用更多的RAM块,为解决这种局限,基于PXI总线的支持多种串行通信方式的数据采集模块可以轻松将FPGA的内部状态提取出来,并作存储和显示。

Abstract: The use of logic analyzer in FPGA design will take up more RAM. To solve this limitation,the FPGA internal state can be easily extracted, stored and displayed by the module of data acquisition, which supports variety ways of serial communication based on PCI bus.

关键词: 数据采集;多功能;PXI

Key words: data acquisition;multifunction;PXI

中图分类号:TP39 文献标识码:A文章编号:1006-4311(2010)32-0202-02

0引言

随着通信系统数字化的普及,现场可编程逻辑门阵列(FPGA)应用日趋广泛。在通信系统中使用FPGA实现信号的处理时,由于对输入输出,以及中间数据的观察不够直观,设计人员很难对其工作状态进行分析,这增加了设计的周期和难度。很多大的FPGA厂商在设计环境中提供了能实时观察FPGA管脚或内部信号的逻辑分析仪的功能,例如Altera公司的Quartus II内嵌的SignalTap和Xilinx公司的ISE附带的ChipScope。这些软件可以在一定程度上使FPG上信号对设计人员透明,但前提是它会占用一定数量的内部RAM块。这样在一些大型设计中,使用逻辑分析仪软件就有很大的限制。因为越大型的设计,其设计本身就越需要RAM块,而其需要观察的信号的数量也就越多,也就增加了逻辑分析仪所需要的RAM块,导致了很多设计需要使用超过设计本身所需资源的FPGA,提高了产品成本。为了解决这种局限,作者设计了一种基于pxi总线的支持多种串行通信方式的数据采集模块。使用这种模块,加上对待测设备FPGA代码的简单修改,就可以轻松的将FPGA的内部状态提取出来,提取出来的数据可以根据需要存储成文件或直接在显示器上显示。该采集模块所支持的串行通信方式包括差分同步串口、RS422接口、和高速串行LVDS接口(最高支持400Mb/s)。

1PXI数据采模块的硬件结构

PXI数据采集模块主要功能是将几种差分同步串口、RS422接口、以及高速LVDS接口的数据通过PXI接口传输到PXI嵌入式控制器(Embedded Controller)的内存中,最终运行在嵌入式控制器上的应用程序,内存中的数据存可以储成文件或者通过图形显示。为了减少PXI数据采集模块对嵌入式控制器的内存的突发次数,提高传输效率,在PXI数据采集模块中加入一块缓存SDRAM,这样可以有效增加DMA传输的突发长度,提高系统的稳定性。

整个PXI数据采集系统的组成框图如图1所示。

如图,PXI多功能数据采集模块是 PXI系统的多个模块之一,主要器件由FPGA,SDRAM,差分驱动芯片,以及PXI接口等组成。

2FPGA的片上逻辑设计

FPGA芯片XC2V1000是板卡上的核心器件,它不但完成了对各接口数据的接收,还完成了与缓存SDRAM以及PXI总线的通信。FPG上逻辑主要分为:PXI接口逻辑,主控逻辑,SDRAM控制器逻辑,还包括差分同步数据接口、RS422接口、高速LVDS接口的接口逻辑,如图2所示。其中主控逻辑、差分同步数据接口以及RS422接口逻辑比较简单,限于篇幅,不加介绍。

2.1 PXI接口逻辑设计 PXI 为PCI extensions for Instrumentation(面向仪器系统的 PCI 扩展)的缩写,是一种坚固的基于PC的自动化测试平台。相对于传统的PCI总线,PXI具有体积小巧,机械强度高,稳定性好,支持多种触发模式等功能。由于可以把很多功能的PXI模块安装到同一PXI机箱内,所以很容易组建具有多种功能的PXI系统。PXI规范Ver.2.2中规定,PXI设备在被计算机识别时,计算机需要读取其内部的基本配置信息,并向其中的基地址寄存器写入分配好的地址,供计算机向PXI设备寻址使用。而在x86体系的计算机中,PXI总线并不提供DMA控制器,导致由计算机CPU向PXI设备发起的传输都被分解成单个双字(32bit)或至多连续四个双字的传输,效率极低。一旦PXI设备采用了这种传输方式,会导致PXI总线持续堵塞,计算机无法正常使用途经PXI总线或PCI总线的设备,比如鼠标或键盘。所以,该PXI接口不能作为一个只被计算机访问的接口,更需要有DMA操作的发起功能。

基于以上原因,此设计在FPGA中生成两个PXI设备:主设备和目标设备。主设备的作用是发起DMA传输,让采集到的数据通过PXI总线进行传输,进而完成到嵌入式控制器中的内存的数据传输;目标设备的作用是被PXI总线上的其他设备访问,从而将CPU想要进行的DMA传送的基地址信息、数据通道选择信息,长度信息传递给主设备,并且目标设备负责为CPU提供配置空间和I/O空间的访问,以及根据差分接收通道的需要,对嵌入式控制器的CPU提出中断请求。

2.2 SDRAM桥的设计 PXI总线同一时间只允许两个PXI设备占用总线进行通信,而PXI的每次数据传送都需要有一定的开销,所以减少数据的突发传送次数,有利于提高PXI数据采集模块的工作效率。而且由于鼠标和键盘等低速设备需要占用PXI总线,减少突发传送次数会让操作系统使用起来更连贯,不会停顿。SDRAM桥的加入就是为此。使用一块32MB容量的SDRAM,可以极大的增加突发长度。SDRAM桥旨在设计出一个可以完成与8个具有通用接口的设备通信的模块,此模块可以使被访问的SDRAM相对于上述8个设备是透明的。为了实现上述功能,此SDRAM桥具有3个组成部分:命令通道、数据通道和SDRAM接口。

命令通道:设备发出读写申请,在得到回复信号后,通过命令通道中的32位总线将双32位命令字传递给SDRAM Bridge。数据通道:直接负责与外部设备进行大规模的块数据传输。SDRAM接口:此接口是SDRAM与SDRAM桥之间的接口,SDRAM桥通过此接口发出各种信号直接操作SDRAM。对于8个外部设备,此通道不可见。所以将SDRAM桥划分为三个子模块设计:TASK Queue模块,FIFO(先入先出缓存)控制器模块,SDRAM接口模块。

外部设备准备与SDRAM通信时,需要向SDRAM桥投递任务。任务的内容包括准备访问的SDRAM芯片地址,读/写操作,突发长度等信息。SDRAM 桥的任务接收采用TASK Queue机制,因此访问SDRAM的申请和操作采用并行处理,TASK Queue可以将最多达8个的外部申请和命令保存在自己内部的BUFFER当中,在SDRAM 桥空闲时采用先来先执行的方式发送给SDRAM 桥进行执行。

外部设备在往SDRAM中写数据时,首先将外部数据缓冲至SDRAM 桥内部的接收FIFO中,此FIFO容量为64×32bit。

SDRAM桥的三个子模块当中,SDRAM接口模块最为复杂,需要按照SDRAM芯片MT48LC8M32手册上的要求,来编写访问时序以及进行刷新、预充电等操作。SDRAM接口模块的运行状态使用独热码(one-hot)状态机来实现。

2.3 高速LVDS接口的设计 为了高速地从设备中读取出比较长的数据,需要设计一个能与设备高速通信的串行接口。考虑到采集模块与设备之间需要有一定的距离,此设计需要通过差分传输。设备的输出接口包括数据和时钟两对差分线,为了降低时钟频率,使电磁兼容性更好,将传输方式设计为DDR方式,即时钟的上升沿和下降沿都采样数据。数据以每个字节通过8b/10b编码的一连串的10bit码流构成。使用8b/10b编码将8bit数据转换为10bit数据,可以使传输的状态(1或0)最大限度的变化,以适应交流耦合传输,并且可以通过编码向数据流中加入帧头和帧尾,供接收部分的解码器来侦测数据帧的开始和结尾。

高速LVDS接口由解码器、FIFO、请求控制逻辑、以及串行差分接收四个部分组成,如图3所示。

其中8b/10b解码器和FIFO可以由FPGA设计环境ISE中的软核生成器按照需要生成。

请求控制逻辑的作用是通过串行差分接收模块发送过来的帧头和帧尾标志,计算整个帧的长度,并在适当时刻向外部设备发送传输请求。请求控制逻辑可以由一个简单的状态机来实现。

串行差分接收是该模块的设计难点。由于涉及到高速信号的采集与处理,该模块如果使用正常的verilog HDL或VHDL等行为级语言来编写,则通过语言综合器和映射器(mapper)的处理后,我们在FPGA中得到的是杂乱无章的逻辑网络,这种现象产生的原因是综合器和映射器不能完全领会设计者的意图。逻辑网络的杂乱无章,会带来很大的逻辑延迟,会使系统达不到预期的速度。

为了满足模块的400Mbit/s的速度要求,最好的办法就是将对速度要求最高的环节用硬件原语(Hardware Primitive)设计出来,并且适当的加入时间约束(Time Constraints)和相对位置约束(Relative Position Constraints)。

由于高速LVDS接口必须时刻监测比特流,从中提取出帧头和帧尾,而每一帧的最开头的位的位置都有可能与其他帧不一样,甚至由于采用DDR方式传输,该位有可能在时钟的上升沿或下降沿出现,所以不能简单的将判断帧头和帧尾的工作交给解码器来做,而应该让串行差分接收模块来进行。串行差分接收模块将帧头和帧尾标志传递给请求控制逻辑,并将接收到的帧内的串行数据变为并行,此后的数据交给解码器来处理。

3驱动程序的设计

在x86体系计算机中,PXI总线上的设备通过北桥与计算机内存进行通信。由于在x86体系中的PXI总线中没有DMA控制器,所以由CPU作为主设备发起的DMA传输是阻塞的,也就是被分成单个的双字传输,极大的影响了传输效率,并且会严重降低系统对低速外设的响应速度。所以根据以上分析,在与内存的数据传输过程中,应该让PXI采集模块作为主设备发起传输。

驱动程序采用WinDriver生成的驱动程序框架改写而成。驱动程序的流程如图4。

在驱动程序初始化工作结束后,驱动程序使能所要采集的通道,使采集模块开始工作,并退出线程,处于等待中断的状态。当采集模块采集到一帧数据,或暂存区满的时候,会拉低INTA#脚,用中断的方式提醒CPU,CPU接收到中断请求并确认应该与采集模块进行通信了,此时会在内存中申请DMA缓冲区,并将其首地址发送给FPGA,由FPGA来发起向DMA缓冲区的传输。DMA传输后,CPU同样会接收到中断请求。

4结论

本设计的主要设计工作量在FPGA的代码编写上。包括通过FPGA搭建PXI逻辑,实现SDRAM桥逻辑,以及利用硬件原语实现高速LVDS接口。

使用FPGA搭建PXI逻辑,增加了系统的灵活性,节约了成本;SDRAM桥的实现,使板卡的缓存大幅增大,可以明显节约DMA次数,减少传输开销;高速LVDS接口的实现,使对被测设备的状态的观察更具实时性,可以应用到更多场合。

参考文献:

[1]National Instruments Corporation. PXI specification. 2002.

[2]李贵山,陈金鹏.PCI局部总线及其应用.西安电子科技大学出版社,2003.

[3]邰铭等.WINDOWS下PCI接口卡WDM驱动程序的DMA编程技术[J].微计算机信息,2003,(10).

[4]徐镝,施洪昌.PXI在测控系统中的应用[J].西南科技大学学报,2003,(1).

[5](英)渥伦斯基.Digital System Design with VHDL,Second Edition [M].工业出版社,2004.

[6] Tom Shanley.PCI系统结构(第四版)[M].北京:电子工业出版社,2007.

[7]王金明.数字系统设计与 Verilog HDL[M].北京:电子工业出版社,2008.

[8]SDR SDRAM Controller white pape,Altera Corporation.

上一篇:C语言中循环语句的应用研究 下一篇:南京地区高职院校学生就业压力应对方式研究