趙柏山,王禹衡,劉佳琪
(沈陽工業大學信息科學與工程學院,沈陽110870)
面對日益增多的數據和多媒體服務,以太網的大容量、高速率、多功能模塊能夠很好地滿足市場要求[1]。隨著網絡技術的發展,絕大部分信息要通過互聯網進行傳輸,人們對于網絡的要求會更高,比如設備處理速度、傳輸速度、數據的還原度等。以太網已經在通信、控制、傳輸領域得到了廣泛應用。經過十幾年發展,10G以太網技術日漸成熟,成本也隨之降低。傳統的基于視頻壓縮的傳輸方案,雖然節省帶寬,但也增加了系統設計復雜度并且會產生傳輸延遲,不能滿足實時性的要求。采用萬兆以太網傳輸將會跳過視頻壓縮的處理,直接將攝像頭捕捉到的信號進行傳輸,這樣可降低系統處理延遲,提高處理速度,保證了視頻的實時性。
基于FPGA網絡的應用,包含傳輸層協議、網絡層協議、網絡接口層協議(MAC協議)[2]。MAC控制器作為以太網核心部分之一,主要以兩種形式存在,一種是將物理層MAC層集成為以太網卡芯片,另一種是MAC控制器獨立存在IP核。10G以太網卡產品層出不窮,2012年,Intel公司推出了基于多模光纖傳輸介質的萬兆以太網卡Intel X520-SRI以及基于RJ45傳輸的IntelX540-T2[3],這些網卡的價錢很高,達到了上千元。用FPGA實現MAC協議可以在很大程度上降低成本。
在千兆以太網中,MAC層工作在125MHz、8bit位寬中;在萬兆以太網中,MAC層工作在156.25MHz、64bit位寬。協議規定只適用于全雙工模式,MAC層不使用CSMA/CD協議[4],也就是說一個時鐘周期可以處理8字節數據,幀尾有效字節長度不等,在CRC校驗中會產生新的問題。為解決這類問題,以IEEE802.3ae定義了新的介質無關接口:10G介質無關接口 (10 Gigbbit Media Independent Interface,XGMII)[5],同時對此接口進行設計,使物理層模塊實現與FPGA的互連。
本文主要是對視頻數據封裝和解封裝進行設計。如圖1是以太網視頻傳輸整體原理框圖,視頻采集模塊FPGA通過I2C總線對攝像頭內部寄存器進行配置,滿足該攝像頭工作狀態,將采集視頻數據寫入SDRAM中進行數據緩存,選用的方法為乒乓操作[6]。當系統配置模塊配置好數據后,使能SDRAM讀信號,將緩存信號發送至UDP/IP模塊。這個過程主要是對視頻信號的采集,此后數據信號依次經過UDP/IP模塊、MAC控制器模塊,將數據流按照各層的協議打包成以太網幀格式,最后通過XGMII接口將數據發送至PHY光模塊接口,完成整個發送過程。

圖1 系統整體設計
UDP/IP協議棧設計最主要是用來完成UDP頭部和IP頭部的封裝和解封裝。選擇UDP協議(User Datagram Protocol),是因為它是非鏈接的協議,與TCP/IP[7]處理數據包的方式相比,此方案中的數據源端和終端不建立連接,這簡化了該模塊設計。攝像頭捕捉到的視頻數據經過視頻編碼器形成二進制數據碼,作為數據部分,當有數據進入UDP/IP模塊,會按照順序依次將UDP/IP頭部封裝好,然后緊接著發送視頻數據,將封裝好的數據發送到數據鏈路層,交給MAC控制器,完成以太網幀的封裝。UPD/IP協議棧結構如圖2所示。

