楊志興 王瑞霞 高長全
摘要:針對PXI測試系統(tǒng)構建中需要的高速數(shù)據(jù)采集設備,提出一種基于PXI總線的中頻數(shù)字化儀的設計方案。該設備可以實現(xiàn)400 Msps的實時采樣率和14位的采樣精度;軟件開發(fā)模式采用上位機應用程序和底層動態(tài)庫相結合的開發(fā)模式,方便不同用戶的定制。驅動程序通過WDM開發(fā),采用Block DMA實現(xiàn)數(shù)據(jù)的上傳。經(jīng)過聯(lián)合調(diào)試,本系統(tǒng)穩(wěn)定工作在Windows平臺下,實現(xiàn)了數(shù)字化儀要求的各項功能。不僅滿足當前項目的需求,還可應用于雷達、電子對抗等PXI自動測試系統(tǒng)構建中。
關鍵詞:PXI;中頻數(shù)字化儀;WDM;Block DMA;中斷
0 引言
近年來隨著科技的不斷進步,高速數(shù)據(jù)采集系統(tǒng)不斷地向高精度、高速率、小型化等方向發(fā)展。尤其在一些特定場合,比如艦船、飛機等環(huán)境下,其對測試設備的小型化提出了更高的要求[1]。而PXI由于其自身的架構及特點[2],特別適合這種對體積要求苛刻的環(huán)境中。其中PXI中頻數(shù)字化儀作為模塊化測試系統(tǒng)的重要組成部分,由于其技術難度高、開發(fā)設計難度大成為系統(tǒng)集成中的短板,相關產(chǎn)品只能通過國外采購,主要存在如下的問題:采購周期長、成本昂貴、技術不可控,維修困難,嚴重制約著PXI模塊化系統(tǒng)的自主發(fā)展。
本文基于“虛擬儀器”的設計理念并結合近期從事的PXI合成儀器項目需求,提出一種基于PXI總線的中頻數(shù)字化儀實現(xiàn)方案,即可滿足軟件無線電系統(tǒng)構建的需要,同時也可作為單獨PXI模塊進行數(shù)據(jù)采集、處理和分析。
1 硬件設計
1.1 總體方案
本文研制的中頻PXI數(shù)字化儀模塊是一個單槽3U尺寸模塊,14位垂直分辨率,最高采樣率達到400 MHzSa/s。其總體硬件框圖如圖1所示。
主要包括:信號調(diào)理部分、抗混疊濾波、DDS部分、A/D轉換部分、FPGA控制部分、PCI接口部分和電源等部分組成。其中:信號調(diào)理部分實現(xiàn)模擬信號的放大和濾波;ADC部分主要實現(xiàn)信號由模擬到數(shù)字信號的轉換;FPGA部分主要是完成數(shù)字下變頻、包絡檢波以及電路的控制等;PCI總線接口作為數(shù)字化儀與PC機的接口,實現(xiàn)數(shù)字化儀和上位機軟件的信息交互,包括命令下發(fā)和數(shù)據(jù)上傳等。
整機工作原理如下:在觸發(fā)信號到來之后,首先對輸入中頻信號進行調(diào)理,完成模擬中頻信號的程控增益控制、抗混疊濾波等,預處理后的中頻信號經(jīng)過高速ADC采樣,采樣數(shù)據(jù)送入FPGA進行數(shù)字下變頻操作變換到基帶形成IQ信號,之后根據(jù)需要進行復數(shù)FFT操作得到頻譜數(shù)據(jù)存儲到板載緩存中。此時FPGA將使本地信號( LINT#)信號有效,引發(fā)PCI9054的本地中斷,接著會觸發(fā)PCI中斷信號INTA#,向計算機發(fā)送中斷請求。主機CPU響應中斷以Block DMA方式讀取FIFO中的頻譜數(shù)據(jù),從而完成一次數(shù)據(jù)傳輸。最后在上位機軟件中進行處理和顯示。
1.2 PXI接口設計
目前主要存在2種方案實現(xiàn)PXI接口電路[3]:①采用可編程邏輯器件;②采用專用的PCI接口芯片。在本設計中考慮到數(shù)字化儀板卡的體積、成本和開發(fā)周期,采用PLX公司的專用的PCI接口芯片PCI9054來實現(xiàn)PXI接口,接口實現(xiàn)示意圖如圖2所示。
為了適應不同的局部處理器,PCI9054局部總線類型有3種:C模式,M模式,J模式。本文采用C模式( MODE[1:0]=00),即地址線和數(shù)據(jù)線分開模式[3]。本設計中發(fā)送命令時工作在PCI Target模式,而讀取數(shù)據(jù)的時候則工作在DMA模式。在DMA方式下,數(shù)據(jù)傳輸不同于普通的I/O讀寫方式,它是由PCI9054接管PXI總線,負責實現(xiàn)數(shù)據(jù)在CPU和硬件設備之間進行數(shù)據(jù)傳輸,而無需CPU的干預。本設計中只涉及數(shù)據(jù)從Local側到PCI側的傳輸,因此選擇DMAO通道并采用blockDMA的傳輸方式實現(xiàn)FIFO緩沖區(qū)的頻譜數(shù)據(jù)的讀取操作。
2 軟件設計
2.1 軟件體系結構
完成數(shù)字化儀硬件設計之后,就需要開發(fā)相應的軟件,由軟硬件協(xié)同配合才能整個數(shù)字化儀模塊的具體功能。整套中頻數(shù)字化儀軟件系統(tǒng)由上位機應用程序、動態(tài)鏈接庫和驅動程序構成,其體系結構如圖3所示。
2.2 整機工作流程
數(shù)字化儀程序的工作流程如下:首先是數(shù)字化儀硬件的初始化,完成后,由上位機軟件根據(jù)用戶選定的功能和輸入的參數(shù)形成控制命令通過驅動程序將其下發(fā)到硬件板卡。PXI板卡進行相應的參數(shù)分解形成有效的硬件動作命令實現(xiàn)數(shù)據(jù)的采集,采集一定量的中頻數(shù)據(jù)后形成硬件中斷給驅動程序,上位機響應中斷并通過DMA的方式將數(shù)據(jù)讀取到上位機軟件中,從而完成一次有效的數(shù)據(jù)采集和傳輸。之后再由上位機軟件進行相應的處理、顯示和存儲等功能。
2.3 驅動程序設計
由于本設計中的PXI中頻數(shù)字化儀不屬于Windows標準的外部設備,因此為了能夠運行在Windows平臺上,需要開發(fā)相應的驅動程序。Windows操作系統(tǒng)下,開發(fā)設備驅動程序的方法有很多種,本文采用DriverStudio工具進行WDM設備驅動程序的開發(fā)。
首先,利用DriverStudio中的DriverWorks[5]生成驅動程序框架,之后需要根據(jù)功能要求來添加相應的代碼。驅動程序的開發(fā)涉及到硬件訪問、中斷控制和DMA傳輸?shù)裙δ苣K。限于篇幅,本文重點闡述中斷和DMA的實現(xiàn)過程。
2.3.1 中斷實現(xiàn)
從上文介紹的數(shù)字化儀整機運行原理中可以看出,數(shù)字化儀的數(shù)據(jù)采集過程相對于上位機軟件的運行,是一種完全異步的過程。為了實現(xiàn)兩者的同步,需要借助于中斷來實現(xiàn)。本設計中需要處理的中斷類型有2種:①本地中斷,即當FIFO中的數(shù)據(jù)采集半滿之后,由FPGA通過LINT#信號發(fā)給PCI9054;②DMA中斷,當上位機軟件收到PCI9054的本地中斷后,開始啟動DMA讀操作。當DMA傳輸完成后由DMA中斷控制器產(chǎn)生。兩種中斷存在先后關系,只有2個中斷的協(xié)調(diào)配合才能實現(xiàn)1次中頻數(shù)據(jù)的正確傳輸任務。
由于這兩種中斷共享同一個中斷服務例程,因此需要在中斷服務例程[6]( ISR,Interrupt Service Routine)中進行中斷源識別,再進行對應處理。本設計中的中斷處理流程如圖所示。
中斷實現(xiàn)部分的關鍵代碼如下:
BOOLEAN Digitizer::Isr_lrq(void)
{
t《”enter Isr_lrq.”<
ULONG status;
status=m _IoPortRange0 .ind( INTCSR);
if《status&Ox8000)1=0)
{
m一Loclnt=l:
t《" Locallnterrup"《EOL;
m—IoPortRangeO.outd(INTCSR,Ox40100);
m—IoPortRangeO.outd(DMAMODEO,Ox20COI);
m_DpcFor_lrq. Request(NULL, NULL);
retum TRUE;
)
else if《status&Ox200000)1=0)
{
m—Loclnt=O;//DMAO
t《" DMA Interrup"《EOL;
m_ IoPortRangeO.outb(DMACSRO,Ox8);
m_DpcFor_lrq.Request(NULL, NULL);
retum TRUE;
)
else
{
t《" Interrupt didn't happen."《EOL;
retum FALSE;
)
)
2.3.2 DMA實現(xiàn)
為了開發(fā)DMA功能,結合硬件設計和軟件開發(fā)框架,開發(fā)人員需要對PCI9054芯片和Driver Studio開發(fā)框架均要熟悉,只有軟硬件配合才能完成DMA功能。PCI9054芯片中的DMA硬件支持部分在其數(shù)據(jù)手冊中詳細的介紹,這里不再敘述。下面重點從軟件開發(fā)角度進行介紹。
DriverWorks提供了3個類來實現(xiàn),分別是:KDmaAdapter, KDmaTransfer, KcommonDmaBuffer。其中,KdmaAdapter類用于建立1個DMA適配器,標明1個DMA通道的特性和提供串行化訪問的服務;KDmaTransfer類用于控制DMA的傳輸,啟動1個DMA傳輸、DMA傳輸數(shù)據(jù)緩沖區(qū)物理地址和傳輸字節(jié)數(shù)以及DMA傳輸結束后數(shù)據(jù)由公用緩沖區(qū)拷貝到應用程序數(shù)據(jù)緩沖區(qū);KcommonDmaBuffer類用于申請系統(tǒng)提供的公用緩沖區(qū)[8]。整個DMA數(shù)據(jù)傳輸?shù)牧鞒倘鐖D5所示。
首先,當應用程序檢測到硬件板卡完成1次中頻數(shù)據(jù)采集后,通過調(diào)用Win32 API函數(shù)ReadFile()函數(shù)啟動數(shù)據(jù)的讀取[9]。由系統(tǒng)的I/O管理器將這個請求封裝成一個相應的請求包(IRP),然將其傳遞給驅動程序。驅動程序首先將其進行隊列化,形成1個新的串行IRP傳遞給SeriaIRead例程[10],在該例程中,通過初始化KDmaTransfer類的實例并在OnDmaReady回調(diào)函數(shù)啟動DMA傳輸和判斷傳輸是否完成。限于篇幅,本文只給出實現(xiàn)DMA的關鍵代碼:
VOID Digitizer::StartDMA(ULONG PAddress,ULONG NBytes)
{
t《”Entering StartDMA”<
m_IoPortRangeO.outd(DMAMODEO,Ox20DCI);
m_ IoPortRangeO.outd(DMAPADRO,PAddress);
m_ IoPortRangeO.outd(DMALADRO,Ox8);
m_ IoPortRangeO.outd(DMASIZO,NBytes);
m_IoPortRangeO.outd(DMADPRO,Ox8);
m_IoPortRangeO.outb(DMACSRO,Ox3);
)
圖6是本設計中的DMA讀操作在FPGA中的時序圖。
2.4 應用程序設計
上位機應用軟件采用模塊化、分層設計的思想,將軟件按照功能劃分為控制測量模塊、數(shù)據(jù)分析模塊和用戶操作模塊,開發(fā)語言采用當下較為流行的C#。系統(tǒng)軟件頂層設計圖如圖7所示。
整個軟件從功能上可以分為控制測量模塊、數(shù)據(jù)處理顯示模塊和用戶操作模塊。其中控制測量模塊主要實現(xiàn)命令的下傳以及采集數(shù)據(jù)的上報;數(shù)據(jù)處理顯示模塊主要是對采集到的信號進行信號處理,包括加窗、FFT、軌跡運算、峰值處理、信號錄制以及處理結果的顯示等;用戶操作模塊則是提供人機交互的接口,用于將用戶的操作指令進行合規(guī)性分析,并將用戶的操作意圖正確設置到設備中。最終實現(xiàn)的上位機軟件成果如圖8所示。
3 結論
本文所研究的中頻數(shù)字化儀是一種基于PXI總線的模塊化中頻信號采集儀器,具有高采樣率、高分辨率、大數(shù)據(jù)存儲容量以及快速的數(shù)據(jù)傳輸?shù)燃夹g,技術實現(xiàn)上完全自主可控。在軟件設計上采用虛擬儀器的設計思想,按照模塊化和層次化進行開發(fā),分別完成了上位機軟件設計和底層驅動程序開發(fā)。目前,本系統(tǒng)可以穩(wěn)定工作在Windows 7平臺下,實現(xiàn)了中頻數(shù)字化儀要求的各項功能,不但滿足了當前的 PXI測i系統(tǒng)構建的需要,而且提供了一個較為通用的驅動程序包,可以應用到其他需要中頻數(shù)字化儀的PXI測試系統(tǒng)中。
參考文獻:
[1]郭文飛,基于PXI總線的直升機電氣系統(tǒng)測試平臺的研制[D].哈爾濱:啥爾濱工業(yè)大學,2016.
[2]苗忠海,基于PXI總線的數(shù)據(jù)采集系統(tǒng)設計[J].電子設計工程2018(12):67-69.
[3] PLX Technology.PC19054 DataBook.l.0 ed.PLXPress.1998:174-298.
[4]程月平.PCI總線數(shù)據(jù)采集系統(tǒng)的軟件設計[J].儀表技術2017(10):14-17.
[5]史云輝.基于PCI總線的數(shù)據(jù)采集卡接口的設計及實現(xiàn)[J]電子測試,2017(10):21-23。
[6]王海霞,基于PCI總線的四通道CAN通訊卡的設計[J]電子設計工程,2016(5):41-44.
[7]崔荃,多通道數(shù)據(jù)采集系統(tǒng)的設計與實現(xiàn)[D].成都:成都理工大學2015.
[8]楊亞軍.Windows下視頻采集卡的WDM驅動開發(fā)[D].西安:西安電子科技大學.2015.
[9]武安河,周利莉.Windows設備驅動程序開發(fā)實務[M].北京:電子工業(yè)出版社,2001.
[10]李小平,基于PXI總線結構的數(shù)據(jù)采集系統(tǒng)設計[D].哈爾濱:哈爾濱工程大學,2017.
作者簡介:
楊志興(1983-),男,河北石家莊人,碩士,工程師,研究方向為PXI模塊及自動測試系統(tǒng),E-mail:38453869@qq.com。