董海蘭 康懷祺 鐘 午
(電子科技大學 成都 611731)
由于實時觀測的要求和外場試驗環境復雜性的限制,在現代科學實驗和高速實時儀器的開發中,探測器前端和存儲模塊常常需要將大量數據高速傳輸到PC機端進行實時觀測或者數據轉存。因此,大部分高速采集系統和存儲系統都需要設計相應的數據傳輸模塊[1~7]。同時,隨著采樣技術和存儲技術的飛速發展,日益增長的數據量也對數據傳輸速率提出了更高的要求。高速數據傳輸模塊的單獨開發使得這些大型系統的開發周期變長,開發難度加大。采用高速、通用的數據傳輸系統可以有效地縮短它們的開發周期,同時也可以降低其開發難度。考慮到千兆以太網接口以及高速光纖接口板間高速通信中應用廣泛[8~10],同時32位的PCI接口也能很好地兼容大部分普通的PC機,本文設計了一個基于FPGA的多接口高速PCI傳輸系統。它具有千兆以太網接口、高速光纖接口以及32位PCI接口,可以將前端探測器和存儲芯片的數據通過千兆以太網或者光纖接口傳入,再由PCI接口高速傳輸到PC機端。通過PCI設備驅動的開發,PCI接口的數據可以通過DMA(Direct Memory Access,直接內存存取)傳輸方式,高速地傳輸到PC機。通過大量數據傳輸的測試,整個傳輸系統能夠以102 MB/s的速度穩定、無丟失地將數據傳輸到PC機端中。傳輸系統具有接口通用、接口間連接靈活、數據傳輸速率高等優點,可以推廣應用于各種大型的采集系統和存儲系統,能夠有效降低這些系統大型系統的開發難度、縮短其開發周期,具有很高的工程應用價值。
整個傳輸系統主要分為PCI板卡和PCI驅動兩個部分。PCI板卡主要包括千兆以太網接口、光纖接口、PCI接口以及控制模塊。千兆以太網接口、光纖接口以及PCI接口模塊主要是各個接口的硬件實現;控制模塊是整個系統的核心,在FPGA中編程實現,主要包括千兆以太網控制器、光纖控制器、PCI控制器以及速度轉換FIFO,如圖1所示。采用Xilinx公司的Virtex-4 LX25作為主控的FPGA芯片,實現了板卡的控制模塊。
2.1.1 千兆以太網接口
作為一種成熟的高速傳輸方案,千兆以太網技術具有傳輸速度快、穩定性高、接口簡單,傳輸距離遠,已經成為目前局域網的主流解決方案,同時也是高速電路開發中的通用接口之一[6~9]。
千兆以太網接口實現的關鍵在于千兆以太網物理層和MAC控制器的實現,它們分別對應著TCP/IP協議中的物理層和數據鏈路層。本文中千兆以太網的物理層采用Marvell公司生產的88E1111芯片實現,負責MAC控制器和雙絞線接口RJ45的通信。MAC控制器則主要根據IEEE 802.3協議中的以太網幀協議,利用FPGA編程實現。

圖1 PCI傳輸系統構成
2.1.2 光纖接口
光纖通信具有抗干擾性強、傳輸距離遠、易集成以及傳輸速率高等優點,在目前的高速數字通信系統中被廣泛采用[10]。典型的光纖模塊主要由光收發器件和高速 SerDes(Serializer/Deserializer,串/并行器)器件組成,其中光收發器件主要實現光電信號轉換以及數據收發,而高速SerDes器件則主要負責將光收發器件傳出的高速串行信號轉換成并行數據或者將并行數據轉換成高速串行信號發送到光收發器件。
設計采用Infineon公司的光纖產品V23818-M305-L57作為系統的光收發器件,其具有體積小、接口通用、功耗低、傳輸速率高(支持1.0625Gbps到2.125Gbps串行傳輸速率)等優點,是光收發模塊的理想選擇之一。TI公司生產的高速收發器TLK2501支持1.5Gbps到2.5Gbps的串行傳輸速率,片內8B/10B編解碼和全雙工工作模式,可以很好地兼容V23818-M305-L57接口,所以選用其作為系統的高速SerDes器件。
2.1.3 PCI接口
PCI總線是微機中處理器/存儲器與外圍部件、擴展接口之間的連接總線,能夠滿足工業和實時通信應用的高速、穩定、可靠、易于使用和維護等要求,自問世以來就迅速成為了開放性的工業計算機標準。考慮到大多數PC端PCI插槽為32位,同時64位PCI插槽也支持32位PCI接口,系統的PCI接口選用32位的PCI接口,可以有效的提高接口的通用性。為了減少開發時間,系統采用PLX公司生產的專用PCI接口芯片PCI9656作為PCI板卡和PC機PCI總線之間的橋接芯片。PCI9656采用數據流水線架構技術,可以提供32位/33MHz、32位/66MHz以及64位/66MHz的局域總線連接模式,具有靈活的連接性和高性能的I/O加速器特性,可以很好地實現高性能PCI接口。
2.2.1 千兆以太網控制器
千兆以太網控制器主要包括MAC核、幀封裝模塊以及幀解封模塊,在FPGA中實現,如圖2所示。MAC核主要實現協調PHY芯片、地址過濾、數據校驗等功能;幀封裝模塊接收從FIFO的發送數據,然后依據以太網協議,加入前導碼、定界符、目的地址、源地址等幀頭信息封裝成幀格式,通過MAC核發送給PHY芯片;幀解封模塊是幀封裝模塊的逆過程,接收從MAC核接收到的數據,去掉協議中的幀頭,將其中的數據部分提取出來,通過FIFO發送給PCI控制器。

