文獻(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ù)量的實(shí)時(shí)傳輸逐漸成為制約雷達(dá)系統(tǒng)性能的瓶頸之一。當(dāng)前,,高速數(shù)據(jù)傳輸技術(shù)已經(jīng)成為了人們研究的熱點(diǎn)問題,。
CPCI(Compact PCI)總線是國際工業(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,;對于64 bit/66 MHz CPCI總線則峰值速度可達(dá)528 MB/s,。(2)與PCI總線標(biāo)準(zhǔn)完全兼容,有利于用戶將基于PCI總線開發(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ì)作為研究對象,,針對某雷達(dá)系統(tǒng)數(shù)據(jù)傳輸與控制的需求,完成了雷達(dá)接收機(jī)數(shù)據(jù)傳輸接口的設(shè)計(jì)與開發(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è)計(jì)的重點(diǎn)在于外圍板卡端的數(shù)據(jù)總線接口設(shè)計(jì)以及主控板卡端的驅(qū)動(dòng)開發(fā),。此外對于雷達(dá)外圍板卡端而言,雖然可分為多塊不同類型的板卡,,功能不同,,但其CPCI總線接口電路的設(shè)計(jì)應(yīng)基本一致,保證版本的統(tǒng)一性,,方便調(diào)試與維護(hù),。
2 硬件設(shè)計(jì)
目前常見的CPCI總線接口實(shí)現(xiàn)方案有多種:(1)FPGA IPcore方案,可用各大FPGA公司提供的PCI總線接口IP核來完成,。該方案結(jié)構(gòu)簡單,,無需關(guān)心PCI總線協(xié)議,但需要購買使用許可,,費(fèi)用較高,。(2)在FPGA內(nèi)自己實(shí)現(xiàn)PCI協(xié)議及相應(yīng)邏輯功能[5],該方案電路設(shè)計(jì)簡單,費(fèi)用較低,,但開發(fā)難度較高,,研發(fā)周期過長。(3)PCI橋芯片+FPGA架構(gòu)方案[2-3,6],,該方案電路結(jié)構(gòu)較前兩者相對復(fù)雜一些,,但因使用了橋芯片,無需太多關(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ā),并對PCI9054進(jìn)行相應(yīng)的控制操作,。當(dāng)外圍板卡即本地端用戶功能設(shè)備上傳數(shù)據(jù)時(shí),F(xiàn)PGA通過內(nè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í)對PCI芯片以及FPGA的參數(shù)配置與初始化,。
PCI9054負(fù)責(zé)完成主控板與外圍板端FPGA之間的通信,,其主要控制步驟如下:
(1)主控板向外圍板發(fā)出讀寫請求時(shí),PCI9054向FPGA發(fā)出申請本地總線信號LHOLD(高有效),。
(2) FPGA檢測到LHOLD有效后,若本地總線空閑,,即對PCI9054回應(yīng)總線應(yīng)答信號LHOLDA(高有效),,表示申請本地總線有效。
(3)PCI9054檢測到申請總線有效后,給出地址有效信號ADS(低有效),,同時(shí)給出讀寫的地址。
(4)FPGA檢測到ADS后,,根據(jù)PCI9054的讀寫控制信號LW/R(高為讀,,低為寫),進(jìn)行讀寫數(shù)據(jù)操作,;并同時(shí)向PCI9054發(fā)送數(shù)據(jù)有效信號READY(低有效),。此時(shí)PCI橋芯片根據(jù)讀寫要求,將數(shù)據(jù)發(fā)送至FPGA或上傳至主控板,。
(5)當(dāng)傳輸最后一個(gè)數(shù)據(jù)時(shí),,PCI9054 將BLAST指示信號置低(低有效)。FPGA隨即在下一個(gè)時(shí)鐘將READY信號拉高表示傳輸結(jié)束,。
(6)當(dāng)PCI9054檢測到READY為高電平時(shí)放棄本地總線,,結(jié)束通信。
在主控板卡與外圍板卡的數(shù)據(jù)傳輸過程中,,F(xiàn)PGA開設(shè)有雙口RAM作為數(shù)據(jù)緩沖區(qū),,本地端功能設(shè)備和PCI芯片均可對其進(jìn)行讀寫操作。設(shè)計(jì)采用乒乓操作工作模式,,避免兩者對同一地址同時(shí)讀寫的沖突,。此外在硬件電路設(shè)計(jì)中,針對該雷達(dá)不同類型的外圍板卡所需緩沖數(shù)據(jù)塊大小的需求不盡相同的情況,,通過選用同系列,、同封裝、不同資源的FPGA芯片,,統(tǒng)一考慮它們的電源,、地以及I/O管腳的分布情況,綜合設(shè)計(jì)電路版圖,,使得同一塊PCB板上可以根據(jù)不同需求焊接合適資源的FPGA芯片,。該設(shè)計(jì)既有效降低了成本,又便于以后的維護(hù)與升級,。
3 驅(qū)動(dòng)開發(fā)
3.1 WDM驅(qū)動(dòng)簡介
雷達(dá)系統(tǒng)的主控板卡采用Windows XP 操作系統(tǒng),。在該操作系統(tǒng)平臺上,應(yīng)用程序直接訪問硬件設(shè)備是受限制的,,必須獲得可工作在Windows系統(tǒng)內(nèi)核下的驅(qū)動(dòng)程序的支持,。綜合考慮選用WDM驅(qū)動(dòng)框架模式,完成了CPCI總線數(shù)據(jù)接口的驅(qū)動(dòng)開發(fā)。WDM模型驅(qū)動(dòng)是微軟公司為Windows系統(tǒng)下的設(shè)備驅(qū)動(dòng)程序開發(fā)提供的一種靈活,、簡化的驅(qū)動(dòng)模型,,能有效降低所必需開發(fā)的驅(qū)動(dòng)程序的數(shù)量以及復(fù)雜性[7]。
在WDM驅(qū)動(dòng)下訪問硬件設(shè)備時(shí),,應(yīng)用程序通過調(diào)用Win32API函數(shù)產(chǎn)生控制命令,,操作系統(tǒng)的I/O管理器將獲取的控制命令轉(zhuǎn)化為對應(yīng)的IRP(I/O處理請求包)送給驅(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)程序通過硬件抽象層(HAL)調(diào)用來訪問硬件設(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)用程序通過調(diào)用WDM驅(qū)動(dòng)程序與底層硬件進(jìn)行通信的整個(gè)過程(灰色部分為論文需設(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è)部分:硬件訪問,、中斷處理與DMA傳輸,。
3.2.1 硬件訪問
硬件訪問是指對硬件設(shè)備實(shí)現(xiàn)基本的識別與訪問功能。WDM驅(qū)動(dòng)可以通過GUID接口方式或符號鏈接名方式來獲取有效的設(shè)備句柄,,從而識別,、打開或關(guān)閉設(shè)備。在前者方案中,,每塊板卡需要生成對應(yīng)不同GUID標(biāo)識符的驅(qū)動(dòng),,打開設(shè)備比較繁瑣;對于后者,,所有板卡通用一個(gè)驅(qū)動(dòng)程序,,只根據(jù)板卡在不同的插槽位置對應(yīng)不同的符號鏈接名打開設(shè)備。相比較而言獲取設(shè)備句柄更為簡單,。論文采用符號鏈接名方式實(shí)現(xiàn)設(shè)備的識別,。
對于硬件的訪問,在X86處理器中存在兩套獨(dú)立的地址空間:內(nèi)存地址和I/O地址,。PCI橋芯片將本地端內(nèi)存單元通過映射的方式定位到這兩種獨(dú)立的地址空間,。在驅(qū)動(dòng)程序中,可通過調(diào)用WDM驅(qū)動(dòng)框架提供的KIoRange類(對I/O映射空間的訪問)和KMemoryRange類(對內(nèi)存映射空間的訪問)來實(shí)現(xiàn)對映射的訪問,。
本文通過調(diào)用KIoRange類對I/O映射空間訪問,,實(shí)現(xiàn)對硬件的操作,。打開設(shè)備后,應(yīng)用程序可通過Win32的API函數(shù)DeviceIoControl向驅(qū)動(dòng)發(fā)起相應(yīng)的控制命令和參數(shù),。驅(qū)動(dòng)獲取命令及參數(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ù)上傳時(shí)所生成的本地中斷,;(2)PCI9054完成了DMA傳輸后產(chǎn)生的DMA中斷,。WDM框架驅(qū)動(dòng)將中斷的處理封裝成類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)志位,,隨后啟動(dòng)延遲過程調(diào)用例程(DPC)進(jìn)行處理,。其過程將在下節(jié)進(jìn)一步說明。中斷處理的流程圖如圖4所示,。
該雷達(dá)系統(tǒng)存在多塊外圍板卡同時(shí)掛在CPCI總線上的情況,,它們共享一個(gè)中斷向量。面對多外圍板卡的中斷處理時(shí),,驅(qū)動(dòng)程序通過查詢各個(gè)設(shè)備的中斷寄存器狀態(tài),,判斷來自哪個(gè)設(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傳輸流程時(shí),,驅(qū)動(dòng)程序通過控制DMA傳輸?shù)腒DmaTransfer類的成員函數(shù)Initiate()完成DMA的初始化工作,。隨后系統(tǒng)進(jìn)入回調(diào)例程,若有數(shù)據(jù)需要傳輸,,則配置PCI9054的DMA寄存器,,并開始DMA傳輸。當(dāng)傳輸完成后,,PCI9054產(chǎn)生DMA中斷,,在驅(qū)動(dòng)程序的中斷服務(wù)例程中,啟動(dòng)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ū)動(dòng)的板卡進(jìn)行了測試,。圖6為外圍板卡端FPGA抓取DMA傳輸?shù)谋镜乜偩€時(shí)序圖,表明主控板卡與外圍板卡的DMA傳輸工作正常,。實(shí)驗(yàn)測試實(shí)際DMA傳輸速率約為35 MB/s,,完全能夠滿足該雷達(dá)系統(tǒng)數(shù)據(jù)傳輸?shù)男枨蟆?/p>
本文針對某雷達(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)程序開發(fā),實(shí)現(xiàn)了主控板對多塊外圍板的硬件訪問,、中斷處理和DMA傳輸?shù)榷喾N功能。論文的測試結(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)知無線電系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)測量與控制,2012,20(3):754-757.
[3] 董勇偉, 周良將,唐波,等. SAR實(shí)時(shí)成像處理平臺的設(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]. 測控技術(shù),2008,27(8): 50-52.
[5] 方明. 基于FPGA開發(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)開發(fā)技術(shù)詳解[M]. 北京: 電子工業(yè)出版社, 2008.
[8] 武安河. Windows2000/XP WDM 設(shè)備驅(qū)動(dòng)程序開發(fā)(第二版)[M]. 北京: 電子工業(yè)出版社, 2005.
[9] 李勇, 李宇. PCI總線設(shè)備開發(fā)寶典[M]. 北京: 北京航空航天大學(xué)出版社, 2005.