PXI总线中频数字化仪系统设计
杨志兴,王瑞霞,高长全(电子测试技术重点实验室,山东 青岛 266555)
本文引用地址:https://www.eepw.com.cn/article/202004/412568.htm摘 要:针对PXI测试系统构建中需要的高速数据采集设备,提出一种基于PXI总线的中频数字化仪的设计方案。该设备可以实现400 Msps的实时采样率和14位的采样精度;软件开发模式采用上位机应用程序和底层动态库相结合的开发模式,方便不同用户的定制。驱动程序通过WDM开发,采用Block DMA实现数据的上传。经过联合调试,本系统稳定工作在Windows平台下,实现了数字化仪要求的各项功能。不仅满足当前项目的需求,还可应用于雷达、电子对抗等PXI自动测试系统构建中。
关键词:PXI;中频数字化仪;WDM; Block DMA;中断
0 引言
近年来随着科技的不断进步,高速数据采集系统不断地向高精度、高速率、小型化等方向发展。尤其在一些特定场合,比如舰船、飞机等环境下,其对测试设备的小型化提出了更高的要求 [1] 。而PXI由于其自身的架构及特点 [2] ,特别适合这种对体积要求苛刻的环境中。其中PXI中频数字化仪作为模块化测试系统的重要组成部分,由于其技术难度高、开发设计难度大成为系统集成中的短板,相关产品只能通过国外采购,主要存在如下的问题:采购周期长、成本昂贵、技术不可控,维修困难,严重制约着PXI模块化系统的自主发展。
本文基于“虚拟仪器”的设计理念并结合近期从事的PXI合成仪器项目需求,提出一种基于PXI总线的中频数字化仪实现方案,即可满足软件无线电系统构建的需要,同时也可作为单独PXI模块进行数据采集、处理和分析。
1 硬件设计
1.1 总体方案
本文研制的中频PXI数字化仪模块是一个单槽3U尺寸模块,14位垂直分辨率,最高采样率达400MHzSa/s。其总体硬件框图如图1所示。
主要包括:信号调理部分、抗混叠滤波、DDS部分、A/D转换部分、FPGA控制部分、PCI接口部分和电源等部分组成。其中:信号调理部分实现模拟信号的放大和滤波;ADC部分主要实现信号由模拟到数字信号的转换;FPGA部分主要是完成数字下变频、包络检波以及电路的控制等;PCI总线接口作为数字化仪与PC机的接口,实现数字化仪和上位机软件的信息交互,包括命令下发和数据上传等。
整机工作原理如下:在触发信号到来之后,首先对输入中频信号进行调理,完成模拟中频信号的程控增益控制、抗混叠滤波等,预处理后的中频信号经过高速ADC采样,采样数据送入FPGA进行数字下变频操作变换到基带形成IQ信号,之后根据需要进行复数FFT操作得到频谱数据存储到板载缓存中。此时FPGA将使本地信号(LINT#)信号有效,引发PCI9054的本地中断,接着会触发PCI中断信号INTA#,向计算机发送中断请求。主机CPU响应中断以Block DMA方式读取FIF0中的频谱数据,从而完成一次数据传输。最后在上位机软件中进行处理和显示。
1.2 PXI接口设计
目前主要存在2种方案实现PXI接口电路 [3] :①采用可编程逻辑器件;②采用专用的PCI接口芯片。在本设计中考虑到数字化仪板卡的体积、成本和开发周期,采用PLX公司的专用的PCI接口芯片PCI9054来实现PXI接口,接口实现示意图如图2所示。
为了适应不同的局部处理器,PCI9054局部总线类型有3种:C模式,M模式,J模式。本文采用C模式(MODE[1:0]=00),即地址线和数据线分开模式 [3] 。本设计中发送命令时工作在PCI Target模式,而读取数据的时候则工作在DMA模式。在DMA方式下,数据传输不同于普通的I/O读写方式,它是由PCI9054接管PXI总线,负责实现数据在CPU和硬件设备之间进行数据传输,而无需CPU的干预。本设计中只涉及数据从Local侧到PCI侧的传输,因此选择DMA0通道并采用block DMA的传输方式实现FIFO缓冲区的频谱数据的读取操作。
2 软件设计
2.1 软件体系结构
完成数字化仪硬件设计之后,就需要开发相应的软件,由软硬件协同配合才能整个数字化仪模块的具体功能。整套中频数字化仪软件系统由上位机应用程序、动态链接库和驱动程序构成,其体系结构如图3所示。
2.2 整机工作流程
数字化仪程序的工作流程如下:首先是数字化仪硬件的初始化,完成后,由上位机软件根据用户选定的功能和输入的参数形成控制命令通过驱动程序将其下发到硬件板卡。PXI板卡进行相应的参数分解形成有效的硬件动作命令实现数据的采集,采集一定量的中频数据后形成硬件中断给驱动程序,上位机响应中断并通过DMA的方式将数据读取到上位机软件中,从而完成一次有效的数据采集和传输。之后再由上位机软件进行相应的处理、显示和存储等功能。
2.3 驱动程序设计
由于本设计中的PXI中频数字化仪不属于Windows标准的外部设备,因此为了能够运行在Windows平台上,需要开发相应的驱动程序。Windows操作系统下,开发设备驱动程序的方法有很多种,本文采用DriverStudio工具进行WDM设备驱动程序的开发。
首先,利用DriverStudio中的DriverWorks [5] 生成驱动程序框架,之后需要根据功能要求来添加相应的代码。驱动程序的开发涉及到硬件访问、中断控制和DMA传输等功能模块。限于篇幅,本文重点阐述中断和DMA的实现过程。
2.3.1 中断实现
从上文介绍的数字化仪整机运行原理中可以看出,数字化仪的数据采集过程相对于上位机软件的运行,是一种完全异步的过程。为了实现两者的同步,需要借助于中断来实现。本设计中需要处理的中断类型有2种:①本地中断,即当FIFO中的数据采集半满之后,由FPGA通过LINT#信号发给PCI9054;②DMA中断,当上位机软件收到PCI9054的本地中断后,开始启动DMA读操作。当DMA传输完成后由DMA中断控制器产生。两种中断存在先后关系,只有2个中断的协调配合才能实现1次中频数据的正确传输任务。
由于这两种中断共享同一个中断服务例程,因此需要在中断服务例程 [6] (ISR,Interrupt Service Routine)中进行中断源识别,再进行对应处理。本设计中的中断处理流程如图所示。
中断实现部分的关键代码如下:
BOOLEAN Digitizer::Isr_Irq(void)
{
t<<”enter Isr_Irq.”<<EOL;
ULONG status;
status=m_IoPortRange0.ind(INTCSR);
if((status&0x8000)!=0)
{
m_LocInt=1;
t<<”Local Interrup”<<EOL;
m_IoPortRange0.outd(INTCSR,0x40100);
m_IoPortRange0.outd(DMAMODE0,0x20C01);
m_DpcFor_Irq.Request(NULL,NULL);
return TRUE;
}
else if((status&0x200000)!=0)
{
m_LocInt=0;//DMA0
t<<”DMA Interrup”<<EOL;
m_IoPortRange0.outb(DMACSR0,0x8);
m_DpcFor_Irq.Request(NULL,NULL);
return TRUE;
}
else
{
t<<”Interrupt didn’t happen.”<<EOL;
return FALSE;
}
}
2.3.2 DMA实现
为了开发DMA功能,结合硬件设计和软件开发框架,开发人员需要对PCI9054芯片和Driver Studio开发框架均要熟悉,只有软硬件配合才能完成DMA功能。PCI9054芯片中的DMA硬件支持部分在其数据手册中详细的介绍,这里不再叙述。下面重点从软件开发角度进行介绍。
DriverWorks提供了3个类来实现,分别是:KDmaAdapter,KDmaTransfer,KcommonDmaBuffer。其中,KdmaAdapter类用于建立1个DMA适配器,标明1个DMA通道的特性和提供串行化访问的服务;KDmaTransfer类用于控制DMA的传输,启动1个DMA传输、DMA传输数据缓冲区物理地址和传输字节数以及DMA传输结束后数据由公用缓冲区拷贝到应用程序数据缓冲区;KcommonDmaBuffer类用于申请系统提供的公用缓冲区 [8] 。整个DMA数据传输的流程如图5所示。
首先,当应用程序检测到硬件板卡完成1次中频数据采集后,通过调用Win32 API函数ReadFile()函数启动数据的读取 [9] 。由系统的I/O管理器将这个请求封装成一个相应的请求包(IRP),然将其传递给驱动程序。驱动程序首先将其进行队列化,形成1个新的串行IRP传递给SerialRead例程 [10] ,在该例程中,通过初始化KDmaTransfer类的实例并在OnDmaReady回调函数启动DMA传输和判断传输是否完成。限于篇幅,本文只给出实现DMA的关键代码:
VOID Digitizer::StartDMA(ULONG PAddress,
ULONG NBytes)
{
t<<”Entering StartDMA”<<EOL;
m_IoPortRange0.outd(DMAMODE0,0x20DC1);
m_IoPortRange0.outd(DMAPADR0,PAddress);
m_IoPortRange0.outd(DMALADR0,0x8);
m_IoPortRange0.outd(DMASIZ0,NBytes);
m_IoPortRange0.outd(DMADPR0,0x8);
m_IoPortRange0.outb(DMACSR0,0x3);
}
图6是本设计中的DMA读操作在FPGA中的时序图。
2.4 应用程序设计
上位机应用软件采用模块化、分层设计的思想,将软件按照功能划分为控制测量模块、数据分析模块和用户操作模块,开发语言采用当下较为流行的C#。系统软件顶层设计图如图7所示。
整个软件从功能上可以分为控制测量模块、数据处理显示模块和用户操作模块。其中控制测量模块主要实现命令的下传以及采集数据的上报;数据处理显示模块主要是对采集到的信号进行信号处理,包括加窗、FFT、轨迹运算、峰值处理、信号录制以及处理结果的显示等;用户操作模块则是提供人机交互的接口,用于将用户的操作指令进行合规性分析,并将用户的操作意图正确设置到设备中。最终实现的上位机软件成果如图8所示。
3 结论
本文所研究的中频数字化仪是一种基于PXI总线的模块化中频信号采集仪器,具有高采样率、高分辨率、大数据存储容量以及快速的数据传输等技术,技术实现上完全自主可控。在软件设计上采用虚拟仪器的设计思想,按照模块化和层次化进行开发,分别完成了上位机软件设计和底层驱动程序开发。目前,本系统可以稳定工作在Windows7平台下,实现了中频数字化仪要求的各项功能,不但满足了当前的PXI测试系统构建的需要,而且提供了一个较为通用的驱动程序包,可以应用到其他需要中频数字化仪的PXI测试系统中。
参考文献:
[1] 郭文飞.基于PXI总线的直升机电气系统测试平台的研制[D].哈尔滨:哈尔滨工业大学,2016.
[2] 苗忠海.基于PXI总线的数据采集系统设计[J].电子设计工程,2018(12):67-69.
[3] PLX Technology.PCI9054 DataBook.1.0ed.PLX Press,1998:174-298.
[4] 程月平.PCI总线数据采集系统的软件设计[J].仪表技术,2017(10):14-17.
[5] 史云辉.基于PCI总线的数据采集卡接口的设计及实现[J].电子测试,2017(10):21-23.
[6] 王海霞.基于PCI总线的四通道CAN通讯卡的设计[J].电子设计工程,2016(5):41-44.
[7] 崔荃.多通道数据采集系统的设计与实现[D].成都:成都理工大学,2015.
[8] 杨亚军.Windows下视频采集卡的WDM驱动开发[D].西安:西安电子科技大学,2015.
[9] 武安河,周利莉.Windows设备驱动程序开发实务[M].北京:电子工业出版社,2001.
[10] 李小平.基于PXI总线结构的数据采集系统设计[D].哈尔滨:哈尔滨工程大学,2017.
(注:本文来源于科技期刊《电子产品世界》2020年第05期第63页,欢迎您写论文时引用,并注明出处。)
评论