PXI總線中頻數字化儀系統設計
楊志興,王瑞霞,高長全(電子測試技術重點實驗室,山東?青島?266555)
本文引用地址:http://www.ex-cimer.com/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.
?。ㄗⅲ罕疚膩碓从诳萍计诳峨娮赢a品世界》2020年第05期第63頁,歡迎您寫論文時引用,并注明出處。)
評論