圖2 UPD/IP 協議棧結構設計圖
如圖所示,其工作流程是:上層所發送的視頻數據,經由此協議棧封裝成所規定的數據幀格式,發送到MAC控制器模塊;當從物理層接收到數據時,會根據MAC和IP地址與本設備的匹配及頭部的校驗,來判斷是否正確,再對數據幀進行解封裝操作;最后UDP/IP協議棧輸出的數據為視頻數據。整個過程可在設計上分為發送模塊和接收模塊,各個模塊功能詳述如下:
(1)發送模塊
發送配置模塊是把目的IP地址,源IP地址,目的MAC地址,源MAC地址的值輸入到該模塊,以一個字節的周期進行數據讀取,將數據發送到幀組裝模塊;發送組裝模塊也是整個UDP/IP協議棧設計中最重要的部分,雖然發送配置模塊包含了大部分數據,但是例如IP總長度、首部校驗和數據報長度,這些數據需要在組裝模塊完成,并同時產生控制信號、數據幀開始和結束的標志位;配置好的數據將被發送到MAC數據接口模塊,MAC數據接口模塊會把8位數據轉換成64位數據發送到MAC控制器,同時還產生有效數據。數據經過發送模塊后所要形成的幀頭存儲數據如表1。
(2)接收模塊
接收模塊的工作流程是,從MAC層接收數據,經MAC數據接口模塊把64位數據轉換成8位數據,再通過數據解封裝模塊,把數據幀IP/UDP頭部去除,把視頻數據發送給用戶層進行顯示。此過程需要通過對數據進行匹配,匹配成功準確無誤后才能發送數據。協議棧整體傳輸位寬為8bit,本研究中所設計的為萬兆以太網,故此在MAC層數據,所設計位寬為64位,時鐘為156.25MHz,需要另外設計一個接口緩沖模塊(MAC接口模塊),以滿足發送和接收所需要的位寬,使MAC控制器和協議棧之間實現鏈接。這樣處理增強了靈活性,整個設計是運用硬件描述語言來設計,與運用軟件的方式相比,處理速度更快。對于UDP/IP整個發送的幀結構及內部所存儲的數據,運用Quartus II軟件IP核設計RAM存儲器,對數據進行實時讀寫,這樣可以節省版子的資源,也能節省占用FPGA邏輯資源。

表1 UDP/IP幀頭數據存儲情況
協議規定萬兆以太網使用的是全雙工模式[8],因此MAC層不使用千兆CSMA/CD協議半雙工模式,這樣相對來說簡化了MAC控制器設計[9]。相比千兆以太網使用的8位數據寬、125MHz進行傳輸,萬兆以太網使用了156.25MHz和64位寬進行傳輸,這就產生了許多新的問題。CRC校驗模塊設計由8bit并行輸入產生的32bit的校驗碼,變成由64bit并行輸入產生32bit校驗碼,并且幀尾的有效字節不同。由于使用的是位寬64bit,所以可以一個時鐘同時處理8個字節數據。數據幀結尾處數據含有有效數據或者校驗的32位數據,如何處理結尾處的數據以及32位數據校驗碼的時序,使得XGMII接口設計成為本設計的關鍵。MAC控制整體設計,大體分為上層接口模塊、控制器模塊、狀態機模塊、流控模塊、XGMII接口模塊這五個模塊。上層接口模塊主要是把UDP/IP協議棧8bit數據通過該接口生成64bit數據位和7bit控制位;控制模塊是判斷發送暫停幀還是數據幀,如果數據長度小于規定的最小長度64字節,則進行數據填充(0字節),以滿足最小的數據要求;狀態機模塊是在物理層的數據進入其中時,把整個數據添加上以太網幀頭部和尾部校驗碼,此外狀態機還要負責去掉前導碼和幀起始定界符(SFD);流量控制模塊是執行當前數據傳輸的流量控制;XGMII接口模塊是把經過其中的64bit的數據位和7bit控制位轉換產生32bit數據位和4bit控制位,發送到物理層,當接收物理層數據時,XGMII接口完成數據由32bit到64bit的轉換。
萬兆MAC幀控制器的位寬為64bit,所以其校驗主要以64bit校驗為主,設計方法有兩種[10-11]。第一種是,當tx_status[7]有效時,表示幀開始傳輸數據,進入狀態機,同時進入CRC校驗模塊,開始進行數據校驗。當檢測到tx_status[6]有效時,檢測tx_status[3:0]數值。不同的有效字節數有不同的校驗模塊,例如檢測到數值位4時,觸發32bit校驗模塊,將結尾32位有效數據輸入32bit校驗模塊,完成最后的校驗。方法一的校驗過程如圖3所示。運用此種方法,整個傳輸過程中沒有延遲情況,有效率高的優點,但是比第二種方法占用了FPGA芯片更多的邏輯資源。

