文獻標識碼: A
文章編號: 0258-7998(2014)06-0085-04
近年來,,隨著信息技術(shù)的不斷發(fā)展,,通信、網(wǎng)絡(luò),、雷達,、遙測遙感等諸多領(lǐng)域都面臨著數(shù)據(jù)量日趨龐大的問題,這對數(shù)據(jù)傳輸技術(shù)也提出了更高的要求。尤其在雷達領(lǐng)域,,雷達新體制新技術(shù)的提出與應(yīng)用,,如數(shù)字波束形成技術(shù)、高速A/D轉(zhuǎn)換器件的應(yīng)用等等,,使得雷達系統(tǒng)所需處理的信號通道數(shù)越來越多,,數(shù)據(jù)率也越來越大,龐大數(shù)據(jù)量的實時傳輸逐漸成為制約雷達系統(tǒng)性能的瓶頸之一,。當前,,高速數(shù)據(jù)傳輸技術(shù)已經(jīng)成為了人們研究的熱點問題。
CPCI(Compact PCI)總線是國際工業(yè)計算機制造者聯(lián)合會PICMG(PCI Industrial Computer Manufacturer’s Group)提出的一種高性能工業(yè)總線接口標準[1],。與傳統(tǒng)的工業(yè)計算機總線相比,,CPCI總線具備以下幾個優(yōu)點:(1)傳輸速率高。從總線速度上看,,32 bit/33 MHz的CPCI總線最大傳輸速度為132 MB/s,;對于64 bit/66 MHz CPCI總線則峰值速度可達528 MB/s。(2)與PCI總線標準完全兼容,,有利于用戶將基于PCI總線開發(fā)的成熟技術(shù)與產(chǎn)品向工業(yè)設(shè)備上推廣,。(3)采用歐插機械結(jié)構(gòu)標準,具備良好的耐用性,、散熱性,、抗震性和易維護性等性能,適合工控,、軍事,、電信等惡劣工作環(huán)境的使用。此外其還具有高擴展,、支持熱插拔等性能,。CPCI總線的種種特性使得該技術(shù)在雷達、通信,、控制等領(lǐng)域都得到了廣泛應(yīng)用[2-4],。
本文以CPCI總線接口設(shè)計作為研究對象,針對某雷達系統(tǒng)數(shù)據(jù)傳輸與控制的需求,,完成了雷達接收機數(shù)據(jù)傳輸接口的設(shè)計與開發(fā),,為雷達系統(tǒng)各板卡間的正常通信提供了保障。
1 系統(tǒng)需求
該雷達系統(tǒng)的結(jié)構(gòu)框圖如圖1所示,,系統(tǒng)涵蓋主控板卡,,數(shù)據(jù)采集板卡、同步控制板卡和頻率合成板卡等多種不同類型的外圍板卡,。其中主控板卡負責收集多塊數(shù)據(jù)采集板卡的數(shù)據(jù)進行后續(xù)信號處理,,以及完成對所有外圍板卡的參數(shù)配置與控制,。主控板與外圍板卡的通信通過數(shù)據(jù)總線來完成。經(jīng)過分析,,得知多塊數(shù)據(jù)采集板卡向主控板上傳數(shù)據(jù)的最大傳輸速率和不超過10 MB/s,,而主控板下發(fā)控制參數(shù)信息至外圍板卡的傳輸速率則要求更低。因此CPCI總線的傳輸速率足以勝任系統(tǒng)需求,。
該雷達系統(tǒng)的主控板卡為外購產(chǎn)品,因此設(shè)計的重點在于外圍板卡端的數(shù)據(jù)總線接口設(shè)計以及主控板卡端的驅(qū)動開發(fā),。此外對于雷達外圍板卡端而言,,雖然可分為多塊不同類型的板卡,功能不同,,但其CPCI總線接口電路的設(shè)計應(yīng)基本一致,,保證版本的統(tǒng)一性,方便調(diào)試與維護,。
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主要負責數(shù)據(jù)的緩沖與轉(zhuǎn)發(fā),并對PCI9054進行相應(yīng)的控制操作,。當外圍板卡即本地端用戶功能設(shè)備上傳數(shù)據(jù)時,,F(xiàn)PGA通過內(nèi)部開設(shè)的緩沖區(qū),將用戶端的數(shù)據(jù)進行打包發(fā)送給PCI9054,,由PCI芯片轉(zhuǎn)換成CPCI總線協(xié)議數(shù)據(jù)上傳至主控板卡端,。當主控端發(fā)送控制指令時,,F(xiàn)PGA同樣在獲得PCI芯片的本地總線數(shù)據(jù)后,發(fā)送至本地端用戶功能設(shè)備中,。此外EEPOM與FPGA配置芯片分別完成上電時對PCI芯片以及FPGA的參數(shù)配置與初始化,。
PCI9054負責完成主控板與外圍板端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(高為讀,低為寫),,進行讀寫數(shù)據(jù)操作,;并同時向PCI9054發(fā)送數(shù)據(jù)有效信號READY(低有效)。此時PCI橋芯片根據(jù)讀寫要求,,將數(shù)據(jù)發(fā)送至FPGA或上傳至主控板,。
(5)當傳輸最后一個數(shù)據(jù)時,PCI9054 將BLAST指示信號置低(低有效),。FPGA隨即在下一個時鐘將READY信號拉高表示傳輸結(jié)束,。
(6)當PCI9054檢測到READY為高電平時放棄本地總線,結(jié)束通信,。
在主控板卡與外圍板卡的數(shù)據(jù)傳輸過程中,,F(xiàn)PGA開設(shè)有雙口RAM作為數(shù)據(jù)緩沖區(qū),本地端功能設(shè)備和PCI芯片均可對其進行讀寫操作,。設(shè)計采用乒乓操作工作模式,,避免兩者對同一地址同時讀寫的沖突。此外在硬件電路設(shè)計中,,針對該雷達不同類型的外圍板卡所需緩沖數(shù)據(jù)塊大小的需求不盡相同的情況,,通過選用同系列、同封裝,、不同資源的FPGA芯片,,統(tǒng)一考慮它們的電源、地以及I/O管腳的分布情況,,綜合設(shè)計電路版圖,,使得同一塊PCB板上可以根據(jù)不同需求焊接合適資源的FPGA芯片。該設(shè)計既有效降低了成本,,又便于以后的維護與升級,。
3 驅(qū)動開發(fā)
3.1 WDM驅(qū)動簡介
雷達系統(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ū)動的不同例程中進行處理[8],。隨后驅(qū)動程序通過硬件抽象層(HAL)調(diào)用來訪問硬件設(shè)備。當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ū)動程序與底層硬件進行通信的整個過程(灰色部分為論文需設(shè)計研發(fā)的工作),。
3.2 WDM驅(qū)動功能實現(xiàn)
論文利用Driver Studio工具,調(diào)用其自帶的Driver wizard設(shè)置向?qū)蒞DM驅(qū)動框架[9],,并根據(jù)雷達系統(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標識符的驅(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)對寄存器進行操作,。例如配置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,。進入中斷服務(wù)例程前,通過調(diào)用KInterrupt的成員函數(shù)InitializeAndConnect初始化中斷變量和調(diào)用宏LinkTo鏈接到中斷例程(Isr_Irq)中,。代碼如下:
status = m_Irq.InitializeAndConnect(
pResListTranslated,
LinkTo(Isr_Irq),
this);
進入中斷服務(wù)例程后,,通過PCI9054的中斷寄存器進行中斷類型判斷:若為本地中斷,則關(guān)閉本地中斷清除中斷標志位,產(chǎn)生通知事件給應(yīng)用程序,,通知主控板卡需進行數(shù)據(jù)的DMA傳輸,;如為DMA中斷,則表明DMA傳輸完成,,需禁止該中斷并清除中斷標志位,,隨后啟動延遲過程調(diào)用例程(DPC)進行處理。其過程將在下節(jié)進一步說明,。中斷處理的流程圖如圖4所示,。
該雷達系統(tǒng)存在多塊外圍板卡同時掛在CPCI總線上的情況,它們共享一個中斷向量,。面對多外圍板卡的中斷處理時,,驅(qū)動程序通過查詢各個設(shè)備的中斷寄存器狀態(tài),判斷來自哪個設(shè)備的中斷,,并以事件形式通知應(yīng)用程序,,迅速對中斷事件進行處理。
3.2.3 DMA傳輸
雷達系統(tǒng)數(shù)據(jù)采集板卡上傳采集數(shù)據(jù)或主控板卡下發(fā)控制參數(shù)均可由DMA傳輸方式完成的,,它們的工作原理基本相同,。以上傳為例,數(shù)據(jù)采集板卡在本地端FPGA內(nèi)緩沖一定量的數(shù)據(jù)后,,向主控板卡申請中斷,。主控板接收到該中斷后發(fā)起總線操作,,控制外圍板卡進行DMA傳輸,DMA傳輸流程圖如圖5所示,。
進入DMA傳輸流程時,,驅(qū)動程序通過控制DMA傳輸?shù)腒DmaTransfer類的成員函數(shù)Initiate()完成DMA的初始化工作。隨后系統(tǒng)進入回調(diào)例程,,若有數(shù)據(jù)需要傳輸,,則配置PCI9054的DMA寄存器,并開始DMA傳輸,。當傳輸完成后,,PCI9054產(chǎn)生DMA中斷,在驅(qū)動程序的中斷服務(wù)例程中,,啟動DPC進入DpcFor_Irq例程,,在DpcFor_Irq內(nèi)通過調(diào)用KdmaTransfer類的成員函數(shù)Continue()進入DMA的回調(diào)例程,再次檢測是否有待傳輸?shù)臄?shù)據(jù),。若所有數(shù)據(jù)傳輸完畢則完成DMA操作,,結(jié)束IRP;否則進入下一輪DMA,,一直到數(shù)據(jù)傳輸完畢為止。
本文對安裝有WDM框架驅(qū)動的板卡進行了測試,。圖6為外圍板卡端FPGA抓取DMA傳輸?shù)谋镜乜偩€時序圖,,表明主控板卡與外圍板卡的DMA傳輸工作正常。實驗測試實際DMA傳輸速率約為35 MB/s,,完全能夠滿足該雷達系統(tǒng)數(shù)據(jù)傳輸?shù)男枨蟆?/p>
本文針對某雷達系統(tǒng)數(shù)據(jù)傳輸與控制的要求,,提出了一種基于CPCI總線的雷達接收機數(shù)據(jù)傳輸接口實現(xiàn)方案。在外圍板卡端,,完成了基于FPGA+PCI橋芯片架構(gòu)的CPCI總線接口電路設(shè)計,;在主控板卡端,進行了基于WDM框架的驅(qū)動程序開發(fā),實現(xiàn)了主控板對多塊外圍板的硬件訪問,、中斷處理和DMA傳輸?shù)榷喾N功能,。論文的測試結(jié)果表明主控板卡能夠有效完成與外圍板卡間的數(shù)據(jù)傳輸與控制,性能指標符合系統(tǒng)設(shè)計要求,。
參考文獻
[1] Wikipedia, Compact PCI[EB/OL].[2014-01-02].http://en.Wikipedia.org/wiki/CompactPCI, 2013.
[2] 熊杰, 潘小鋒, 莊屹立,等.基于CPCI總線的認知無線電系統(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.