文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2014)06-0085-04
近年來,隨著信息技術(shù)的不斷發(fā)展,通信、網(wǎng)絡(luò)、雷達(dá)、遙測遙感等諸多領(lǐng)域都面臨著數(shù)據(jù)量日趨龐大的問題,這對數(shù)據(jù)傳輸技術(shù)也提出了更高的要求。尤其在雷達(dá)領(lǐng)域,雷達(dá)新體制新技術(shù)的提出與應(yīng)用,如數(shù)字波束形成技術(shù)、高速A/D轉(zhuǎn)換器件的應(yīng)用等等,使得雷達(dá)系統(tǒng)所需處理的信號通道數(shù)越來越多,數(shù)據(jù)率也越來越大,龐大數(shù)據(jù)量的實時傳輸逐漸成為制約雷達(dá)系統(tǒng)性能的瓶頸之一。當(dāng)前,高速數(shù)據(jù)傳輸技術(shù)已經(jīng)成為了人們研究的熱點問題。
CPCI(Compact PCI)總線是國際工業(yè)計算機制造者聯(lián)合會PICMG(PCI Industrial Computer Manufacturer’s Group)提出的一種高性能工業(yè)總線接口標(biāo)準(zhǔn)[1]。與傳統(tǒng)的工業(yè)計算機總線相比,CPCI總線具備以下幾個優(yōu)點:(1)傳輸速率高。從總線速度上看,32 bit/33 MHz的CPCI總線最大傳輸速度為132 MB/s;對于64 bit/66 MHz CPCI總線則峰值速度可達(dá)528 MB/s。(2)與PCI總線標(biāo)準(zhǔn)完全兼容,有利于用戶將基于PCI總線開發(fā)的成熟技術(shù)與產(chǎn)品向工業(yè)設(shè)備上推廣。(3)采用歐插機械結(jié)構(gòu)標(biāo)準(zhǔn),具備良好的耐用性、散熱性、抗震性和易維護(hù)性等性能,適合工控、軍事、電信等惡劣工作環(huán)境的使用。此外其還具有高擴展、支持熱插拔等性能。CPCI總線的種種特性使得該技術(shù)在雷達(dá)、通信、控制等領(lǐng)域都得到了廣泛應(yīng)用[2-4]。
本文以CPCI總線接口設(shè)計作為研究對象,針對某雷達(dá)系統(tǒng)數(shù)據(jù)傳輸與控制的需求,完成了雷達(dá)接收機數(shù)據(jù)傳輸接口的設(shè)計與開發(fā),為雷達(dá)系統(tǒng)各板卡間的正常通信提供了保障。
1 系統(tǒng)需求
該雷達(dá)系統(tǒng)的結(jié)構(gòu)框圖如圖1所示,系統(tǒng)涵蓋主控板卡,數(shù)據(jù)采集板卡、同步控制板卡和頻率合成板卡等多種不同類型的外圍板卡。其中主控板卡負(fù)責(zé)收集多塊數(shù)據(jù)采集板卡的數(shù)據(jù)進(jìn)行后續(xù)信號處理,以及完成對所有外圍板卡的參數(shù)配置與控制。主控板與外圍板卡的通信通過數(shù)據(jù)總線來完成。經(jīng)過分析,得知多塊數(shù)據(jù)采集板卡向主控板上傳數(shù)據(jù)的最大傳輸速率和不超過10 MB/s,而主控板下發(fā)控制參數(shù)信息至外圍板卡的傳輸速率則要求更低。因此CPCI總線的傳輸速率足以勝任系統(tǒng)需求。
該雷達(dá)系統(tǒng)的主控板卡為外購產(chǎn)品,因此設(shè)計的重點在于外圍板卡端的數(shù)據(jù)總線接口設(shè)計以及主控板卡端的驅(qū)動開發(fā)。此外對于雷達(dá)外圍板卡端而言,雖然可分為多塊不同類型的板卡,功能不同,但其CPCI總線接口電路的設(shè)計應(yīng)基本一致,保證版本的統(tǒng)一性,方便調(diào)試與維護(hù)。
2 硬件設(shè)計
目前常見的CPCI總線接口實現(xiàn)方案有多種:(1)FPGA IPcore方案,可用各大FPGA公司提供的PCI總線接口IP核來完成。該方案結(jié)構(gòu)簡單,無需關(guān)心PCI總線協(xié)議,但需要購買使用許可,費用較高。(2)在FPGA內(nèi)自己實現(xiàn)PCI協(xié)議及相應(yīng)邏輯功能[5],該方案電路設(shè)計簡單,費用較低,但開發(fā)難度較高,研發(fā)周期過長。(3)PCI橋芯片+FPGA架構(gòu)方案[2-3,6],該方案電路結(jié)構(gòu)較前兩者相對復(fù)雜一些,但因使用了橋芯片,無需太多關(guān)心PCI總線協(xié)議,研發(fā)周期快,且費用較低。綜合以上因素,選取了第三種方案搭建硬件接口電路,其結(jié)構(gòu)框圖如圖2所示。
其中PCI橋芯片完成CPCI總線與本地端總線的協(xié)議轉(zhuǎn)換,在這里選擇了PLX Technology公司32 bit寬/33 MHz低成本PCI橋芯片PCI9054。FPGA主要負(fù)責(zé)數(shù)據(jù)的緩沖與轉(zhuǎn)發(fā),并對PCI9054進(jìn)行相應(yīng)的控制操作。當(dāng)外圍板卡即本地端用戶功能設(shè)備上傳數(shù)據(jù)時,F(xiàn)PGA通過內(nèi)部開設(shè)的緩沖區(qū),將用戶端的數(shù)據(jù)進(jìn)行打包發(fā)送給PCI9054,由PCI芯片轉(zhuǎn)換成CPCI總線協(xié)議數(shù)據(jù)上傳至主控板卡端。當(dāng)主控端發(fā)送控制指令時,F(xiàn)PGA同樣在獲得PCI芯片的本地總線數(shù)據(jù)后,發(fā)送至本地端用戶功能設(shè)備中。此外EEPOM與FPGA配置芯片分別完成上電時對PCI芯片以及FPGA的參數(shù)配置與初始化。
PCI9054負(fù)責(zé)完成主控板與外圍板端FPGA之間的通信,其主要控制步驟如下:
(1)主控板向外圍板發(fā)出讀寫請求時,PCI9054向FPGA發(fā)出申請本地總線信號LHOLD(高有效)。
(2) FPGA檢測到LHOLD有效后,若本地總線空閑,即對PCI9054回應(yīng)總線應(yīng)答信號LHOLDA(高有效),表示申請本地總線有效。
(3)PCI9054檢測到申請總線有效后,給出地址有效信號ADS(低有效),同時給出讀寫的地址。
(4)FPGA檢測到ADS后,根據(jù)PCI9054的讀寫控制信號LW/R(高為讀,低為寫),進(jìn)行讀寫數(shù)據(jù)操作;并同時向PCI9054發(fā)送數(shù)據(jù)有效信號READY(低有效)。此時PCI橋芯片根據(jù)讀寫要求,將數(shù)據(jù)發(fā)送至FPGA或上傳至主控板。
(5)當(dāng)傳輸最后一個數(shù)據(jù)時,PCI9054 將BLAST指示信號置低(低有效)。FPGA隨即在下一個時鐘將READY信號拉高表示傳輸結(jié)束。
(6)當(dāng)PCI9054檢測到READY為高電平時放棄本地總線,結(jié)束通信。
在主控板卡與外圍板卡的數(shù)據(jù)傳輸過程中,F(xiàn)PGA開設(shè)有雙口RAM作為數(shù)據(jù)緩沖區(qū),本地端功能設(shè)備和PCI芯片均可對其進(jìn)行讀寫操作。設(shè)計采用乒乓操作工作模式,避免兩者對同一地址同時讀寫的沖突。此外在硬件電路設(shè)計中,針對該雷達(dá)不同類型的外圍板卡所需緩沖數(shù)據(jù)塊大小的需求不盡相同的情況,通過選用同系列、同封裝、不同資源的FPGA芯片,統(tǒng)一考慮它們的電源、地以及I/O管腳的分布情況,綜合設(shè)計電路版圖,使得同一塊PCB板上可以根據(jù)不同需求焊接合適資源的FPGA芯片。該設(shè)計既有效降低了成本,又便于以后的維護(hù)與升級。
3 驅(qū)動開發(fā)
3.1 WDM驅(qū)動簡介
雷達(dá)系統(tǒng)的主控板卡采用Windows XP 操作系統(tǒng)。在該操作系統(tǒng)平臺上,應(yīng)用程序直接訪問硬件設(shè)備是受限制的,必須獲得可工作在Windows系統(tǒng)內(nèi)核下的驅(qū)動程序的支持。綜合考慮選用WDM驅(qū)動框架模式,完成了CPCI總線數(shù)據(jù)接口的驅(qū)動開發(fā)。WDM模型驅(qū)動是微軟公司為Windows系統(tǒng)下的設(shè)備驅(qū)動程序開發(fā)提供的一種靈活、簡化的驅(qū)動模型,能有效降低所必需開發(fā)的驅(qū)動程序的數(shù)量以及復(fù)雜性[7]。
在WDM驅(qū)動下訪問硬件設(shè)備時,應(yīng)用程序通過調(diào)用Win32API函數(shù)產(chǎn)生控制命令,操作系統(tǒng)的I/O管理器將獲取的控制命令轉(zhuǎn)化為對應(yīng)的IRP(I/O處理請求包)送給驅(qū)動程序的入口點。IRP是Windows內(nèi)核中一種非常重要的數(shù)據(jù)結(jié)構(gòu),它包含了應(yīng)用程序發(fā)出控制命令的信息,不同的IRP會根據(jù)類型被分到驅(qū)動的不同例程中進(jìn)行處理[8]。隨后驅(qū)動程序通過硬件抽象層(HAL)調(diào)用來訪問硬件設(shè)備。當(dāng)IRP結(jié)束時,驅(qū)動調(diào)用IoCompleteRequest函數(shù)通知I/O管理器,并向I/O管理器返回相關(guān)參數(shù)及數(shù)據(jù),應(yīng)用程序回讀數(shù)據(jù),完成本次操作。圖3為應(yīng)用程序通過調(diào)用WDM驅(qū)動程序與底層硬件進(jìn)行通信的整個過程(灰色部分為論文需設(shè)計研發(fā)的工作)。
3.2 WDM驅(qū)動功能實現(xiàn)
論文利用Driver Studio工具,調(diào)用其自帶的Driver wizard設(shè)置向?qū)蒞DM驅(qū)動框架[9],并根據(jù)雷達(dá)系統(tǒng)的硬件設(shè)備情況添加相應(yīng)的代碼。驅(qū)動實現(xiàn)的功能主要包括三個部分:硬件訪問、中斷處理與DMA傳輸。
3.2.1 硬件訪問
硬件訪問是指對硬件設(shè)備實現(xiàn)基本的識別與訪問功能。WDM驅(qū)動可以通過GUID接口方式或符號鏈接名方式來獲取有效的設(shè)備句柄,從而識別、打開或關(guān)閉設(shè)備。在前者方案中,每塊板卡需要生成對應(yīng)不同GUID標(biāo)識符的驅(qū)動,打開設(shè)備比較繁瑣;對于后者,所有板卡通用一個驅(qū)動程序,只根據(jù)板卡在不同的插槽位置對應(yīng)不同的符號鏈接名打開設(shè)備。相比較而言獲取設(shè)備句柄更為簡單。論文采用符號鏈接名方式實現(xiàn)設(shè)備的識別。
對于硬件的訪問,在X86處理器中存在兩套獨立的地址空間:內(nèi)存地址和I/O地址。PCI橋芯片將本地端內(nèi)存單元通過映射的方式定位到這兩種獨立的地址空間。在驅(qū)動程序中,可通過調(diào)用WDM驅(qū)動框架提供的KIoRange類(對I/O映射空間的訪問)和KMemoryRange類(對內(nèi)存映射空間的訪問)來實現(xiàn)對映射的訪問。
本文通過調(diào)用KIoRange類對I/O映射空間訪問,實現(xiàn)對硬件的操作。打開設(shè)備后,應(yīng)用程序可通過Win32的API函數(shù)DeviceIoControl向驅(qū)動發(fā)起相應(yīng)的控制命令和參數(shù)。驅(qū)動獲取命令及參數(shù)后通過KIoRange類的成員函數(shù)FORM.outd(ULONG ByteOffset,ULONG Data)對寄存器進(jìn)行操作。例如配置PCI9054的中斷寄存器:
m_IoPortRange0.outd(INTCSR, mm_Data);
INTCSR為定義的中斷寄存器,mm_Data為獲得的需要修改的中斷寄存器參數(shù)。
3.2.2 中斷處理
系統(tǒng)主要存在兩類中斷需要處理:(1)數(shù)據(jù)采集板卡請求數(shù)據(jù)上傳時所生成的本地中斷;(2)PCI9054完成了DMA傳輸后產(chǎn)生的DMA中斷。WDM框架驅(qū)動將中斷的處理封裝成類KInterrupt。進(jìn)入中斷服務(wù)例程前,通過調(diào)用KInterrupt的成員函數(shù)InitializeAndConnect初始化中斷變量和調(diào)用宏LinkTo鏈接到中斷例程(Isr_Irq)中。代碼如下:
status = m_Irq.InitializeAndConnect(
pResListTranslated,
LinkTo(Isr_Irq),
this);
進(jìn)入中斷服務(wù)例程后,通過PCI9054的中斷寄存器進(jìn)行中斷類型判斷:若為本地中斷,則關(guān)閉本地中斷清除中斷標(biāo)志位,產(chǎn)生通知事件給應(yīng)用程序,通知主控板卡需進(jìn)行數(shù)據(jù)的DMA傳輸;如為DMA中斷,則表明DMA傳輸完成,需禁止該中斷并清除中斷標(biāo)志位,隨后啟動延遲過程調(diào)用例程(DPC)進(jìn)行處理。其過程將在下節(jié)進(jìn)一步說明。中斷處理的流程圖如圖4所示。
該雷達(dá)系統(tǒng)存在多塊外圍板卡同時掛在CPCI總線上的情況,它們共享一個中斷向量。面對多外圍板卡的中斷處理時,驅(qū)動程序通過查詢各個設(shè)備的中斷寄存器狀態(tài),判斷來自哪個設(shè)備的中斷,并以事件形式通知應(yīng)用程序,迅速對中斷事件進(jìn)行處理。
3.2.3 DMA傳輸
雷達(dá)系統(tǒng)數(shù)據(jù)采集板卡上傳采集數(shù)據(jù)或主控板卡下發(fā)控制參數(shù)均可由DMA傳輸方式完成的,它們的工作原理基本相同。以上傳為例,數(shù)據(jù)采集板卡在本地端FPGA內(nèi)緩沖一定量的數(shù)據(jù)后,向主控板卡申請中斷。主控板接收到該中斷后發(fā)起總線操作,控制外圍板卡進(jìn)行DMA傳輸,DMA傳輸流程圖如圖5所示。
進(jìn)入DMA傳輸流程時,驅(qū)動程序通過控制DMA傳輸?shù)腒DmaTransfer類的成員函數(shù)Initiate()完成DMA的初始化工作。隨后系統(tǒng)進(jìn)入回調(diào)例程,若有數(shù)據(jù)需要傳輸,則配置PCI9054的DMA寄存器,并開始DMA傳輸。當(dāng)傳輸完成后,PCI9054產(chǎn)生DMA中斷,在驅(qū)動程序的中斷服務(wù)例程中,啟動DPC進(jìn)入DpcFor_Irq例程,在DpcFor_Irq內(nèi)通過調(diào)用KdmaTransfer類的成員函數(shù)Continue()進(jìn)入DMA的回調(diào)例程,再次檢測是否有待傳輸?shù)臄?shù)據(jù)。若所有數(shù)據(jù)傳輸完畢則完成DMA操作,結(jié)束IRP;否則進(jìn)入下一輪DMA,一直到數(shù)據(jù)傳輸完畢為止。
本文對安裝有WDM框架驅(qū)動的板卡進(jìn)行了測試。圖6為外圍板卡端FPGA抓取DMA傳輸?shù)谋镜乜偩€時序圖,表明主控板卡與外圍板卡的DMA傳輸工作正常。實驗測試實際DMA傳輸速率約為35 MB/s,完全能夠滿足該雷達(dá)系統(tǒng)數(shù)據(jù)傳輸?shù)男枨蟆?/p>
本文針對某雷達(dá)系統(tǒng)數(shù)據(jù)傳輸與控制的要求,提出了一種基于CPCI總線的雷達(dá)接收機數(shù)據(jù)傳輸接口實現(xiàn)方案。在外圍板卡端,完成了基于FPGA+PCI橋芯片架構(gòu)的CPCI總線接口電路設(shè)計;在主控板卡端,進(jìn)行了基于WDM框架的驅(qū)動程序開發(fā),實現(xiàn)了主控板對多塊外圍板的硬件訪問、中斷處理和DMA傳輸?shù)榷喾N功能。論文的測試結(jié)果表明主控板卡能夠有效完成與外圍板卡間的數(shù)據(jù)傳輸與控制,性能指標(biāo)符合系統(tǒng)設(shè)計要求。
參考文獻(xiàn)
[1] Wikipedia, Compact PCI[EB/OL].[2014-01-02].http://en.Wikipedia.org/wiki/CompactPCI, 2013.
[2] 熊杰, 潘小鋒, 莊屹立,等.基于CPCI總線的認(rèn)知無線電系統(tǒng)設(shè)計[J].計算機測量與控制,2012,20(3):754-757.
[3] 董勇偉, 周良將,唐波,等. SAR實時成像處理平臺的設(shè)計與實現(xiàn)[J].系統(tǒng)工程與電子技術(shù), 2009,31(8):1882-
1886.
[4] 何莉, 龔宗洋, 張為公,等.基于CPCI總線的運動控制卡及其VxWorks下的驅(qū)動設(shè)計[J]. 測控技術(shù),2008,27(8): 50-52.
[5] 方明. 基于FPGA開發(fā)的CPCI總線多功能卡及WDM驅(qū)動程序設(shè)計與實現(xiàn)[D]. 上海:上海交通大學(xué), 2009.
[6] 段玲琳,段曉超,葉明傲.CPCI外設(shè)板卡通用設(shè)計方法[C].計算機技術(shù)與應(yīng)用學(xué)術(shù)會議, 2009.
[7] 張帆, 史彩成. Windows驅(qū)動開發(fā)技術(shù)詳解[M]. 北京: 電子工業(yè)出版社, 2008.
[8] 武安河. Windows2000/XP WDM 設(shè)備驅(qū)動程序開發(fā)(第二版)[M]. 北京: 電子工業(yè)出版社, 2005.
[9] 李勇, 李宇. PCI總線設(shè)備開發(fā)寶典[M]. 北京: 北京航空航天大學(xué)出版社, 2005.