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