圖2 MAC控制器框圖
2.2.2 光纖控制器

圖3 光纖控制器連接示意圖
光纖控制模塊實現 SerDes芯片TLK2501與FIFO之間的數據通信,分為接收和發送兩部分,如圖3所示。接收部分通過判斷接收有效信號(RXDV)以及接收錯誤標志(RX-ER)來判斷接收到的數據是否有效,若RX-DV為高,而RX-ER為低,則表示數據有效,應接收TLK2501發送的有效數據(RXD),然后通過FIFO速率轉換后發送給PCI控制器。發送部分接收FIFO的數據及數據使能信號,把數據使能信號通過寄存器賦給發送有效信號(TX-EN),此時發送錯誤標志(TX-ER)可置低電平,通過 TLK2501則可以向光纖接口發送有效數據。
2.2.3 PCI控制器
PCI控制器依據PCI9656從模式或者DMA工作模式下時序圖,在FPGA中采用狀態機設計方式來實現,狀態機跳轉如圖4所示。其中 ADS#、BLAST#及 WAIT#由 PCI9656驅動,DataEn#和FIFOEn#則由控制器驅動。初始化情況下,控制器處于空閑狀態。當PC機發起任務時,PCI9656將會給ADS#信號一個低電平脈沖,這時候控制器將會根據LW/R的值進入讀操作或者寫操作。正常情況下,讀/寫操作一直進行到PCI9656向BLAST#輸出一個低電平脈沖。如果在讀/寫過程中,本地端的FIFO為空或FIFO寫滿,狀態機將會跳轉到本地讀忙狀態或本地寫忙狀態,直到FIFO再次準備就緒。同時,如果PCI9656處于忙狀態,它將置低WAIT#信號,PCI控制器將會進入PCI9656忙狀態,暫停任務直到PCI9656再次準備就緒,并置高WAIT#信號。

圖4 PCI控制器狀態機示意圖
2.2.4 速率轉換FIFO
由于系統接口的數據傳輸速率并不一致,為了保證數據在接口間傳輸時不出現數據丟失,在數據傳輸過程中采用握手機制保證數據的完整性。在FPGA中例化了一個接收FIFO和一個發送FIFO來實現。當接收FIFO接近滿容量時,向千兆以太網接口和光纖接口發送傳輸暫停指令,數據發送的前端在收到傳輸暫停指令后,暫停發送數據。此時PCI控制器依然繼續接收數據,當接收FIFO中的數據小于半容量時,發送繼續傳輸指令,恢復數據傳輸。發送FIFO接收PCI控制器發送的開始傳輸指令以及判斷接收FIFO產生的暫停指令、恢復傳輸指令,而千兆以太網控制器和光纖控制器接收到這三個指令后執行發送數據、暫停發送數據、繼續發送數據操作。通過這樣嚴格的數據傳輸握手機制的加入,可以保證整個傳輸系統數據傳輸的完整性。
2.2.5 PCI驅動模塊
WDK(Windows Driver Kit)開發的驅動程序與其他開發工具開發相比,具有代碼非常簡潔、結構清晰、執行效率高,能更好地提高DMA傳輸性能等優點。PCI設備驅動程序利用C++和WDK開發的WDM(Windows Driver Model)驅動程序,它可以根據不同的操作系統,生成相應的驅動文件。驅動支持的操作系統有 Windows sever 2003/2008,Windows XP以及 Windows 7系統,具有很好的通用性[11]。PCI設備驅動流程圖如圖5所示。

