基于FPGA的超高速雷達(dá)實(shí)時(shí)采集存儲(chǔ)系統(tǒng)
摘要:采用服務(wù)器作為采集主控設(shè)備,利用多個(gè)硬盤(pán)組成磁 盤(pán)陣列作為存儲(chǔ)設(shè)備,并制作了一塊基于FPGA的超高速雷達(dá)信號(hào)采集PCI卡。系統(tǒng)以FPGA為采集的核心控制芯片,并在FPGA內(nèi)部實(shí)現(xiàn)了64位/66MHz的PCI接口邏輯,無(wú)需專(zhuān)用接口芯片,簡(jiǎn)化了電路板設(shè)計(jì),提高了系統(tǒng)的靈活性。該系統(tǒng)數(shù)據(jù)傳輸總速率可高達(dá)528MB/s,實(shí)時(shí)流盤(pán)速度可達(dá)150MB/s,存儲(chǔ)容量可擴(kuò)展至1000GB以上。
在超高速數(shù)據(jù)采集方面,F(xiàn)PGA(現(xiàn)場(chǎng)可編程門(mén)陣列)有著單片機(jī)和DSP所無(wú)法比擬的優(yōu)勢(shì)。FPGA時(shí)鐘頻率高,內(nèi)部時(shí)延小,目前器件的最高工作頻率可達(dá)300MHz;硬件資源豐富,單片集成的可用門(mén)數(shù)達(dá)1000萬(wàn)門(mén);全部控制邏輯由硬件資源完成,速度快,效率高;組成形式靈活,可以集成外圍控制、譯碼和接口電路。
實(shí)時(shí)流盤(pán)一直是數(shù)據(jù)采集技術(shù)的最大瓶頸,它直接制約了采集存儲(chǔ)設(shè)備的實(shí)時(shí)存儲(chǔ)能力。為此,可考慮利用多個(gè)硬盤(pán)組成RAID陣列(廉價(jià)冗余磁盤(pán)陣列)[1-2]。RAID的初衷主要是為大型服務(wù)器提供高端的存儲(chǔ)功能和冗余的數(shù)據(jù)安全。RAIID把多塊獨(dú)立的硬盤(pán)(物理硬盤(pán))按不同方式組合起來(lái)形成一個(gè)硬盤(pán)組(邏輯硬盤(pán)),從而提供比單個(gè)硬盤(pán)更高的存儲(chǔ)性能,提供冗余的技術(shù)。
1 總體方案
本文設(shè)計(jì)并實(shí)現(xiàn)了一種超高速的雷達(dá)信號(hào)采集存儲(chǔ)系統(tǒng),其工作原理框圖如圖1所示。
本系統(tǒng)采用服務(wù)器作為采集主控設(shè)備,利用多個(gè)硬盤(pán)組成磁盤(pán)陣列作為存儲(chǔ)設(shè)備。從以前的使用情況看,在普通主板上集成RAID控制器,采用IDE硬盤(pán)組成RAID0陣列情況下,硬盤(pán)陣列實(shí)測(cè)的讀寫(xiě)速度可達(dá)40MB/s;在使用SCSI硬盤(pán)和Adaptec公司的RAID卡情況下,實(shí)測(cè)速度可達(dá)70 MB/s;在使用SATA硬盤(pán)和3WARE公司的RAID卡情況下,實(shí)測(cè)速度可達(dá)150 MB/s,且最新的SATA硬盤(pán)容量大、價(jià)格便宜;若采用12個(gè)160GB的SATA硬盤(pán),則容量能達(dá)到驚人的1920GB。無(wú)論從還是從價(jià)格上,采用SATA硬盤(pán)組成SATA RAID磁盤(pán)陣列都是一種比較理想的選擇。
由于采用64位/66MHz接口的PCI卡,其總線(xiàn)數(shù)據(jù)傳輸速率為普通32位/33 MB/s接口的PCI卡的四倍,總速率可高達(dá)538 MB/s。此方案比較適合超高速雷達(dá)信號(hào)的實(shí)時(shí)采集與實(shí)時(shí)存盤(pán),采用RAID磁盤(pán)陣列后流盤(pán)速度得到了較大的提高,明顯改善了數(shù)據(jù)傳輸與數(shù)據(jù)存盤(pán)之間速度不匹配這一瓶頸問(wèn)題。
2 硬件設(shè)計(jì)
系統(tǒng)硬件總體設(shè)計(jì)考慮到系統(tǒng)的通用性、可擴(kuò)展性以及數(shù)據(jù)傳輸、終端處理的需要,選用通過(guò)64位/66MHz的PIC局部總線(xiàn)與主機(jī)(服務(wù)器)進(jìn)行實(shí)時(shí)數(shù)據(jù)交換,有利于實(shí)現(xiàn)系統(tǒng)的模塊化設(shè)計(jì)和集成,提高了數(shù)據(jù)的靈活處理能力。PCI插卡實(shí)際硬件結(jié)構(gòu)如圖2所示。
FPGA采用Xilinx(賽靈思)公司的10萬(wàn)門(mén)FPGA芯片XC2S100E,其配置芯片的Xilinx公司的1Mbits容量PROM芯片XC18V01,以主動(dòng)串行方式對(duì)FPGA進(jìn)行上電配置。AD、DA分別為ADI(模擬儀器)公司12位高速模數(shù)轉(zhuǎn)換芯片AD9224與14位高速數(shù)模轉(zhuǎn)換芯片AD9764。SRAM采用Cypress Semiconductor(塞普拉斯半導(dǎo)體)公司的256K×16bits SRAM芯片CY7C1041。
設(shè)計(jì)中利用FPGA實(shí)現(xiàn)64位/MHz的PCI接口邏輯,進(jìn)行實(shí)時(shí)信號(hào)采集和傳輸控制。由于FPGA具有層次化的存儲(chǔ)器系統(tǒng),其基本邏輯功能埠可以配置成16×1、16×2或32×1的同步RAM,或16×1的雙端口同步RAM,因此可以在FPGA內(nèi)部配置高雙口RAM作為信號(hào)傳輸?shù)臄?shù)據(jù)緩沖器。同時(shí),為了節(jié)省FPGA的內(nèi)部邏輯資源,在FPGA外圍配置了適當(dāng)?shù)腟RAM用來(lái)存儲(chǔ)數(shù)據(jù)。
3 軟件設(shè)計(jì)
3.1 FPGA程序設(shè)計(jì)
3.1.1 FPGA內(nèi)部功能模塊分析
FPGA內(nèi)置多個(gè)功能部件,主要包括雷達(dá)信號(hào)采集控制模塊與PCI接口邏輯模塊。FPGA內(nèi)部功能組成原理圖如圖3所示。
FPGA作為系統(tǒng)總的控制樞紐,參與了系統(tǒng)具體任務(wù)的實(shí)現(xiàn)。內(nèi)部功能模塊的工作過(guò)程為:首先采集控制模塊通過(guò)對(duì)AD轉(zhuǎn)換電路的時(shí)序控制將雷達(dá)視頻信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)并暫存于FPGA內(nèi)部雙口RAM中,然后再將雙口RAM中的數(shù)據(jù)通過(guò)PCI接口邏輯模塊送往計(jì)算機(jī)。
3.1.2 采集控制模塊程序設(shè)計(jì)
本系統(tǒng)要求能夠在普通顯示器上對(duì)采集的雷達(dá)視頻回波信號(hào)進(jìn)行長(zhǎng)時(shí)間的實(shí)時(shí)顯示。同時(shí)在顯示過(guò)程中,可對(duì)任意區(qū)域設(shè)置采集方位和距離波門(mén),將采集的數(shù)據(jù)實(shí)時(shí)存儲(chǔ)在磁盤(pán)陣列上。系統(tǒng)工作流程如圖4所示。
采集卡與計(jì)算機(jī)之間的數(shù)據(jù)交換以FPGA內(nèi)部配置的高速雙口RAM作為數(shù)據(jù)傳輸?shù)木彌_器,采用兩片雙口RAM乒乓切換的方式進(jìn)行數(shù)據(jù)傳輸[3]。具體方法為:在FGPA內(nèi)部配置兩片8K×32bits的雙口RAM,采集開(kāi)始時(shí),將采集數(shù)據(jù)往第一片雙口RAM中寫(xiě),當(dāng)?shù)谝黄p口RAM寫(xiě)滿(mǎn)時(shí),采集控制模塊產(chǎn)生乒乓切換信號(hào),數(shù)據(jù)自動(dòng)存入第二片雙口RAM中,同時(shí)以DMA方式將第一片雙口RAM中的采集數(shù)據(jù)傳送給計(jì)算機(jī),如此輪換交替。這樣DMA傳輸和接收A/D數(shù)據(jù)可以同時(shí)進(jìn)行,而DMA的速率遠(yuǎn)大于A/D采集速率,從而有效地避免數(shù)據(jù)丟失。
3.1.3 PCI接口邏輯模塊程序設(shè)計(jì)
為了實(shí)現(xiàn)PCI總線(xiàn)各控制信號(hào)間的時(shí)序關(guān)系,可以根據(jù)具體的交易設(shè)計(jì)相應(yīng)的狀態(tài)機(jī)。以目標(biāo)設(shè)備I/O寫(xiě)為例:當(dāng)幀有效信號(hào)(FRAME#)有效(低電平)時(shí)標(biāo)志著一次交易的開(kāi)始,C/BE#[3:0]為“0011”表明此交易為I/O寫(xiě),同時(shí)AD[63:0]上的數(shù)據(jù)為此次交易的I/O地址。如果此I/O地址與設(shè)備配置寄存器中I/O基地址寄存器(Base Address Register)的值相同,目標(biāo)設(shè)備通過(guò)使DESEL#有效來(lái)聲時(shí)這次交易。作為主設(shè)備,在FRAME#、I/O地址和C/BE#有效后在AD[63:0]上驅(qū)動(dòng)要傳輸?shù)臄?shù)據(jù)、在C/BE#上驅(qū)動(dòng)字節(jié)使能、同時(shí)使能目標(biāo)準(zhǔn)備好信號(hào)IRDY#,直到檢測(cè)到目標(biāo)設(shè)備有效的DRDY#信號(hào),此次交易中的主設(shè)備和目標(biāo)設(shè)備停止驅(qū)動(dòng)各種信號(hào)。而目標(biāo)設(shè)備在準(zhǔn)備好接收數(shù)據(jù)后就可以使能DRDY#,此后目標(biāo)設(shè)備檢測(cè)到IRDY#時(shí)可以根據(jù)具體的字節(jié)使能C/BE#[3:0]將AD[63:0]總線(xiàn)上的數(shù)據(jù)進(jìn)行鎖存,從而完成整個(gè)交易[4]。此交易的狀態(tài)圖如圖5所示。
本系統(tǒng)利用VHDL編程在FPGA中實(shí)現(xiàn)了64位/66MHz的PCI接口邏輯,其中實(shí)現(xiàn)的功能包括:配置空間讀寫(xiě)、目標(biāo)設(shè)備I/O映射與內(nèi)存映射端口讀寫(xiě)和主設(shè)備DMA控制。實(shí)際調(diào)試中,DMA傳輸?shù)乃矔r(shí)傳輸速率可達(dá)132Mbps,其連續(xù)傳輸速率也可達(dá)100 Mbps。
3.3 驅(qū)動(dòng)程序設(shè)計(jì)
3.2.1 DriverWorks生成驅(qū)動(dòng)程序框架
NuMega公司的Driver Studio是一套為簡(jiǎn)化Windows應(yīng)用程序和設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)、調(diào)試及測(cè)試工具包。其中有WDM和WINNT的驅(qū)動(dòng)程序開(kāi)發(fā)軟件DriverWin9X(Windows95和Windows98)的虛擬設(shè)備驅(qū)動(dòng)程序(VxD)的VtoolsD。
DriverWorks以面向?qū)ο螅∣OP)的方式,將編寫(xiě)WDM及WINNT驅(qū)動(dòng)程序所需的對(duì)內(nèi)核模式訪(fǎng)問(wèn)及硬件的訪(fǎng)問(wèn)封裝成類(lèi)。DriverWorks是基于VC++的,它生成標(biāo)準(zhǔn)的VC工程,只要將所建的工程在VC下編譯,就可以生成最終的設(shè)備驅(qū)動(dòng)程序。
3.2.2 VC++二次開(kāi)發(fā)設(shè)備驅(qū)動(dòng)程序
DriverWorks向?qū)闪藘蓚€(gè)類(lèi):一個(gè)是設(shè)備驅(qū)動(dòng)程序類(lèi),另一個(gè)是設(shè)備對(duì)象類(lèi)。驅(qū)動(dòng)程序類(lèi)主要完成WDM的DriverEntry和AddDevice例程。設(shè)備對(duì)象類(lèi)就是與硬件對(duì)應(yīng)的功能設(shè)備對(duì)象(FDO)類(lèi),與硬件交互的例程都是針對(duì)此類(lèi)的。
DriverWorks生成驅(qū)動(dòng)程序框架,根據(jù)具體功能,用戶(hù)還需在VC++工程下添加自己的代碼。常用的功能有:IO映射端口訪(fǎng)問(wèn)、內(nèi)存映射端口訪(fǎng)問(wèn)和中斷處理。DriverWorks將編寫(xiě)WDM驅(qū)動(dòng)程序所需的對(duì)內(nèi)核模式訪(fǎng)問(wèn)及硬件的訪(fǎng)問(wèn)封裝成類(lèi),其中,KpciConfiguration類(lèi)用于實(shí)現(xiàn)對(duì)PCI設(shè)備配置空間的訪(fǎng)問(wèn),KioRange類(lèi)用于實(shí)現(xiàn)對(duì)I/O映射端口的訪(fǎng)問(wèn),KmemoryRange類(lèi)用于實(shí)現(xiàn)對(duì)內(nèi)存映射端口的訪(fǎng)問(wèn),KdmaAdapter、KdmaTransfer和KcommonDmaBuffer類(lèi)用于實(shí)現(xiàn)DMA操作,Kinterrupt類(lèi)用于實(shí)現(xiàn)中斷處理操作。
3.3 應(yīng)用程序設(shè)計(jì)
3.3.1 應(yīng)用程序與驅(qū)動(dòng)程序之間的通信
在Windows中,應(yīng)用程序?qū)崿F(xiàn)與WDM通信的過(guò)程是:應(yīng)用程序先用CreateFile函數(shù)打開(kāi)設(shè)備,然后用DeviclIoControl與WDM兩種情況,當(dāng)應(yīng)用程序退出時(shí),用CloseHandle關(guān)閉設(shè)備。
驅(qū)動(dòng)程序有時(shí)需要主動(dòng)通知上層應(yīng)用程序執(zhí)行某個(gè)操作,以實(shí)現(xiàn)硬件響應(yīng)的實(shí)時(shí)性。這可以通過(guò)在應(yīng)用程序中創(chuàng)建一個(gè)事件,將該事件句柄放入輸入緩沖區(qū)中,通過(guò)函數(shù)DeviceIoControl傳給驅(qū)動(dòng)程序,并創(chuàng)建一個(gè)線(xiàn)程來(lái)守候該事件被激活。
3.3.2用戶(hù)界面程序設(shè)計(jì)
用戶(hù)程序主要完成雷達(dá)視頻信號(hào)的采集參數(shù)設(shè)置、采集數(shù)據(jù)的實(shí)時(shí)顯示和實(shí)時(shí)存盤(pán)。采集工作過(guò)程如下:首先通過(guò)用戶(hù)程序?qū)Σ杉瘏?shù)進(jìn)行設(shè)置并通過(guò)計(jì)算機(jī)PCI接口發(fā)往PCI卡的FPGA中,F(xiàn)PGA則根據(jù)這些參數(shù)控制雷達(dá)視頻信號(hào)的采集;然后用戶(hù)可以點(diǎn)擊“開(kāi)始”按鈕啟動(dòng)采集過(guò)程,可以在P顯和A顯坐標(biāo)下觀察采集的目標(biāo)回波信號(hào),同時(shí)將采集的雷達(dá)回波數(shù)據(jù)以二進(jìn)制格式實(shí)時(shí)保存在磁盤(pán)陣列上,供Matlab等軟件進(jìn)一步分析使用。
目前,本系統(tǒng)已對(duì)某型艦載警戒搜索雷達(dá)成功地進(jìn)行了實(shí)際外場(chǎng)數(shù)據(jù)采集。圖6為P顯和A顯坐標(biāo)下采集到的真實(shí)雷達(dá)視頻回波信號(hào)。實(shí)驗(yàn)表明這個(gè)系統(tǒng)完全滿(mǎn)足所提出的指標(biāo)要求,能夠做到大容量高速連續(xù)采集,且穩(wěn)定可靠,測(cè)得的數(shù)據(jù)能夠真實(shí)地反映目標(biāo)與環(huán)境的特性,可用于檢驗(yàn)各種目標(biāo)檢測(cè)、識(shí)別、跟蹤算法。
本系統(tǒng)可用于超高速雷達(dá)信號(hào)處理機(jī)中,利用大容量FPGA可直接對(duì)AD轉(zhuǎn)換后的雷達(dá)中頻信號(hào)進(jìn)行高速實(shí)時(shí)處理,處理結(jié)果可通過(guò)PCI總線(xiàn)高速傳輸?shù)接?jì)算機(jī)內(nèi)存中,同時(shí)利用高速、大容量磁盤(pán)陣列進(jìn)行實(shí)時(shí)的海量數(shù)據(jù)存盤(pán)。
評(píng)論