摘 要: 在以太網(wǎng)物理層的基礎(chǔ)上,設(shè)計(jì)了一種利用專用硬件接口結(jié)合低功耗MCU實(shí)現(xiàn)可靠數(shù)據(jù)傳輸協(xié)議,可在不同物理鏈路之間進(jìn)行可靠、可控、高速數(shù)據(jù)交換的數(shù)據(jù)節(jié)點(diǎn)。與傳統(tǒng)TCP的實(shí)現(xiàn)機(jī)制不同,傳輸協(xié)議由專用硬件接口實(shí)現(xiàn),與一般的純軟件實(shí)現(xiàn)可靠數(shù)據(jù)傳輸方案相比,在CPU主頻和功耗相當(dāng)?shù)那闆r下該設(shè)計(jì)具有更高的數(shù)據(jù)率,本節(jié)點(diǎn)同時(shí)具備對(duì)采集系統(tǒng)進(jìn)行分布式管理的能力。經(jīng)測(cè)試,本節(jié)點(diǎn)可以達(dá)到97%以上信道利用率,具有數(shù)據(jù)傳輸可靠、功耗低等優(yōu)點(diǎn)。
關(guān)鍵詞: 以太網(wǎng);FPGA;高速可靠數(shù)據(jù)傳輸;低功耗
0 引言
在一些工業(yè)應(yīng)用領(lǐng)域,如大規(guī)模數(shù)據(jù)采集系統(tǒng),由于數(shù)據(jù)采集節(jié)點(diǎn)分布范圍廣、數(shù)據(jù)率高,從而需要在不同數(shù)據(jù)信道間進(jìn)行數(shù)據(jù)交換[1],在數(shù)據(jù)傳輸過程中不可避免地需要數(shù)據(jù)交換節(jié)點(diǎn)進(jìn)行數(shù)據(jù)的接收、發(fā)送和管理。
傳統(tǒng)傳輸協(xié)議(如TCP/IP、TFTP、SCTP等)的實(shí)現(xiàn)方法為在底層傳輸介質(zhì)基礎(chǔ)上依靠復(fù)雜的CPU運(yùn)算來保證數(shù)據(jù)的可靠性,在不同的CPU主頻下TCP性能測(cè)試如表1所示。
可見傳統(tǒng)的TCP實(shí)現(xiàn)方案對(duì)CPU主頻依賴性強(qiáng),隨之帶來的高功耗無法滿足系統(tǒng)低功耗的設(shè)計(jì)要求。本文在可靠數(shù)據(jù)傳輸協(xié)議基礎(chǔ)上,設(shè)計(jì)了一種高速數(shù)據(jù)交換節(jié)點(diǎn),在100 Mb/s和1 000 Mb/s信道之間進(jìn)行數(shù)據(jù)交換和管理,在更低CPU主頻(168 MHz)情況下具有信道利用率高(百兆97%以上,千兆98%以上)、可靠、可控、低功耗等特點(diǎn)。
1 節(jié)點(diǎn)所處網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)
在大規(guī)模數(shù)據(jù)采集系統(tǒng)中數(shù)據(jù)采集節(jié)點(diǎn)數(shù)量大、分布范圍廣,在有線數(shù)字傳感網(wǎng)絡(luò)中將采集節(jié)點(diǎn)采集到的數(shù)據(jù)通過百兆以太網(wǎng)鏈路回傳,并通過數(shù)據(jù)交換節(jié)點(diǎn)進(jìn)行匯總通過千兆以太網(wǎng)鏈路向更高級(jí)進(jìn)行傳輸[5],此方向?yàn)閿?shù)據(jù)通道(上行通道)。
另一方面需要對(duì)各采集節(jié)點(diǎn)進(jìn)行控制和管理,在大規(guī)模采集系統(tǒng)中,為減輕中心節(jié)點(diǎn)的運(yùn)算壓力,采用分布式管理對(duì)采集節(jié)點(diǎn)進(jìn)行控制。接收千兆以太網(wǎng)鏈路命令利用本地低功耗MCU進(jìn)行分析處理,通過百兆以太網(wǎng)鏈路向下級(jí)發(fā)送,此方向?yàn)槊钔ǖ溃ㄏ滦型ǖ溃?。其拓?fù)浣Y(jié)構(gòu)如圖1所示。
2 可靠數(shù)據(jù)傳輸協(xié)議
傳統(tǒng)的通信協(xié)議(TCP/IP)需要復(fù)雜的路由協(xié)議,高層協(xié)議還需要大量的應(yīng)用服務(wù),對(duì)于嵌入式系統(tǒng)來說過于復(fù)雜,且對(duì)CPU運(yùn)算能力有較高要求。在相對(duì)較低的主頻及功耗條件下無法滿足高速、可靠數(shù)據(jù)傳輸?shù)囊蟆?/p>
可靠數(shù)據(jù)傳輸協(xié)議在傳統(tǒng)通信協(xié)議的基礎(chǔ)上進(jìn)行精心裁剪,對(duì)于一些工業(yè)領(lǐng)域應(yīng)用系統(tǒng),如大規(guī)模地震數(shù)據(jù)采集系統(tǒng),本協(xié)議針對(duì)性強(qiáng)、結(jié)構(gòu)簡單、適應(yīng)底層硬件。上層軟件根據(jù)系統(tǒng)需要設(shè)計(jì),減少不必要的開銷以適合高效率數(shù)據(jù)封裝,滿足高速、可控、可靠的數(shù)據(jù)傳輸需求[1]。
可靠數(shù)據(jù)傳輸協(xié)議包括:ACK回應(yīng)與超時(shí)重發(fā)機(jī)制;轉(zhuǎn)發(fā)優(yōu)先及本地緩存機(jī)制;命令、回應(yīng)、確認(rèn)機(jī)制等。相比傳統(tǒng)的通信協(xié)議更適應(yīng)數(shù)據(jù)采集系統(tǒng),效率更高。
3 數(shù)據(jù)交換節(jié)點(diǎn)設(shè)計(jì)與實(shí)現(xiàn)
本數(shù)據(jù)交換節(jié)點(diǎn)利用FPGA邏輯實(shí)現(xiàn)專用硬件接口,實(shí)現(xiàn)硬件ACK響應(yīng)和判斷、硬件重發(fā)、硬件轉(zhuǎn)發(fā)和硬件發(fā)送仲裁等功能,并利用低功耗MCU進(jìn)行命令響應(yīng)和數(shù)據(jù)處理。基于可靠數(shù)據(jù)傳輸協(xié)議在百兆以太網(wǎng)鏈路和千兆以太網(wǎng)鏈路之間進(jìn)行數(shù)據(jù)交換和命令響應(yīng)。
3.1 硬件平臺(tái)及節(jié)點(diǎn)結(jié)構(gòu)
節(jié)點(diǎn)結(jié)構(gòu)如圖2所示,主要由三部分組成:
(1)低功耗MCU,主要用于命令響應(yīng)和數(shù)據(jù)處理。硬件接口將數(shù)據(jù)及命令通過MII高速數(shù)據(jù)接口及低速命令接口將信息傳送至中央處理單元,經(jīng)過處理的數(shù)據(jù)、需要向上級(jí)返回的命令響應(yīng)及向下級(jí)分發(fā)的命令通過對(duì)應(yīng)的接口發(fā)送至硬件接口進(jìn)行數(shù)據(jù)傳輸。作為原型機(jī)硬件,MCU采用ST公司STM32F407,其基于CortexTM-M4架構(gòu),主頻168 MHz。在原型機(jī)平臺(tái)上實(shí)現(xiàn)了命令處理、高數(shù)據(jù)率(>97 Mb/s)數(shù)據(jù)傳輸?shù)裙δ堋?/p>
?。?)千兆以太網(wǎng)硬件接口部分,主要由Xilinx Spartan 6 FPGA和Broadcom千兆以太網(wǎng)芯片組成。在FPGA內(nèi)編寫專用通信硬件接口,硬件實(shí)現(xiàn)轉(zhuǎn)發(fā)、接收、本地?cái)?shù)據(jù)發(fā)送。其內(nèi)部的可拓展RDT(Reliable Data Transmission)模塊根據(jù)幀類型及地址進(jìn)行自動(dòng)ACK確認(rèn)、本地發(fā)送與轉(zhuǎn)發(fā)仲裁、超時(shí)等待及重發(fā)等,通過拓展RDT模塊增加發(fā)送緩存區(qū)數(shù)目可以有效地增加信道的利用率。FPGA使用Xilinx TriMode Ethernet Logic Core[6]通過RGMII接口與以太網(wǎng)芯片進(jìn)行數(shù)據(jù)交換,通過以太網(wǎng)物理層與其他數(shù)據(jù)節(jié)點(diǎn)及主機(jī)進(jìn)行數(shù)據(jù)交換。測(cè)試100 m CAT6類網(wǎng)線傳輸正確。
?。?)百兆以太網(wǎng)硬件接口部分主要由Xilinx Spartan 6 FPGA和TI TLK100百兆以太芯片組成。在FPGA內(nèi)由硬件實(shí)現(xiàn)接收、自動(dòng)ACK生成和發(fā)送。其內(nèi)部可拓展RDT模塊自動(dòng)完成ACK確認(rèn)、發(fā)送仲裁、超時(shí)等待及重發(fā)。測(cè)試200 m CAT6類網(wǎng)線傳輸正確。
3.2 可靠數(shù)據(jù)傳輸及可控?cái)?shù)據(jù)管理協(xié)議的實(shí)現(xiàn)
為保證數(shù)據(jù)在對(duì)稱的信道之間進(jìn)行可靠、可控的交換,結(jié)合硬件平臺(tái)和可靠數(shù)據(jù)傳輸協(xié)議,實(shí)現(xiàn)數(shù)據(jù)交換節(jié)點(diǎn)的設(shè)計(jì),設(shè)計(jì)要點(diǎn)如下。
?。?)ACK回應(yīng)及超時(shí)重發(fā)
發(fā)送方發(fā)出數(shù)據(jù)幀后等待ACK回應(yīng),收到正確的ACK回應(yīng)后表明本次發(fā)送正確完成,進(jìn)行下一幀的發(fā)送;若超時(shí)后未收到ACK回應(yīng)或回應(yīng)錯(cuò)誤則進(jìn)行重發(fā)并在重發(fā)幀內(nèi)重發(fā)次數(shù)位段進(jìn)行加一(區(qū)別重發(fā)次數(shù)不同的幀),進(jìn)入下一次的等待回應(yīng)過程。
對(duì)于ACK回應(yīng)在鏈路發(fā)生偶然性誤碼的情況下,通過重發(fā)可以排除可恢復(fù)性錯(cuò)誤,發(fā)生不可恢復(fù)故障時(shí)向高層應(yīng)用報(bào)告錯(cuò)誤,由上層應(yīng)用判斷并進(jìn)行動(dòng)態(tài)路由,尋找其他可靠的數(shù)據(jù)鏈路完成發(fā)送或是進(jìn)入低功耗待機(jī)模式以節(jié)約能源。ACK機(jī)制同時(shí)可以實(shí)現(xiàn)流量控制,可根據(jù)需要停止ACK回應(yīng)終止本地接收,或有計(jì)劃地控制ACK幀的回應(yīng)頻度對(duì)鏈路數(shù)據(jù)率進(jìn)行調(diào)節(jié),以保證數(shù)據(jù)傳輸?shù)目煽匦?,借此排除整個(gè)數(shù)據(jù)傳輸中數(shù)據(jù)率的隨機(jī)性,通過ACK回應(yīng)保證數(shù)據(jù)均勻。
ACK等待和重發(fā)由硬件接口內(nèi)部的RDT模塊實(shí)現(xiàn),在實(shí)現(xiàn)協(xié)議的同時(shí)減輕了CPU的運(yùn)算壓力。如圖3所示,本地?cái)?shù)據(jù)先由RDT模塊緩存,多發(fā)送緩存可提高信道的利用率,根據(jù)幀信息確定是否需要重發(fā),發(fā)送完成后等待ACK,若收到回應(yīng)則進(jìn)行下一次發(fā)送,否則重發(fā)(重發(fā)次數(shù)+1),若重發(fā)次數(shù)達(dá)到上限(本文設(shè)定為4),則認(rèn)為本次發(fā)送失敗,通知上層應(yīng)用,以硬件實(shí)現(xiàn)的方式使得低CPU主頻、高數(shù)據(jù)率的實(shí)現(xiàn)成為可能。
?。?)轉(zhuǎn)發(fā)優(yōu)先及本地緩存
節(jié)點(diǎn)間級(jí)聯(lián)的拓?fù)浣Y(jié)構(gòu)如圖4所示,需要將下游節(jié)點(diǎn)的數(shù)據(jù)向主機(jī)轉(zhuǎn)發(fā)及轉(zhuǎn)發(fā)主機(jī)向下游發(fā)送的命令,同時(shí)需要進(jìn)行本地的接收和發(fā)送。轉(zhuǎn)發(fā)優(yōu)先和本地緩存可以保證整個(gè)鏈路的通暢和鏈路數(shù)據(jù)可靠不丟。
①轉(zhuǎn)發(fā)優(yōu)先:在千兆鏈路通信建立伊始通過上層應(yīng)用判斷鏈接方向確定上行(靠近主機(jī))與下行(連接其他數(shù)據(jù)交換節(jié)點(diǎn)),在通信過程中當(dāng)節(jié)點(diǎn)收到來自上游的命令時(shí)判斷是否為本地命令,若為本地命令則通過硬件通道傳至本地處理單元進(jìn)行命令解析和處理,若非本地命令則向下游轉(zhuǎn)發(fā);收到下游發(fā)來的數(shù)據(jù)幀時(shí)則向上游主機(jī)轉(zhuǎn)發(fā)。當(dāng)節(jié)點(diǎn)收到轉(zhuǎn)發(fā)數(shù)據(jù)或命令,即轉(zhuǎn)發(fā)緩存非空時(shí),無論本地發(fā)送緩存內(nèi)是否有數(shù)據(jù)或命令需要發(fā)送,優(yōu)先轉(zhuǎn)發(fā),待鏈路空閑時(shí)進(jìn)行本地發(fā)送。在數(shù)據(jù)傳輸過程中千兆鏈路數(shù)據(jù)率高,多級(jí)節(jié)點(diǎn)級(jí)聯(lián)對(duì)于實(shí)時(shí)性要求高,緩存壓力大,優(yōu)先轉(zhuǎn)發(fā)可以避免本地轉(zhuǎn)發(fā)緩存的壓力。
?、诒镜鼐彺妫涸谇д祖溌愤M(jìn)行數(shù)據(jù)傳輸過程中,數(shù)據(jù)交換節(jié)點(diǎn)必須同時(shí)接收下級(jí)采集節(jié)點(diǎn)接收的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)、匯總及相應(yīng)的處理后存入本地緩存,當(dāng)千兆以太網(wǎng)空閑時(shí)將本地?cái)?shù)據(jù)通過千兆以太網(wǎng)發(fā)送到數(shù)據(jù)中心。本地?cái)?shù)據(jù)和來自其他節(jié)點(diǎn)的數(shù)據(jù)共享千兆以太網(wǎng)鏈路,如果整個(gè)系統(tǒng)的平均數(shù)據(jù)率高于千兆鏈路的最大數(shù)據(jù)率則數(shù)據(jù)可靠性一定無法滿足,需要對(duì)系統(tǒng)數(shù)據(jù)節(jié)點(diǎn)及鏈路進(jìn)行重新設(shè)計(jì)。在系統(tǒng)設(shè)計(jì)正確恰當(dāng)?shù)臈l件下,整體數(shù)據(jù)率低于(或等于)千兆的最大數(shù)據(jù)率,通過本地緩存的機(jī)制可以保證在轉(zhuǎn)發(fā)的同時(shí)各節(jié)點(diǎn)的本地?cái)?shù)據(jù)可靠有序地發(fā)送。根據(jù)數(shù)據(jù)量及分布可以推算出合理的緩存大小,保證本地接收數(shù)據(jù)不丟在轉(zhuǎn)發(fā)空閑時(shí)而發(fā)送至主機(jī)。
其硬件實(shí)現(xiàn)如圖3所示,本地發(fā)送數(shù)據(jù)緩存在RDT模塊內(nèi)經(jīng)過ACK確認(rèn)及重發(fā)處理后與轉(zhuǎn)發(fā)數(shù)據(jù)或ACK一起送至發(fā)送仲裁模塊,通過硬件接口進(jìn)行判斷并依照轉(zhuǎn)發(fā)優(yōu)先進(jìn)行數(shù)據(jù)傳輸。
?。?)命令、回應(yīng)、確認(rèn)機(jī)制
為保證命令執(zhí)行的正確性,TCP/IP協(xié)議內(nèi)的三次握手用于建立鏈接及四次握手關(guān)閉連接。對(duì)于數(shù)據(jù)采集系統(tǒng),命令隨機(jī)性高、命令短暫(64 B)及間隔不可控,采用類似RUDP協(xié)議[7]將判斷鏈路可靠性和命令執(zhí)行(信息傳達(dá))過程合二為一,保證命令執(zhí)行可靠,同時(shí)相比TCP基于鏈接的機(jī)制,效率和功耗方面更適合數(shù)據(jù)采集系統(tǒng)。具體過程如圖5所示。
?、倜畎l(fā)起方發(fā)送一個(gè)含有信息的命令至接收方,等待對(duì)方響應(yīng),若對(duì)方無響應(yīng)則進(jìn)行固定次數(shù)重發(fā),判斷發(fā)生故障后通知上層應(yīng)用進(jìn)行處理;
?、诮邮辗竭M(jìn)行響應(yīng),通過命令回應(yīng)幀回傳信息,上級(jí)無響應(yīng)則進(jìn)行固定次數(shù)重發(fā),判斷發(fā)生故障后撤銷本次命令,通知上層應(yīng)用進(jìn)行處理,并等待下次命令;
?、凵霞?jí)收到命令回應(yīng)表示命令執(zhí)行過程完成,命令成功;若未收到對(duì)應(yīng)的命令回應(yīng)表明命令失敗,撤銷命令。
回應(yīng)確認(rèn)機(jī)制排除了鏈路誤碼的影響,同時(shí)排除了命令一方出現(xiàn)錯(cuò)誤后命令繼續(xù)執(zhí)行,發(fā)生不可逆錯(cuò)誤的可能。相比軟件實(shí)現(xiàn)的RUDP機(jī)制,在相同功耗及CPU主頻下,基于硬件的重發(fā)、ACK發(fā)送及確認(rèn)實(shí)現(xiàn),具有更高的命令執(zhí)行效率。
4 測(cè)試結(jié)果
4.1 數(shù)據(jù)率測(cè)試
利用多發(fā)送緩存的硬件模擬數(shù)據(jù)源發(fā)送數(shù)據(jù)幀到數(shù)據(jù)交換節(jié)點(diǎn),由節(jié)點(diǎn)進(jìn)行數(shù)據(jù)交換后發(fā)送至主機(jī),在保證數(shù)據(jù)正確可靠的前提下得到測(cè)試數(shù)據(jù)(表2)。根據(jù)幀協(xié)議及以太網(wǎng)幀傳輸協(xié)議,在數(shù)據(jù)傳輸過程中存在前導(dǎo)((7+1)B)、CRC(4 B)、幀間隔(12 B)共24 B無效數(shù)據(jù),即:
可得,在有效長度(Payload Size)為500 B和1 000 B時(shí)信道的可知理論有效帶寬及測(cè)試得到實(shí)際帶寬利用率如表2所示。在幀長度較小情況下,通過168 MHz MCU進(jìn)行數(shù)據(jù)交換,由于CPU運(yùn)算能力造成瓶頸限制,無法達(dá)到更高的帶寬利用率。
4.2 命令響應(yīng)測(cè)試
節(jié)點(diǎn)與下級(jí)站體以最小幀長度64 B反復(fù)進(jìn)行10 000次命令、回應(yīng)、確認(rèn)的命令響應(yīng)過程,未發(fā)生錯(cuò)誤。對(duì)比數(shù)據(jù)利用PC基于RUDP進(jìn)行模擬站體間短暫(最小幀長)頻繁(類似多個(gè)下級(jí)站分別進(jìn)行)的命令交換過程,結(jié)果見表3。
CPS(CMD Per Second)/MHz為單位主頻下的每秒執(zhí)行命令響應(yīng)數(shù),每條命令響應(yīng)過程由命令、回應(yīng)、確認(rèn)三部分組成。由表3可見,對(duì)于下行通道在較低的CPU主頻下,本節(jié)點(diǎn)依然保持較高的命令執(zhí)行效率。在實(shí)際系統(tǒng)中可以滿足對(duì)下級(jí)站體進(jìn)行分布式管理的需求。
現(xiàn)有節(jié)點(diǎn)在保證千兆鏈路和百兆鏈路通信及站體命令響應(yīng)下正常工作功耗約3.5 W,其中千兆以太網(wǎng)PHY(兩個(gè))功耗約1.6 W,百兆以太網(wǎng)PHY(兩個(gè))功耗300 mW,MCU功耗約300 mW,F(xiàn)PGA(兩個(gè))功耗約300 mW,電源效率損失約700 mW,控制層功耗約占總功耗的10%,物理層占85%。
5 結(jié)束語
基于可靠數(shù)據(jù)傳輸協(xié)議實(shí)現(xiàn)的可靠數(shù)據(jù)傳輸,通過協(xié)議的硬件實(shí)現(xiàn)在較低的CPU主頻及功耗下保證鏈路的高利用率。通過本地緩存和轉(zhuǎn)發(fā)機(jī)制保證了不同鏈路的數(shù)據(jù)交換。結(jié)合MCU實(shí)現(xiàn)軟件對(duì)系統(tǒng)進(jìn)行控制和管理。在原型機(jī)平臺(tái)上實(shí)現(xiàn)兩個(gè)百兆以太網(wǎng)和兩個(gè)千兆以太網(wǎng)接口,實(shí)現(xiàn)百兆鏈路96%、千兆鏈路98%以上的鏈路利用率,對(duì)至少200道(每道數(shù)據(jù)率400 Kb/s左右)數(shù)據(jù)采集節(jié)點(diǎn)進(jìn)行管理和采集數(shù)據(jù)傳輸。作為普遍的協(xié)議及信道交換實(shí)現(xiàn)方法,可以做到與底層鏈路的速度和數(shù)目無關(guān),具有普遍的適用性。
參考文獻(xiàn)
[1] 王兵,武杰,孔陽,等.?dāng)?shù)字傳感網(wǎng)絡(luò)的高速數(shù)據(jù)傳輸協(xié)議設(shè)計(jì)[J].儀器儀表學(xué)報(bào),2010,31(7):1644-1649.
[2] 張文沛,彭先蓉,徐勇.基于SOPC的千兆以太網(wǎng)數(shù)據(jù)傳輸設(shè)計(jì)[J].儀器儀表用戶,2010,17(3):66-68.
[3] GIBBS D. Measuring treck TCP/IP performance using the XPS locallink TEMAC in an embedded processor system [EB/OL].(2008-10-09)[2014-08-20]. http://china.xilinx.com/support/documentation/application_notes/xapp1043.pdf.
[4] 陳輝,陳虎,奚建清.嵌入式系統(tǒng)TCP/IP協(xié)議性能測(cè)試與分析[J].計(jì)算機(jī)工程,2007,33(21):99-101.
[5] 劉列峰.一種可擴(kuò)展的大規(guī)模地球物理勘探數(shù)據(jù)采集系統(tǒng)研究[D].合肥:中國科學(xué)技術(shù)大學(xué),2014.
[6] Xilinx. LogiCORE IP Tri-Mode Ethernet MAC v4.5 User Guide[Z]. 2011.
[7] 王繼剛,顧國昌,徐立峰,等.可靠UDP數(shù)據(jù)傳輸協(xié)議的研究與設(shè)計(jì)[J].計(jì)算機(jī)工程與應(yīng)用,2006,42(15):113-116.