康 凱,鐘子發(fā),葉春逢,胡 磊
(電子工程學(xué)院,安徽 合肥 230037)
超短波電磁環(huán)境的復(fù)雜性和現(xiàn)場(chǎng)環(huán)境的多樣性,對(duì)超短波頻譜監(jiān)測(cè)接收機(jī)中數(shù)據(jù)采集系統(tǒng)的硬件和軟件設(shè)計(jì)提出了更高的要求:小型化與便攜,較高抗振動(dòng)沖擊的能力,兼容性和散熱性好,高可靠性和可維護(hù)性等。PC104Plus總線(xiàn)以針孔堆疊方式組成,具有結(jié)構(gòu)緊湊、抗震性好等優(yōu)點(diǎn),可以工作在惡劣的工作環(huán)境下,與PCI標(biāo)準(zhǔn)兼容,數(shù)據(jù)傳輸速率高(132Mb/s),可滿(mǎn)足大部分高速數(shù)據(jù)傳輸應(yīng)用需求。本文介紹了基于CPLD芯片和PCI總線(xiàn)控制芯片搭建的高速數(shù)據(jù)采集系統(tǒng)的硬件設(shè)計(jì)和軟件設(shè)計(jì)[1],該系統(tǒng)的數(shù)據(jù)采集部分采用模塊化設(shè)計(jì),可靈活配置具有不同采樣速率和采樣位數(shù)的采集卡。
基于PC104Plus的雙通道數(shù)據(jù)采集系統(tǒng)由PCI接口模塊和數(shù)據(jù)采集模塊組成[2],其多速率不僅體現(xiàn)在上位機(jī)程序可以方便地以軟件方式設(shè)置采樣率,同時(shí)由于采用了模塊化設(shè)計(jì),本系統(tǒng)的采集部分可靈活根據(jù)實(shí)際應(yīng)用選配,如以AD9240(10MHz、14Bits)為核心的采集模塊、以AD9244(65MHz、14Bits)為核心的采集模塊等,各模塊與PCI接口模塊以自定義接口互連。
本系統(tǒng)的主要工作原理是:首先,用戶(hù)發(fā)起采集命令,雙AD通道開(kāi)始采集數(shù)據(jù),CPLD根據(jù)上位機(jī)程序的設(shè)置來(lái)控制數(shù)據(jù)采集的長(zhǎng)度、采樣頻率等參數(shù)。采集的數(shù)據(jù)由FIFO(IDT72V293)緩沖,當(dāng)采集的數(shù)據(jù)達(dá)到用戶(hù)設(shè)置的要求時(shí)觸發(fā)PCI9054的#LINT從而產(chǎn)生一個(gè)Local中斷,告訴CPU數(shù)據(jù)已經(jīng)準(zhǔn)備好,驅(qū)動(dòng)程序處理此中斷并利用事件通知和測(cè)試程序通信,測(cè)試程序開(kāi)始以IO方式讀FIFO;或者,啟動(dòng)DMA傳輸,數(shù)據(jù)以DMA方式從FIFO傳至內(nèi)存。當(dāng)采用DMA方式轉(zhuǎn)移數(shù)據(jù)時(shí),驅(qū)動(dòng)程序需處理DMA完成中斷并利用事件通知測(cè)試程序進(jìn)而完成指定數(shù)據(jù)搬移和處理。值得注意的是,在硬件設(shè)計(jì)過(guò)程中,PCI9054的Local端時(shí)鐘與CPLD邏輯控制時(shí)鐘以及FIFO的讀時(shí)鐘三者的同步問(wèn)題需要妥善處理。本系統(tǒng)中通過(guò)零延遲高速時(shí)鐘分路器(CY2308)完成了這一工作(見(jiàn)圖2)。
CPLD芯片是FIFO和PC104Plus總線(xiàn)之間能夠正常進(jìn)行數(shù)據(jù)傳輸?shù)臉屑~。為了配合本地總線(xiàn)接口電路實(shí)現(xiàn)與PC104Plus總線(xiàn)的高速數(shù)據(jù)傳輸,一個(gè)穩(wěn)定性好、效率高的時(shí)序邏輯設(shè)計(jì)是很重要的。本系統(tǒng)基于EPM3128,采用Verilog HDL語(yǔ)言設(shè)計(jì)時(shí)序邏輯實(shí)現(xiàn)了FIFO和采集模塊的控制以及FIFO和PCI總線(xiàn)橋接器PCI9054之間的普通傳輸和高速DMA傳輸[3]。為了保證輸入在確定的狀態(tài)下有效,并保證在輸入穩(wěn)定時(shí)使用信號(hào)進(jìn)行邏輯判斷,從而避免綜合器在編譯形成電路后狀態(tài)機(jī)在實(shí)際運(yùn)行過(guò)程中產(chǎn)生誤動(dòng)作。本設(shè)計(jì)給主要的輸入信號(hào)加上了門(mén)控使能(該門(mén)控信號(hào)由狀態(tài)向量譯碼得到),這樣便只有在使能信號(hào)有效時(shí)才會(huì)有可用輸入,而不會(huì)出現(xiàn)不確定情況。本文基于開(kāi)發(fā)環(huán)境Quartus II 4.2設(shè)計(jì)的時(shí)序邏輯主要包括Local端狀態(tài)機(jī)與FIFO和采集模塊的控制[4](見(jiàn)圖3)。
圖1 系統(tǒng)硬結(jié)結(jié)構(gòu)
圖2 同相時(shí)鐘分發(fā)電路
圖3 PCI9054的本地端邏輯狀態(tài)轉(zhuǎn)換圖
圖3 所示的狀態(tài)機(jī)經(jīng)實(shí)際檢驗(yàn),可以滿(mǎn)足PCI9054從模式單周期讀寫(xiě)、從模式突發(fā)讀、從模式DMA讀三種時(shí)序要求(見(jiàn)圖4、圖5、圖6),運(yùn)行穩(wěn)定[5]。其中,單周期讀寫(xiě)適合少量數(shù)據(jù)傳輸,通過(guò)PCI接口發(fā)命令讀寫(xiě)CPLD內(nèi)的數(shù)據(jù)采集傳輸控制寄存器是通過(guò)從模式下單周期讀寫(xiě)實(shí)現(xiàn)的;從模式突發(fā)讀和從模式DMA讀適合大量數(shù)據(jù)傳輸,將FIFO內(nèi)數(shù)據(jù)搬移至主機(jī)內(nèi)存是通過(guò)從模式下突發(fā)讀和DMA讀實(shí)現(xiàn)的。
另外,配合CPLD內(nèi)的時(shí)序邏輯,PCI9054的配置芯片(93LC56)內(nèi)必須進(jìn)行合理的設(shè)置才能完整地實(shí)現(xiàn)系統(tǒng)功能,同時(shí)這也是驅(qū)動(dòng)程序設(shè)計(jì)和應(yīng)用程序設(shè)計(jì)的重要參考。本文利用PLX公司提供的專(zhuān)用在線(xiàn)燒寫(xiě)軟件PLXMon完成了這一工作。其中所包含的空間映射信息見(jiàn)表1。
圖4 從模式單周期讀時(shí)序仿真圖
圖5 從模式單周期寫(xiě)時(shí)序仿真圖
圖6 從模式DMA讀時(shí)序及FIFO控制邏輯仿真圖
表1 PCI9054的本地端空間映射
PC104Plus數(shù)據(jù)采集處理系統(tǒng)的一個(gè)關(guān)鍵問(wèn)題是設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)。設(shè)備驅(qū)動(dòng)程序提供連接到PC104Plus板卡的軟件接口文件擴(kuò)展名為.SYS的動(dòng)態(tài)鏈接庫(kù)。Win2000是32位的多任務(wù)非實(shí)時(shí)操作系統(tǒng),對(duì)整個(gè)系統(tǒng)底層的操作和用戶(hù)與硬件打交道的權(quán)力被屏蔽,必須通過(guò)操作系統(tǒng)統(tǒng)一管理設(shè)備驅(qū)動(dòng)程序和其他內(nèi)核訪問(wèn)來(lái)實(shí)現(xiàn)應(yīng)用軟件對(duì)硬件的訪問(wèn)[6]。 在Win2000中,設(shè)備驅(qū)動(dòng)程序必須根據(jù)Windows驅(qū)動(dòng)程序模型(WDM)設(shè)計(jì),它不是單獨(dú)存在的,而是相關(guān)操作系統(tǒng)的一部分。因此定制與實(shí)際硬件相匹配的設(shè)備驅(qū)動(dòng)程序是本系統(tǒng)能夠正常工作的前提。選用Numega公司的DriverWorks來(lái)開(kāi)發(fā)運(yùn)行在Win2000下的WDM模式PCI設(shè)備驅(qū)動(dòng)程序。該開(kāi)發(fā)環(huán)境將WDM驅(qū)動(dòng)程序編寫(xiě)所需的對(duì)內(nèi)核及對(duì)硬件的訪問(wèn)封裝成類(lèi),結(jié)合DriverWizard極大地簡(jiǎn)化了驅(qū)動(dòng)程序開(kāi)發(fā)的難度。本設(shè)計(jì)中主要涉及3個(gè)方面的問(wèn)題:中斷處理、普通讀寫(xiě)和DMA傳輸[7]。
⑴中斷處理。中斷處理需要聲明并在PnP啟動(dòng)例程中初始化KInterrupt和KDeferredCall類(lèi)實(shí)例,還需要聲明中斷服務(wù)例程和延遲過(guò)程調(diào)用例程。當(dāng)創(chuàng)建驅(qū)動(dòng)程序框架時(shí),若有中斷資源,這些都是自動(dòng)生成的。需要更改的地方是:在中斷服務(wù)例程中判斷是否是自己的設(shè)備產(chǎn)生的中斷并設(shè)置相應(yīng)的中斷標(biāo)志,在延遲過(guò)程調(diào)用例程中根據(jù)中斷標(biāo)志觸發(fā)不同的事件,實(shí)現(xiàn)與應(yīng)用程序的通信。
⑵普通讀寫(xiě)。普通讀寫(xiě)過(guò)程的關(guān)鍵是驅(qū)動(dòng)程序如何獲得應(yīng)用程序的緩沖區(qū)。Win2000為驅(qū)動(dòng)程序訪問(wèn)用戶(hù)模式數(shù)據(jù)緩沖區(qū)提供了三種方法:Buffered方式、Direct方式和Neither方式。在此次開(kāi)發(fā)中,我們使用的是Direct方式,I/O管理器把用戶(hù)輸入緩沖區(qū)數(shù)據(jù)復(fù)制到一個(gè)系統(tǒng)緩沖區(qū),驅(qū)動(dòng)程序可以用KIrp::IoctlBUffer訪問(wèn)這個(gè)緩沖區(qū)。輸出緩沖區(qū)被類(lèi)KMemory對(duì)象映射,驅(qū)動(dòng)程序可以用KIrp::Mdl訪問(wèn)這個(gè)緩沖區(qū)。設(shè)計(jì)過(guò)程中要注意硬件對(duì)應(yīng)的存儲(chǔ)空間映射情況,處理好PCI配置空間大小和偏移量的問(wèn)題。
⑶DMA傳輸。本文開(kāi)發(fā)使用的是BlockDMA方式,本地端中斷導(dǎo)致應(yīng)用程序調(diào)用驅(qū)動(dòng)程序開(kāi)始DMA傳輸,應(yīng)用程序無(wú)限等待事件的觸發(fā),在驅(qū)動(dòng)程序中讀完數(shù)據(jù)后觸發(fā)事件。事件觸發(fā)后,應(yīng)用程序開(kāi)始從驅(qū)動(dòng)程序中讀取DMA傳輸?shù)慕Y(jié)果。驅(qū)動(dòng)設(shè)計(jì)的關(guān)鍵有:DMA適配器、內(nèi)存空間等資源的添加和申請(qǐng),DMA寄存器的設(shè)置和DMA啟動(dòng)。
本采集系統(tǒng)的驅(qū)動(dòng)程序在PC104平臺(tái)上的安裝結(jié)果如圖7所示。
圖7 采集系統(tǒng)的設(shè)備驅(qū)動(dòng)程序安裝結(jié)果
為評(píng)估本平臺(tái)性能,本文構(gòu)建了基于對(duì)話(huà)框的測(cè)試主程序,該程序運(yùn)用多線(xiàn)程技術(shù),用戶(hù)界面線(xiàn)程通過(guò)消息泵機(jī)制處理用戶(hù)輸入及Windows的消息和事件,工作者線(xiàn)程用于完成采集數(shù)據(jù)的搬移和運(yùn)算,其主流程見(jiàn)圖8。由于該測(cè)試平臺(tái)是一個(gè)基于PC的非實(shí)時(shí)的同步系統(tǒng),不像可編程邏輯器件適合于對(duì)序列有嚴(yán)格定時(shí)的采樣數(shù)據(jù)實(shí)時(shí)處理,只能通過(guò)中斷來(lái)保持一定的同步。當(dāng)采樣率很高時(shí),要對(duì)采樣序列做逐樣點(diǎn)運(yùn)算,并保持嚴(yán)格同步是很困難的。因而,我們只能在中斷的基本同步下進(jìn)行高效率的數(shù)據(jù)成塊處理,從而保證較好的信號(hào)統(tǒng)計(jì)特性。這就要求測(cè)試程序、驅(qū)動(dòng)、可編程邏輯之間必須有一個(gè)好的時(shí)序匹配,主要是控制好中斷的開(kāi)關(guān)與采樣數(shù)據(jù)讀寫(xiě)的關(guān)系。如,采用IO方式讀數(shù)據(jù)時(shí),驅(qū)動(dòng)程序在中斷服務(wù)例程中要禁止中斷/*m_MemoryRange0_ForBase0.outd(INTCSR,0x0);*/,m_hEventSiganl事件激發(fā)且測(cè)試程序完成了數(shù)據(jù)搬移和處理后則應(yīng)打開(kāi)PCI中斷和LINT#中斷/*g_pPCI9054AppDlg->writeBar0(0x68,0x900); */; 采用DMA方式讀數(shù)據(jù)時(shí),則應(yīng)交替地打開(kāi)LINT#中斷和DMA完成中斷以保證一幀數(shù)據(jù)的完整。DMA方式讀數(shù)據(jù)時(shí)中斷交替打開(kāi)的具體過(guò)程為:m_hEventSiganl事件激發(fā)后允許PCI中斷和DMA通道中斷并啟動(dòng)DMA傳輸/*g_pPCI9054AppDlg->writeBar0(0x68,0x40100); */,m_hEventDma事 件激發(fā)且測(cè)試程序完成了數(shù)據(jù)搬移和處理后對(duì)應(yīng)地打開(kāi)中斷PCI中斷和LINT#中斷,如此往復(fù)。
圖8 主程序流程圖
工程上,SINAD和ENOB是反映采集系統(tǒng)性能的主要指標(biāo),為了評(píng)價(jià)采集系統(tǒng)的性能,我們基于Agilent E4438c產(chǎn)生輸入頻率滿(mǎn)足公式1(為了避免頻譜泄漏)的滿(mǎn)量程高純度信號(hào),依據(jù)FFT法按照公式2和公式3得出了本文所計(jì)論的兩種采集卡的主要性能指標(biāo)[8],指標(biāo)計(jì)算結(jié)果與器件手冊(cè)給出的參考值之間的比較見(jiàn)表2。實(shí)測(cè)波形見(jiàn)圖9和圖10。
表2 采集模塊測(cè)試結(jié)果
圖9 3906KHz、2048點(diǎn)FFT時(shí)頻譜(9240采集模塊)
圖10 15625KHz、512點(diǎn)FFT時(shí)頻譜(9244采集模塊)
基于以上分析,并以此雙信道多速率采集平臺(tái)為基礎(chǔ),我們構(gòu)建了30~3000MHz超短波頻譜監(jiān)測(cè)接收機(jī),用于對(duì)超短波信號(hào)進(jìn)行實(shí)時(shí)快速的全景搜索和分析測(cè)量,以掌握整個(gè)超短波信號(hào)的狀態(tài)分布與動(dòng)態(tài)變化情況。實(shí)測(cè)系統(tǒng)的等效掃頻速率為700MHz/s,其寬帶信號(hào)處理通道可以達(dá)到3.2kHz的頻譜分辯率,窄帶信號(hào)數(shù)據(jù)處理通道, 以25kHz帶寬為例, 可以達(dá)到1.6kHz的頻率分辨率,對(duì)于需要監(jiān)測(cè)并進(jìn)行高分辨率譜分析的信號(hào),經(jīng)過(guò)進(jìn)一步抽取壓縮窄帶信號(hào)帶寬并配合相關(guān)數(shù)字信號(hào)處理算法,可以達(dá)到最小0.9kHz的頻率分辨率。實(shí)測(cè)系統(tǒng)同時(shí)還可在數(shù)據(jù)庫(kù)的支持下進(jìn)行實(shí)時(shí)的信號(hào)識(shí)別,性能良好。作為一種通用的數(shù)據(jù)采集系統(tǒng),本系統(tǒng)也適用于其他需要多速率中頻數(shù)據(jù)采集的應(yīng)用。
[1]王帥,鄧思穎,劉釗.變參差工作雷達(dá)數(shù)據(jù)采集系統(tǒng)[J].電子技術(shù)應(yīng)用, 2007(10): 49-51.
[2]王偉.基于PCI總線(xiàn)的中頻數(shù)字化接收機(jī)實(shí)現(xiàn)研究[D].哈爾濱:哈爾濱工業(yè)大學(xué), 2006.
[3]康凱.基于總線(xiàn)的DSP高速數(shù)據(jù)采集處理系統(tǒng)[D].哈爾濱:哈爾濱工程大學(xué), 2006.
[4]薛林.高速PCI數(shù)據(jù)采集卡的設(shè)計(jì)與實(shí)現(xiàn)[D].南京:南京理工大學(xué), 2006.
[5]劉樂(lè)光,王升輝,李進(jìn).基于SOPC的1553B-PCI橋接通信模塊設(shè)計(jì)[J].電子技術(shù)應(yīng)用, 2009(7): 20-23.
[6]武安河,邰銘,于洪濤.WDM設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)[M].北京:電子工業(yè)出版社, 2003.
[7]陳妮,全英匯,邢孟道.基于FPGA的FLASH存儲(chǔ)板的CPCI接口設(shè)計(jì)[J].火控雷達(dá)技術(shù), 2008, 37(1):108-111.
[8]田坤,龔曉峰,任占民.ADC 的動(dòng)態(tài)性能對(duì)軟件無(wú)線(xiàn)電接收機(jī)性能的影響[J].現(xiàn)代電子技術(shù), 2008(15):71-73.