圖3 CRC32無延遲校驗模塊
圖4所示即為方法二,它也使用了64bit校驗模塊,當檢測到幀結尾信號時,只使用8bit校驗模塊,而最后8字節數據將根據有效字節個數逐字節進行處理。例如,當有效字節為4時,將32bit數據輸入CRC校驗模塊,每個時鐘處理一個字節數據,4個時鐘過后即得到CRC校驗碼,所得值和方法一相同。

圖4 CRC32 8時鐘延遲校驗模塊
這種方法的優點是占用的邏輯資源較少,但會產生數據延遲,最多延遲達8個時鐘,同時為了實現在數據發送完畢時緊接著發送FCS,還需要增加一個緩沖模塊,才能保證整個數據發送的完整性。
本研究所使用的FPGA芯片邏輯資源足以滿足整個系統的設計,所以綜合考慮使用第一種方法。
以太網幀處理分成接收數據和發送數據兩個部分。發送數據將同步字段和校驗位添加到以太網幀,接收數據將物理層接收到的數據進行分解,去除頭部校驗部分并判斷是否滿足最小幀長度要求,如果滿足,則發送數據到UDP/IP協議棧。圖5為將數據封裝成以太網數據幀的結構設計。

圖5 以太網發送模塊
完成這些工作的主要模塊是發送狀態機和接收狀態機。發送狀態機設計的主要功能是把上層數據前端加入同步字節(前導碼,起始定界符)8字節,由于數據位寬為64bit,所以只需要一個時鐘周期就能把8個字節數據添加到以太網頭部,與千兆以太網需要8個時鐘周期才能完成這一動作相比,此方案節省很多時間,處理速度大有提高。但在數據幀結尾處,有效字段不定長,數據幀結尾處一個時鐘周期需要發送8個字節數據,其中可能包括有效字節數和32位CRC校驗數據,也可能不包括,針對這一點,將幀尾數據進行統計,把幀尾數據的各種情況列出兩個表。
表2所示是當數據發送到幀尾時,幀尾內所包含的數據種類。表中IDLE、TERMINATE、CRC、data分別表示幀間隔、結束碼、校驗碼、數據。由2表可知,不同的有效字節數,發送的數據不一樣。當有效字節為4~8時缺少結束碼和CRC32部分數據,這個狀態下,還有部分信息不完整,還需要另一個時鐘周期把未發送完成的數據發送出去。表3即是將剩余的部分發送出去,這樣才能完成一幀以太網數據幀的發送。由于協議規定,每一幀數據的起始數據必須要在通道next_xgmac_txd[7:0]處,設計也保證了幀的每次傳輸的起始位置都在next_xgmac_txd[7:0]通道的位置上。

表2 幀尾數據

表3 剩余幀尾數據
采用ALTERA公司的Cyclone IV系列EP4CE6F17C8N器件,共有6272邏輯單元,6272邏輯門,276480 RAM;使用Verilog語言編程;使用Mentor公司的ModelSim對設計進行功能仿真。UPD/IP協議棧發送仿真波形如圖6。從圖6可以看出,ram_addr地址計數器位13和14是發送的80兩個字節,整個數據在UDP/IP協議棧傳輸,添加數據幀頭數據,整個過程按照表1的順序進行數據傳輸。在傳輸過程中,豎線的位置為IP頭部校驗和,將IP頭部數據進行計算,兩個數值相等,與設計相符合。

圖6 UDP/IP協議棧發送仿真波形
MAC發送控制器仿真波形如圖7所示,其中next_xgmac_txd為XGMII接口發送數據,tx_valid_rs為整個數據傳輸的有效數據,由圖可以看出當檢測到開始幀數據時,開始發送數據,但是再發送數據前需要8字節幀同步信號。此處加了數據緩沖區的目的是為了緩沖一個時鐘輸入同步字段,且數據沒有丟失。對于圖7,當檢測到數據幀結尾處時,此圖的時序是4個有效字段,豎線所在位置為對結尾處數據幀的處理,分別取出CRC校驗模塊32位數據和數據幀前32位數據,組成幀尾數據,此狀態沒有結束碼,則進入下一個狀態進行結束碼的輸入,同時CRC32位校驗碼緊跟在數據幀后面。仿真波形符合設計的預定目標。

