董海蘭 康懷祺 鐘 午
(電子科技大學(xué) 成都 611731)
由于實(shí)時(shí)觀測(cè)的要求和外場(chǎng)試驗(yàn)環(huán)境復(fù)雜性的限制,在現(xiàn)代科學(xué)實(shí)驗(yàn)和高速實(shí)時(shí)儀器的開(kāi)發(fā)中,探測(cè)器前端和存儲(chǔ)模塊常常需要將大量數(shù)據(jù)高速傳輸?shù)絇C機(jī)端進(jìn)行實(shí)時(shí)觀測(cè)或者數(shù)據(jù)轉(zhuǎn)存。因此,大部分高速采集系統(tǒng)和存儲(chǔ)系統(tǒng)都需要設(shè)計(jì)相應(yīng)的數(shù)據(jù)傳輸模塊[1~7]。同時(shí),隨著采樣技術(shù)和存儲(chǔ)技術(shù)的飛速發(fā)展,日益增長(zhǎng)的數(shù)據(jù)量也對(duì)數(shù)據(jù)傳輸速率提出了更高的要求。高速數(shù)據(jù)傳輸模塊的單獨(dú)開(kāi)發(fā)使得這些大型系統(tǒng)的開(kāi)發(fā)周期變長(zhǎng),開(kāi)發(fā)難度加大。采用高速、通用的數(shù)據(jù)傳輸系統(tǒng)可以有效地縮短它們的開(kāi)發(fā)周期,同時(shí)也可以降低其開(kāi)發(fā)難度??紤]到千兆以太網(wǎng)接口以及高速光纖接口板間高速通信中應(yīng)用廣泛[8~10],同時(shí)32位的PCI接口也能很好地兼容大部分普通的PC機(jī),本文設(shè)計(jì)了一個(gè)基于FPGA的多接口高速PCI傳輸系統(tǒng)。它具有千兆以太網(wǎng)接口、高速光纖接口以及32位PCI接口,可以將前端探測(cè)器和存儲(chǔ)芯片的數(shù)據(jù)通過(guò)千兆以太網(wǎng)或者光纖接口傳入,再由PCI接口高速傳輸?shù)絇C機(jī)端。通過(guò)PCI設(shè)備驅(qū)動(dòng)的開(kāi)發(fā),PCI接口的數(shù)據(jù)可以通過(guò)DMA(Direct Memory Access,直接內(nèi)存存取)傳輸方式,高速地傳輸?shù)絇C機(jī)。通過(guò)大量數(shù)據(jù)傳輸?shù)臏y(cè)試,整個(gè)傳輸系統(tǒng)能夠以102 MB/s的速度穩(wěn)定、無(wú)丟失地將數(shù)據(jù)傳輸?shù)絇C機(jī)端中。傳輸系統(tǒng)具有接口通用、接口間連接靈活、數(shù)據(jù)傳輸速率高等優(yōu)點(diǎn),可以推廣應(yīng)用于各種大型的采集系統(tǒng)和存儲(chǔ)系統(tǒng),能夠有效降低這些系統(tǒng)大型系統(tǒng)的開(kāi)發(fā)難度、縮短其開(kāi)發(fā)周期,具有很高的工程應(yīng)用價(jià)值。
整個(gè)傳輸系統(tǒng)主要分為PCI板卡和PCI驅(qū)動(dòng)兩個(gè)部分。PCI板卡主要包括千兆以太網(wǎng)接口、光纖接口、PCI接口以及控制模塊。千兆以太網(wǎng)接口、光纖接口以及PCI接口模塊主要是各個(gè)接口的硬件實(shí)現(xiàn);控制模塊是整個(gè)系統(tǒng)的核心,在FPGA中編程實(shí)現(xiàn),主要包括千兆以太網(wǎng)控制器、光纖控制器、PCI控制器以及速度轉(zhuǎn)換FIFO,如圖1所示。采用Xilinx公司的Virtex-4 LX25作為主控的FPGA芯片,實(shí)現(xiàn)了板卡的控制模塊。
2.1.1 千兆以太網(wǎng)接口
作為一種成熟的高速傳輸方案,千兆以太網(wǎng)技術(shù)具有傳輸速度快、穩(wěn)定性高、接口簡(jiǎn)單,傳輸距離遠(yuǎn),已經(jīng)成為目前局域網(wǎng)的主流解決方案,同時(shí)也是高速電路開(kāi)發(fā)中的通用接口之一[6~9]。
千兆以太網(wǎng)接口實(shí)現(xiàn)的關(guān)鍵在于千兆以太網(wǎng)物理層和MAC控制器的實(shí)現(xiàn),它們分別對(duì)應(yīng)著TCP/IP協(xié)議中的物理層和數(shù)據(jù)鏈路層。本文中千兆以太網(wǎng)的物理層采用Marvell公司生產(chǎn)的88E1111芯片實(shí)現(xiàn),負(fù)責(zé)MAC控制器和雙絞線接口RJ45的通信。MAC控制器則主要根據(jù)IEEE 802.3協(xié)議中的以太網(wǎng)幀協(xié)議,利用FPGA編程實(shí)現(xiàn)。
圖1 PCI傳輸系統(tǒng)構(gòu)成
2.1.2 光纖接口
光纖通信具有抗干擾性強(qiáng)、傳輸距離遠(yuǎn)、易集成以及傳輸速率高等優(yōu)點(diǎn),在目前的高速數(shù)字通信系統(tǒng)中被廣泛采用[10]。典型的光纖模塊主要由光收發(fā)器件和高速 SerDes(Serializer/Deserializer,串/并行器)器件組成,其中光收發(fā)器件主要實(shí)現(xiàn)光電信號(hào)轉(zhuǎn)換以及數(shù)據(jù)收發(fā),而高速SerDes器件則主要負(fù)責(zé)將光收發(fā)器件傳出的高速串行信號(hào)轉(zhuǎn)換成并行數(shù)據(jù)或者將并行數(shù)據(jù)轉(zhuǎn)換成高速串行信號(hào)發(fā)送到光收發(fā)器件。
設(shè)計(jì)采用Infineon公司的光纖產(chǎn)品V23818-M305-L57作為系統(tǒng)的光收發(fā)器件,其具有體積小、接口通用、功耗低、傳輸速率高(支持1.0625Gbps到2.125Gbps串行傳輸速率)等優(yōu)點(diǎn),是光收發(fā)模塊的理想選擇之一。TI公司生產(chǎn)的高速收發(fā)器TLK2501支持1.5Gbps到2.5Gbps的串行傳輸速率,片內(nèi)8B/10B編解碼和全雙工工作模式,可以很好地兼容V23818-M305-L57接口,所以選用其作為系統(tǒng)的高速SerDes器件。
2.1.3 PCI接口
PCI總線是微機(jī)中處理器/存儲(chǔ)器與外圍部件、擴(kuò)展接口之間的連接總線,能夠滿足工業(yè)和實(shí)時(shí)通信應(yīng)用的高速、穩(wěn)定、可靠、易于使用和維護(hù)等要求,自問(wèn)世以來(lái)就迅速成為了開(kāi)放性的工業(yè)計(jì)算機(jī)標(biāo)準(zhǔn)。考慮到大多數(shù)PC端PCI插槽為32位,同時(shí)64位PCI插槽也支持32位PCI接口,系統(tǒng)的PCI接口選用32位的PCI接口,可以有效的提高接口的通用性。為了減少開(kāi)發(fā)時(shí)間,系統(tǒng)采用PLX公司生產(chǎn)的專(zhuān)用PCI接口芯片PCI9656作為PCI板卡和PC機(jī)PCI總線之間的橋接芯片。PCI9656采用數(shù)據(jù)流水線架構(gòu)技術(shù),可以提供32位/33MHz、32位/66MHz以及64位/66MHz的局域總線連接模式,具有靈活的連接性和高性能的I/O加速器特性,可以很好地實(shí)現(xiàn)高性能PCI接口。
2.2.1 千兆以太網(wǎng)控制器
千兆以太網(wǎng)控制器主要包括MAC核、幀封裝模塊以及幀解封模塊,在FPGA中實(shí)現(xiàn),如圖2所示。MAC核主要實(shí)現(xiàn)協(xié)調(diào)PHY芯片、地址過(guò)濾、數(shù)據(jù)校驗(yàn)等功能;幀封裝模塊接收從FIFO的發(fā)送數(shù)據(jù),然后依據(jù)以太網(wǎng)協(xié)議,加入前導(dǎo)碼、定界符、目的地址、源地址等幀頭信息封裝成幀格式,通過(guò)MAC核發(fā)送給PHY芯片;幀解封模塊是幀封裝模塊的逆過(guò)程,接收從MAC核接收到的數(shù)據(jù),去掉協(xié)議中的幀頭,將其中的數(shù)據(jù)部分提取出來(lái),通過(guò)FIFO發(fā)送給PCI控制器。
圖2 MAC控制器框圖
2.2.2 光纖控制器
圖3 光纖控制器連接示意圖
光纖控制模塊實(shí)現(xiàn) SerDes芯片TLK2501與FIFO之間的數(shù)據(jù)通信,分為接收和發(fā)送兩部分,如圖3所示。接收部分通過(guò)判斷接收有效信號(hào)(RXDV)以及接收錯(cuò)誤標(biāo)志(RX-ER)來(lái)判斷接收到的數(shù)據(jù)是否有效,若RX-DV為高,而RX-ER為低,則表示數(shù)據(jù)有效,應(yīng)接收TLK2501發(fā)送的有效數(shù)據(jù)(RXD),然后通過(guò)FIFO速率轉(zhuǎn)換后發(fā)送給PCI控制器。發(fā)送部分接收FIFO的數(shù)據(jù)及數(shù)據(jù)使能信號(hào),把數(shù)據(jù)使能信號(hào)通過(guò)寄存器賦給發(fā)送有效信號(hào)(TX-EN),此時(shí)發(fā)送錯(cuò)誤標(biāo)志(TX-ER)可置低電平,通過(guò) TLK2501則可以向光纖接口發(fā)送有效數(shù)據(jù)。
2.2.3 PCI控制器
PCI控制器依據(jù)PCI9656從模式或者DMA工作模式下時(shí)序圖,在FPGA中采用狀態(tài)機(jī)設(shè)計(jì)方式來(lái)實(shí)現(xiàn),狀態(tài)機(jī)跳轉(zhuǎn)如圖4所示。其中 ADS#、BLAST#及 WAIT#由 PCI9656驅(qū)動(dòng),DataEn#和FIFOEn#則由控制器驅(qū)動(dòng)。初始化情況下,控制器處于空閑狀態(tài)。當(dāng)PC機(jī)發(fā)起任務(wù)時(shí),PCI9656將會(huì)給ADS#信號(hào)一個(gè)低電平脈沖,這時(shí)候控制器將會(huì)根據(jù)LW/R的值進(jìn)入讀操作或者寫(xiě)操作。正常情況下,讀/寫(xiě)操作一直進(jìn)行到PCI9656向BLAST#輸出一個(gè)低電平脈沖。如果在讀/寫(xiě)過(guò)程中,本地端的FIFO為空或FIFO寫(xiě)滿,狀態(tài)機(jī)將會(huì)跳轉(zhuǎn)到本地讀忙狀態(tài)或本地寫(xiě)忙狀態(tài),直到FIFO再次準(zhǔn)備就緒。同時(shí),如果PCI9656處于忙狀態(tài),它將置低WAIT#信號(hào),PCI控制器將會(huì)進(jìn)入PCI9656忙狀態(tài),暫停任務(wù)直到PCI9656再次準(zhǔn)備就緒,并置高WAIT#信號(hào)。
圖4 PCI控制器狀態(tài)機(jī)示意圖
2.2.4 速率轉(zhuǎn)換FIFO
由于系統(tǒng)接口的數(shù)據(jù)傳輸速率并不一致,為了保證數(shù)據(jù)在接口間傳輸時(shí)不出現(xiàn)數(shù)據(jù)丟失,在數(shù)據(jù)傳輸過(guò)程中采用握手機(jī)制保證數(shù)據(jù)的完整性。在FPGA中例化了一個(gè)接收FIFO和一個(gè)發(fā)送FIFO來(lái)實(shí)現(xiàn)。當(dāng)接收FIFO接近滿容量時(shí),向千兆以太網(wǎng)接口和光纖接口發(fā)送傳輸暫停指令,數(shù)據(jù)發(fā)送的前端在收到傳輸暫停指令后,暫停發(fā)送數(shù)據(jù)。此時(shí)PCI控制器依然繼續(xù)接收數(shù)據(jù),當(dāng)接收FIFO中的數(shù)據(jù)小于半容量時(shí),發(fā)送繼續(xù)傳輸指令,恢復(fù)數(shù)據(jù)傳輸。發(fā)送FIFO接收PCI控制器發(fā)送的開(kāi)始傳輸指令以及判斷接收FIFO產(chǎn)生的暫停指令、恢復(fù)傳輸指令,而千兆以太網(wǎng)控制器和光纖控制器接收到這三個(gè)指令后執(zhí)行發(fā)送數(shù)據(jù)、暫停發(fā)送數(shù)據(jù)、繼續(xù)發(fā)送數(shù)據(jù)操作。通過(guò)這樣嚴(yán)格的數(shù)據(jù)傳輸握手機(jī)制的加入,可以保證整個(gè)傳輸系統(tǒng)數(shù)據(jù)傳輸?shù)耐暾浴?/p>
2.2.5 PCI驅(qū)動(dòng)模塊
WDK(Windows Driver Kit)開(kāi)發(fā)的驅(qū)動(dòng)程序與其他開(kāi)發(fā)工具開(kāi)發(fā)相比,具有代碼非常簡(jiǎn)潔、結(jié)構(gòu)清晰、執(zhí)行效率高,能更好地提高DMA傳輸性能等優(yōu)點(diǎn)。PCI設(shè)備驅(qū)動(dòng)程序利用C++和WDK開(kāi)發(fā)的WDM(Windows Driver Model)驅(qū)動(dòng)程序,它可以根據(jù)不同的操作系統(tǒng),生成相應(yīng)的驅(qū)動(dòng)文件。驅(qū)動(dòng)支持的操作系統(tǒng)有 Windows sever 2003/2008,Windows XP以及 Windows 7系統(tǒng),具有很好的通用性[11]。PCI設(shè)備驅(qū)動(dòng)流程圖如圖5所示。
圖5 驅(qū)動(dòng)流程圖
內(nèi)核驅(qū)動(dòng)在接收到用戶模式下的DeviceIOControl的IRP請(qǐng)求之后,啟動(dòng)DMA任務(wù)傳輸,同時(shí)開(kāi)啟1s定時(shí)器。如果在1s之內(nèi),驅(qū)動(dòng)成功地從PCI板卡讀取到預(yù)定的數(shù)據(jù)量,驅(qū)動(dòng)程序?qū)⑾驊?yīng)用程序返回正確結(jié)果。否則,在1s結(jié)束時(shí),向應(yīng)用程序返回實(shí)際從板卡上讀取的數(shù)據(jù)量。
對(duì)于數(shù)據(jù)傳輸系統(tǒng)來(lái)說(shuō),數(shù)據(jù)傳輸?shù)恼_性和完整性是系統(tǒng)應(yīng)用的前提和保障。為了測(cè)試系統(tǒng)傳輸數(shù)據(jù)的正確性和完整性,利用MATLAB生成了一個(gè)255個(gè)點(diǎn)的正弦波形,然后將這些數(shù)據(jù)分別從光纖接口和以太網(wǎng)接口循環(huán)向傳輸系統(tǒng)發(fā)送。在PC端,利用VC++編寫(xiě)的應(yīng)用程序調(diào)用PCI設(shè)備驅(qū)動(dòng)接收板卡發(fā)送過(guò)來(lái)的數(shù)據(jù),同時(shí)與之前生成的正弦波形點(diǎn)進(jìn)行循環(huán)比對(duì),從而測(cè)試接收數(shù)據(jù)的正確性和完整性。通過(guò)大量數(shù)據(jù)傳輸?shù)臏y(cè)試,整個(gè)傳輸系統(tǒng)由于傳輸鏈路中握手機(jī)制的加入,并沒(méi)有出現(xiàn)數(shù)據(jù)錯(cuò)誤或者丟失的情況,可以很好地保證傳輸數(shù)據(jù)的正確性和完整性。
圖6所示為應(yīng)用程序端接收到的波形圖,測(cè)試環(huán)境為:32位/33MHz插槽,E5800(3.2GHz)處理器,2GB物理內(nèi)存。從圖中可以看到,接收到的數(shù)據(jù)在界面上具有很好的正弦波形,沒(méi)有出現(xiàn)數(shù)據(jù)丟失或者錯(cuò)位的情況。
圖6 應(yīng)用程序接收到波形示意圖
數(shù)據(jù)傳輸速度是傳輸系統(tǒng)能否滿足各種高速數(shù)據(jù)傳輸應(yīng)用的重要指標(biāo)。為此,在測(cè)試階段,分別測(cè)試了光纖接口與PCI接口之間鏈路,千兆以太網(wǎng)接口與PCI接口之間鏈路的傳輸速度。在37min的測(cè)試時(shí)間內(nèi),PC端分別接收到從千兆以太網(wǎng)接口和光纖接口傳入超過(guò)220 GB的數(shù)據(jù)。為了測(cè)試鏈路的傳輸速度,應(yīng)用程序1min記錄抽取記錄四次DMA傳輸所需的時(shí)間。由于每次DMA傳輸?shù)臄?shù)據(jù)量為32MB,再除以每次DMA傳輸?shù)臅r(shí)間就可以得到鏈路的傳輸速度。
圖7所示為傳輸系統(tǒng)兩個(gè)傳輸鏈路之間的傳輸速度測(cè)試結(jié)果。從圖中可以看出,系統(tǒng)的傳輸速度在整個(gè)測(cè)試期間基本上穩(wěn)定在102MB/s。
圖7 系統(tǒng)傳輸速度測(cè)試結(jié)果
本文設(shè)計(jì)了一個(gè)基于FPGA的多接口高速PCI傳輸系統(tǒng),具有32位PCI接口、千兆以太網(wǎng)接口以及高速光纖接口這三種通用的接口,可以以102MB/s的速度將前端探測(cè)器或者存儲(chǔ)器的數(shù)據(jù)無(wú)丟失地傳輸?shù)絇C端。系統(tǒng)的邏輯控制采用FPGA編程實(shí)現(xiàn),具有很高的靈活性,同時(shí)傳輸速率也能滿足大部分高速數(shù)據(jù)傳輸?shù)囊?,可以推廣應(yīng)用于軍事、工業(yè)以及科研實(shí)驗(yàn)等領(lǐng)域各種數(shù)據(jù)傳輸?shù)膽?yīng)用,具有很高的實(shí)際應(yīng)用價(jià)值。
[1]劉鑫,王涌天,劉越.基于DSP的紅外標(biāo)志點(diǎn)實(shí)時(shí)跟蹤方法研究[J].儀器儀表學(xué)報(bào),2010,31(12):2654-2659.
[2]郭永彩,蘇渝維,高潮.基于FPGA的紅外圖像實(shí)時(shí)采集系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].儀器儀表學(xué)報(bào),2010,32(3):514-519.
[3]葛起翔.基于PCI總線的高速雷達(dá)數(shù)據(jù)采集回放系統(tǒng)的研制[D].南京:南京信息工程大學(xué),2007.
[4]秦瑩瑩,郭喜慶,劉偉.基于PCI和FPGA的轉(zhuǎn)臺(tái)檢測(cè)系統(tǒng)[J].儀表技術(shù)與傳感器,2011(3):74-76.
[5]徐江豐,張 涌,湯心溢,王世勇.基于Wishbone-PCI Bridge核的紅外圖像高速采集系統(tǒng)[J].紅外與激光工程,2006,35(6):713-716.
[6]馬騰飛,高世杰,吳志勇.基于千兆以太網(wǎng)的圖像采集系統(tǒng)設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2010,29(9):72-74.
[7]曹書(shū)華.基于千兆以太網(wǎng)的雷達(dá)數(shù)據(jù)高速采集與傳輸技術(shù)[D].南京:南京信息工程大學(xué),2008.
[8]FRAZIER H.The 802.3z Gigabit Ethernet Standard[C].Network,IEEE,1998,3(12):6-7.
[9]UCHIDA T.Hardware-based TCP processor for gigabit ethernet[J].IEEE Transactions on Nuclear Science,2007,55(3):1631-1637.
[10]陳蘭姑.基于FPGA的多路數(shù)字視頻光纖傳輸系統(tǒng)的研究與設(shè)計(jì)[D].上海:華東師范大學(xué),2009.
[11]張帆,史彩成等.Windows驅(qū)動(dòng)開(kāi)發(fā)技術(shù)詳解[M].北京:電子工業(yè)出版社,2008.