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