圖7 MAC控制器發送模塊時序
根據IEEE802.3-2005和IEEE802.3ae標準,使用ALTERA公司的Cyclone IV系列EP4CE6F17C8N,系統地闡述了對萬兆以太網視頻傳輸系統的設計,也詳細介紹了UDP/IP協議棧設計和萬兆MAC控制器設計。將傳輸層和網絡層合并到一個處理模塊中的思路,簡化了系統的設計,同時節省了邏輯資源。針對MAC控制器的幀尾有效字節的不同,對以太網幀處理模塊進行設計,并通過ModelSim對設計進行功能仿真。由仿真結果可以看出,協議規定的標準格式得到了滿足。對并行輸入CRC校驗模塊也做了設計,針對有效字節不定長的問題,提出兩種解決方法。對設計模塊進行布局布線后仿真,結果表明,整體傳輸速率可以達到10Gb/s。本研究對于攝像頭實時監控系統的接收數據快速處理有著很高的應用價值。
[1]李嘉琛,楊光.基于FPGA的視頻以太網傳輸[J].數字技術與應用,2017(4):32-35.LI Jiachen,Yang Guang.Video Ethernet transmission based on FPGA[J].Digital Technology and Application,2017(4):32-35.
[2]李修堂.基于FPGA的以太網UDP/IP處理器的設計與驗證[D].成都:電子科技大學,2015.LI Xiutang.Design andverification of Ethernet UDP/IP processor based on FPGA[D].Chengdu:University of Electronic Science and Technology of China,2015.
[3]楊瑩.10G以太網MAC控制器的設計與驗證[D].合肥:中國科學技術大學,2016.YANG Ying.Design and verification of 10G Ethernet MAC controller[D].Hefei:University of Science and Technology of China,2016.
[4]丁鐵夫,劉超,楊磊,等.基于千兆以太網的實時視頻傳輸系統設計[J].微計算機信息,2008,24(36):132-134.DING Tiefu,LIU Chao,YANG Lei,et al.Design of realtime video transmission system based on Gigabit Ethernet[J].Microcomputer Information,2008,24(36):132-134.
[5]宋國棟,程偉森,程國棟.10G以太網光接口及其實現[J].中興通訊技術,2004(s1):40-43.SONG Guodong,CHENG Weisen,CHENG Guodong.10G Ethernet optical interface and its implementation[J].ZTE Technology Journal,2004(s1):40-43.
[6]段曉晨,何小剛,程永強.實時視頻SDRAM控制器的FPGA設計與實現[J].太原理工大學學報,2006(S1):8-11.DUAN Xiaochen,HE Xiaogang,CHENG Yongqiang.FPGA design and implementation of real-time video SDRAM controller[J].Journal of Taiyuan University of Technology,2006(S1):8-11.
[7]MILEVA A,PANAJOTOV B.Covert channels in TCP/IP protocol stack[J].Ext.ed.Central European Journal of Computer Science,2014,4(2):45-66.
[8]張友亮,劉志軍,馬成海,等.萬兆以太網MAC層控制器的FPGA設計與實現[J].計算機工程與應用,2012,48(6):77-79.ZHANG Youliang,LIU Zhijun,MA Chenghai,et al.FPGA design and implementation of 10 Gigabit Ethernet MAC layer controllers[J].Computer Engineering and applications,2012,48(6):77-79.
[9]IEEE.Media Access Control(MAC)Parameters,Physical Layers,and Management Parameters for 10 Gb/s Operation[J].IEEE Stdae,2002.
[10]彭建輝.10G以太網接口并行CRC校驗的一種簡化算法[J].微計算機信息,2006,22(20):213-215.PENG Jianhui.A simplified algorithm for parallel CRC check of 10G Ethernet interface[J].Microcomputer Information,2006,22(20):213-215.
[11]劉昭,蘇厲,金德鵬,等.10G以太網系統中的并行CRC編解碼器的設計[J].電子技術應用,2004,30(4):47-50.LIU Zhao,SU Li,JIN Depeng,et al.Design of parallelCRC codec in 10G Ethernet system[J].Application of Electronic Technique,2004,30(4):47-50.