摘 要: 介紹了一種在成熟以太網(wǎng)物理層技術的基礎上使用硬件協(xié)議實現(xiàn)的高速可靠數(shù)據(jù)傳輸方法,。該方法不同于一般采用的TCP機制,它利用FPGA實現(xiàn)數(shù)據(jù)分組打包和差錯控制,,用硬件的方法在保證了數(shù)據(jù)可靠傳輸?shù)耐瑫r實現(xiàn)了軟件協(xié)議無法實現(xiàn)的高數(shù)據(jù)率,。經(jīng)過測試證明,該方法相對于TCP協(xié)議具有帶寬利用率高,、傳輸速度穩(wěn)定,、CPU占用率低的優(yōu)點,適用于點到點的高速可靠數(shù)據(jù)傳輸,,同時還支持網(wǎng)絡的擴展應用,。
關鍵詞: 以太網(wǎng);PHY,;TCP,;硬件協(xié)議;FPGA,;高速可靠數(shù)據(jù)傳輸
在各種不同的場合中,,人們需要將大批數(shù)據(jù)從一個設備無差錯地傳輸?shù)搅硪粋€設備上。對于設備間距離較近的場合,,可以選擇PCIE(典型距離是15~30 cm)或者USB(最長傳輸距離5 m)等接口,。而對于距離較遠的場合,可以選擇RS232,、RS485,、以太網(wǎng)等傳輸介質,并在此基礎上,,通過上層協(xié)議來保證數(shù)據(jù)的可靠性,。上層協(xié)議通常用檢錯重傳機制來實現(xiàn)數(shù)據(jù)的可靠傳輸,,如TFTP、TCP/IP,、SCTP以及可靠UDP等,。這些協(xié)議都必須依靠較為復雜的CPU運算和內(nèi)存拷貝來實現(xiàn)數(shù)據(jù)可靠傳輸?shù)墓δ堋1热缭贚inux下,,TCP/IP協(xié)議每發(fā)送一個數(shù)據(jù)包,,CPU需要執(zhí)行約14 000條指令[1]。因此CPU的工作頻率,、內(nèi)存的讀寫速度,、硬件I/O帶寬都會影響TCP/IP的速度。一些嵌入式系統(tǒng)上TCP性能測試如表1所示,。
CPU處理能力越強,,TCP傳輸速度越高,。與此同時,,在最大傳輸單元為9 000 B時(即相對MTU1 500包長度增加6倍,包處理頻度下降6倍),,則傳輸速度大幅提高,。這也從側面說明了CPU處理能力對TCP傳輸速度的影響。
在點對點傳輸和局域網(wǎng)傳輸中,,往往不需要完善的路由機制和流量控制,,但同樣需要一種可靠的數(shù)據(jù)傳輸手段。傳統(tǒng)的TCP協(xié)議依賴CPU運算的特性,,使得傳輸速度受到限制,,并且受CPU負荷變化影響而速率不穩(wěn)定[2]。從提高傳輸效率和減輕對CPU的依賴兩方面考慮,,提出一種基于硬件實現(xiàn)的高速可靠數(shù)據(jù)傳輸方法,,將CPU從頻繁的協(xié)議運算中解放出來。該方法可以在千兆以太網(wǎng)PHY所提供的物理層通信鏈路的基礎上,,通過編寫FPGA邏輯,,在硬件上實現(xiàn)可靠數(shù)據(jù)傳輸?shù)膮f(xié)議,然后使用如PCIE這樣的接口將數(shù)據(jù)提供給計算機系統(tǒng),。系統(tǒng)結構如圖1所示,。
1 選擇重發(fā)機制提供可靠數(shù)據(jù)傳輸
保證數(shù)據(jù)傳輸過程中的可靠性有多種方式,如糾錯碼,、信息反饋和檢錯重發(fā)機制,。選擇重發(fā)是檢錯重發(fā)的實現(xiàn)方法之一,相對于等待重發(fā)和退回重發(fā),,它具有高效率的特點,,因而被廣泛采用,。比如在TCP/IP網(wǎng)絡中,就是用檢錯重發(fā)機制的原理,。但TCP協(xié)議中包括較為復雜的流量控制機制和擁塞控制機制,,它們被設計來應對異構的、大范圍的復雜網(wǎng)絡環(huán)境,。
而在點對點傳輸?shù)膽弥?,或者在任務明確、拓撲簡單的局域網(wǎng)中,,不需要復雜的路由機制和流量控制,,因而可以簡化被廣泛使用的檢錯重傳機制,使得可靠性協(xié)議可以通過硬件實現(xiàn),。
如圖2所示,,將數(shù)據(jù)可靠傳輸?shù)倪^程概括如下:
(1)待發(fā)送的數(shù)據(jù)在發(fā)送端打包,,加上必要的識別信息和校驗信息,,存入發(fā)送端的緩存;
?。?)待以太網(wǎng)信道可用之后將數(shù)據(jù)包通過千兆以太網(wǎng)發(fā)送給接收方,;
(3)接收方收到數(shù)據(jù)包之后對內(nèi)容進行校驗,,確認數(shù)據(jù)無誤之后將識別信息通過ACK數(shù)據(jù)包反饋給發(fā)送方,;
(4)發(fā)送方的緩存接收識別信息后確認數(shù)據(jù)已安全抵達接收方,,清空緩存等待發(fā)送下一個數(shù)據(jù)包,;
(5)發(fā)送方在設定的時間內(nèi)沒有接收到帶有相應識別信息的ACK反饋,,則進行重新發(fā)送,,重發(fā)超過一定次數(shù)則報錯。
校驗信息選擇使用和以太網(wǎng)兼容的CRC32,,編碼冗余度較低(為0.26%),。可以預見,,在一般的誤碼率情況下(1×10-10),,該方法可以實現(xiàn)高速的可靠傳輸[4]。
2 可靠數(shù)據(jù)傳輸?shù)挠布崿F(xiàn)
用硬件的方式實現(xiàn)所述的可靠傳輸,,將會極大地降低對發(fā)送方和接收方在協(xié)議運算上對CPU資源的依賴,,這點與TCP協(xié)議大為不同。
如圖3所示,,相較于TCP協(xié)議,,硬件協(xié)議在接收數(shù)據(jù)時數(shù)據(jù)流大大簡化,。
TCP協(xié)議的數(shù)據(jù)流:
(1)網(wǎng)卡接收以太網(wǎng)數(shù)據(jù)通過PCIE以DMA的方式寫入上位機內(nèi)存,,并觸發(fā)中斷,;
(2)網(wǎng)絡包內(nèi)存拷貝進入OS協(xié)議層,;
?。?)對網(wǎng)絡包的協(xié)議運算,檢查包頭信息和CRC校驗等,;
?。?)確定無誤后發(fā)送ACK包;
?。?)將有效數(shù)據(jù)提供給上層用戶,。
硬件協(xié)議的數(shù)據(jù)流:
(1)設備卡FPGA檢驗數(shù)據(jù)正確性自發(fā)產(chǎn)生ACK回應包,,將有效數(shù)據(jù)通過PCIE以DMA的方式寫入上位機內(nèi)存,,可選擇觸發(fā)中斷或輪詢;
?。?)驅動層直接將數(shù)據(jù)提供給用戶,。
發(fā)送過程與接收過程相反,情況類似,,不再贅述??梢?,利用FPGA實現(xiàn)的硬件協(xié)議省去了上位機軟件協(xié)議運算和內(nèi)存拷貝,直接將有效數(shù)據(jù)提供給上層用戶,,提高了數(shù)據(jù)傳輸?shù)男屎退俣?,極大地減輕了CPU運算負荷,省去了對CPU的頻繁中斷,,從而獲得不依賴于CPU性能的穩(wěn)定高速的可靠數(shù)據(jù)傳輸,。這點是軟件協(xié)議優(yōu)化難以實現(xiàn)的。
2.1 硬件平臺
設計PCIE接口設備卡,,搭載Xilinx Spartan 6 FPGA和Broadcom千兆以太網(wǎng)PHY芯片,。FPGA是設備的核心。在FPGA上部署PCIE接口模塊和Ethernet接口模塊,,并設計內(nèi)部邏輯實現(xiàn)數(shù)據(jù)的可靠傳輸,。
2.2 FPGA邏輯模塊的設計
FPGA的邏輯設計需要保證數(shù)據(jù)流的順暢,各個模塊的互聯(lián),。采用硬件算法,,實現(xiàn)對數(shù)據(jù)的分組打包和節(jié)點間的應答握手機制,,保證每個數(shù)據(jù)包正確無誤地抵達目標設備。FPGA內(nèi)部的邏輯結構如圖4所示,,其中對于數(shù)據(jù)的可靠傳輸是在Tx和Rx模塊中的狀態(tài)機控制下實現(xiàn)的,,Ethernet模塊為Xilinx的TriMode Ethernet MAC Core,提供了對各種速率(10/100/1 000 M)的以太網(wǎng)PHY的支持,。位于邏輯核心區(qū)域的InterConnect模塊為多個端口之間提供了可動態(tài)配置的互聯(lián),,因而為可能的網(wǎng)絡拓撲提供支持。PCIE模塊為上位機提供了訪問FPGA 的數(shù)據(jù)和命令通道,。
FPGA各個模塊的說明:
?。?)PCIE,使用Xilinx的s6_pcie:2.4 Logic Core[5],。開辟兩個用戶地址空間,,一個用于訪問內(nèi)部狀態(tài)控制寄存器,另一個用于訪問FPGA數(shù)據(jù),。
?。?)InterConnect,在內(nèi)部寄存器的控制下,,將各個Ethernet端口和上位機數(shù)據(jù)端口按照一定的規(guī)則互聯(lián)起來,,可以做到指定端口之間的轉發(fā)和特定端口的收發(fā)操作。并且在verilog編碼中采用參數(shù)化的風格,,方便多端口的擴展,。這樣,在上位機控制軟件的配合下,,可以實現(xiàn)多個端口之間的靈活轉發(fā),,因而可以方便地組建數(shù)據(jù)傳輸網(wǎng)絡。InterConnect數(shù)據(jù)位寬可靈活配置,,對于千兆網(wǎng)應用可配置為16位寬,。該模塊包括FPGA內(nèi)部其他模塊,時鐘頻率為75 MHz,。
?。?)Tx模塊,其他端口的轉發(fā)數(shù)據(jù)或者上位機的發(fā)送數(shù)據(jù)經(jīng)由InterConnect傳送到Tx模塊中,,在Tx模塊的邏輯調(diào)度下以數(shù)據(jù)包為單位暫存在某一個Buffer中,。每個Buffer都有獨立的狀態(tài)機控制。數(shù)據(jù)包在Buffer中準備好之后會在Tx模塊的邏輯調(diào)度下發(fā)送至Ethernet模塊,,相應的Buffer狀態(tài)機處于等待ACK的狀態(tài),。在計數(shù)器超時后觸發(fā)重傳,重傳一定次數(shù)依然沒有正確ACK回應則報錯,。每個Tx模塊中可以參數(shù)化地配置多個Buffer,,通過多個Buffer的協(xié)作可以極大地提高信道利用效率,。
(4)Rx模塊,,內(nèi)部邏輯維護一個類似FIFO的存儲結構,。每當接收一個數(shù)據(jù)幀時,通過累加寫指針將數(shù)據(jù)暫存入RAM中,,并在狀態(tài)機控制下記錄當前幀的目的/源地址,、幀類型,序號等信息,。如果是ACK幀則把相應的幀識別信息傳遞給Tx模塊,;如果是需要接收的幀則在幀接收完后指示存儲器數(shù)據(jù)有效,數(shù)據(jù)有效信號將促使待轉發(fā)模塊或者CPU接收FIFO讀取該幀,。Rx和Tx的以太網(wǎng)端口數(shù)據(jù)位寬為8位,,接口時鐘頻率為125 MHz。
?。?)Ethernet模塊,,使用Xilinx的tri_mode_eth_mac:4.6 Logic Core[6]。該模塊提供CRC32編碼和校驗功能,,提供對不同速率以太網(wǎng)的支持,,并且對內(nèi)部邏輯提供統(tǒng)一的數(shù)據(jù)接口。
3 系統(tǒng)性能測試
為了盡可能完善地測試系統(tǒng)性能,,從邏輯仿真和實測兩方面進行測試,。
3.1 邏輯仿真測試
邏輯仿真是利用Xilinx ISim仿真器對FPGA邏輯的行為進行仿真預測。仿真測試的優(yōu)點是測試準備簡單,,測試方法靈活,;缺點是只能仿真FPGA邏輯部分,無法仿真其他硬件,。考慮到本數(shù)據(jù)傳輸系統(tǒng)的核心在FGPA上,,并通過與實測數(shù)據(jù)比對,,邏輯仿真可以在很大程度上真實反映系統(tǒng)性能。測試的是兩個節(jié)點之間的點對點傳輸,。
?。?)固定幀長1 024 B測試結果:帶寬利用效率為96.4%,數(shù)據(jù)傳輸速度為120.5 MB/s,。
?。?)隨機幀長測試結果:數(shù)據(jù)傳輸速度為99.4 MB/s,帶寬利用效率為79.5%,。
仿真波形如圖5所示,,rgmii_txen_A信號表明在這種情況下信道利用出現(xiàn)間隙,。這是由于幀長度突然變長,需要等待內(nèi)部數(shù)據(jù)寫入Buffer,。這種特殊情況可以通過增加Tx_buffer的數(shù)量來解決,。
(3)人為添加誤碼測試結果:數(shù)據(jù)傳輸速度為106.7 MB/s,,帶寬利用效率為85.3%,。
測試幀長度為1 024 B,設定FPGA在發(fā)送端口隨機添加誤碼,,測試添加誤碼率為0.000 76%,。一般情況下誤碼率很低(平均一個誤碼造成一個數(shù)據(jù)包重傳)。單次誤碼造成的等待和重傳開銷是一定的,,因而傳輸速度的變化值與誤碼率的關系可以近似看成正比關系(?駐x:傳輸速率比變化,;?駐e:誤碼率):?駐x=k?駐e。
測試時,,人為添加誤碼率?駐e=0.000 76%,,?駐x=-13.8 MB/s,求得k=-1.82×106 MB/s,。由此估計,,在一般情況下(即誤碼率為1×10-10),傳輸速度變化?駐x=-1.82 106 MB/s×10-10,,為-18.2 KB/s,,傳輸帶寬仍接近120.5 MB/s。
3.2實際傳輸測試
測試兩個節(jié)點間點對點傳輸,,需要兩個數(shù)據(jù)節(jié)點,。節(jié)點A產(chǎn)生測試數(shù)據(jù),節(jié)點B接收,、校驗測試數(shù)據(jù),,并通過PCIE以DMA方式發(fā)送到PC端。通過PC端軟件檢查并統(tǒng)計100 s傳輸數(shù)據(jù),,接收11 742 592幀,,共計12.024 GB數(shù)據(jù)。
測試結果:數(shù)據(jù)傳輸速度為120.2 MB/s,;帶寬利用效率為96.2%,,與仿真結果(96.4%)基本持平。
3.3 結論
根據(jù)測試結果,,該硬件協(xié)議可以有效地進行可靠數(shù)據(jù)傳輸,。在實際測試情況和可以預計的誤碼率情況下,順序傳輸大塊數(shù)據(jù)的傳輸速度可達到千兆以太網(wǎng)極限帶寬125 MB/s的96%,即120 MB/s,。這個數(shù)據(jù)與TCP協(xié)議在MTU 9 000超長幀設定下的PowerPC405系統(tǒng)上的表現(xiàn)基本持平(平均考慮收和發(fā)),,而遠高于MTU 1 500設定下的表現(xiàn)。TCP協(xié)議在低處理頻度下可換來更高的速度,,這說明軟件協(xié)議的傳輸速度受CPU運算影響大,,易產(chǎn)生波動。穩(wěn)定的高數(shù)據(jù)率則是硬件協(xié)議的優(yōu)點所在,。
數(shù)據(jù)的可靠傳輸是一個具有普遍意義的話題,。本文所闡述的在現(xiàn)有成熟以太網(wǎng)技術基礎上,利用FPGA硬件實現(xiàn)數(shù)據(jù)的高速,、可靠的傳輸,。相較于復雜的TCP軟件協(xié)議,使用硬件協(xié)議能夠有效降低CPU負荷,,并因此得到穩(wěn)定的高速數(shù)據(jù)傳輸速率,。本文所述的硬件平臺支持多個以太網(wǎng)端口的擴展。節(jié)點內(nèi)端口之間的可配置轉發(fā)功能在板載MCU的控制下可實現(xiàn)靈活路由,。這樣多個節(jié)點可以組成數(shù)據(jù)傳輸網(wǎng)絡,,因而為諸如高速數(shù)據(jù)采集網(wǎng)絡、局域網(wǎng)傳輸?shù)染W(wǎng)絡應用提供了可行方案,。
參考文獻
[1] 馬毅超.大規(guī)模陸上地震儀器中高速可靠數(shù)據(jù)傳輸方法的研究[D].合肥:中國科學技術大學,,2011.
[2] DOUG GIBBS. Measuring treck TCP/IP performance using the XPS LocalLink TEMAC in an embedded processor system[J]. XAPP1043,www.xilinx.com,,2008.
[3] 王圣,,蘇金樹.TCP加速技術研究綜述[J].軟件學報,2004,,15(11):1689-1697.
[4] 王新梅.糾錯碼與差錯控制[M].北京:人民郵電出版社,,1989.
[5] PCI express base specification revision 1.1, www.pcisig.com[Z]. 2005.
[6] XILINX. LogiCORE IP Tri-Mode Ethernet MAC v4.5 User Guide[Z]. 2011.