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