圖5 驅動流程圖
內核驅動在接收到用戶模式下的DeviceIOControl的IRP請求之后,啟動DMA任務傳輸,同時開啟1s定時器。如果在1s之內,驅動成功地從PCI板卡讀取到預定的數據量,驅動程序將向應用程序返回正確結果。否則,在1s結束時,向應用程序返回實際從板卡上讀取的數據量。
對于數據傳輸系統來說,數據傳輸的正確性和完整性是系統應用的前提和保障。為了測試系統傳輸數據的正確性和完整性,利用MATLAB生成了一個255個點的正弦波形,然后將這些數據分別從光纖接口和以太網接口循環向傳輸系統發送。在PC端,利用VC++編寫的應用程序調用PCI設備驅動接收板卡發送過來的數據,同時與之前生成的正弦波形點進行循環比對,從而測試接收數據的正確性和完整性。通過大量數據傳輸的測試,整個傳輸系統由于傳輸鏈路中握手機制的加入,并沒有出現數據錯誤或者丟失的情況,可以很好地保證傳輸數據的正確性和完整性。
圖6所示為應用程序端接收到的波形圖,測試環境為:32位/33MHz插槽,E5800(3.2GHz)處理器,2GB物理內存。從圖中可以看到,接收到的數據在界面上具有很好的正弦波形,沒有出現數據丟失或者錯位的情況。

圖6 應用程序接收到波形示意圖
數據傳輸速度是傳輸系統能否滿足各種高速數據傳輸應用的重要指標。為此,在測試階段,分別測試了光纖接口與PCI接口之間鏈路,千兆以太網接口與PCI接口之間鏈路的傳輸速度。在37min的測試時間內,PC端分別接收到從千兆以太網接口和光纖接口傳入超過220 GB的數據。為了測試鏈路的傳輸速度,應用程序1min記錄抽取記錄四次DMA傳輸所需的時間。由于每次DMA傳輸的數據量為32MB,再除以每次DMA傳輸的時間就可以得到鏈路的傳輸速度。
圖7所示為傳輸系統兩個傳輸鏈路之間的傳輸速度測試結果。從圖中可以看出,系統的傳輸速度在整個測試期間基本上穩定在102MB/s。

圖7 系統傳輸速度測試結果
本文設計了一個基于FPGA的多接口高速PCI傳輸系統,具有32位PCI接口、千兆以太網接口以及高速光纖接口這三種通用的接口,可以以102MB/s的速度將前端探測器或者存儲器的數據無丟失地傳輸到PC端。系統的邏輯控制采用FPGA編程實現,具有很高的靈活性,同時傳輸速率也能滿足大部分高速數據傳輸的要求,可以推廣應用于軍事、工業以及科研實驗等領域各種數據傳輸的應用,具有很高的實際應用價值。
[1]劉鑫,王涌天,劉越.基于DSP的紅外標志點實時跟蹤方法研究[J].儀器儀表學報,2010,31(12):2654-2659.
[2]郭永彩,蘇渝維,高潮.基于FPGA的紅外圖像實時采集系統設計與實現[J].儀器儀表學報,2010,32(3):514-519.
[3]葛起翔.基于PCI總線的高速雷達數據采集回放系統的研制[D].南京:南京信息工程大學,2007.
[4]秦瑩瑩,郭喜慶,劉偉.基于PCI和FPGA的轉臺檢測系統[J].儀表技術與傳感器,2011(3):74-76.
[5]徐江豐,張 涌,湯心溢,王世勇.基于Wishbone-PCI Bridge核的紅外圖像高速采集系統[J].紅外與激光工程,2006,35(6):713-716.
[6]馬騰飛,高世杰,吳志勇.基于千兆以太網的圖像采集系統設計[J].微型機與應用,2010,29(9):72-74.
[7]曹書華.基于千兆以太網的雷達數據高速采集與傳輸技術[D].南京:南京信息工程大學,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的多路數字視頻光纖傳輸系統的研究與設計[D].上海:華東師范大學,2009.
[11]張帆,史彩成等.Windows驅動開發技術詳解[M].北京:電子工業出版社,2008.