魏曉艷
(陜西國(guó)防工業(yè)職業(yè)技術(shù)學(xué)院,計(jì)算機(jī)與軟件學(xué)院, 陜西, 西安 710300)
傳統(tǒng)的設(shè)備或系統(tǒng)平臺(tái)之間的數(shù)據(jù)通信通常由并行總線的方式實(shí)現(xiàn),但隨著系統(tǒng)的集成化發(fā)展,算法日漸復(fù)雜,數(shù)據(jù)量日益增長(zhǎng),系統(tǒng)功能需要多個(gè)芯片協(xié)同處理共同支撐。這種情況下并行總線無(wú)法滿足數(shù)據(jù)吞吐量要求,對(duì)整體性能反而是一種制約。FPGA利用串行并行轉(zhuǎn)換、數(shù)據(jù)時(shí)鐘恢復(fù)等技術(shù)避免了傳輸過(guò)程中的時(shí)鐘扭曲以及信號(hào)衰退等因素的影響,實(shí)現(xiàn)了以太網(wǎng)接口的高速傳輸,為高速以太網(wǎng)接口提供了可靠的解決辦法。
以太網(wǎng)是目前局域網(wǎng)中最常見(jiàn)的通信協(xié)議標(biāo)準(zhǔn),包括10 Mbps、 100 Mbps、1 000 Mbps、10 Gbps等。其中,千兆以太網(wǎng)作為高速以太網(wǎng)技術(shù)應(yīng)用最為廣泛,既傳承了之前的技術(shù)優(yōu)勢(shì),又具備自身獨(dú)特特性,采用8B/10B編碼規(guī)則適應(yīng)光纖傳輸要求,采用載波擴(kuò)展技術(shù)實(shí)現(xiàn)距離覆蓋,采用幀突發(fā)技術(shù)提升效率。
根據(jù)OSI標(biāo)準(zhǔn),基礎(chǔ)的七層網(wǎng)絡(luò)模型包括物理、數(shù)據(jù)鏈路、網(wǎng)絡(luò)、傳輸、會(huì)話、表示及應(yīng)用層。在以太網(wǎng)的層次架構(gòu)中,核心技術(shù)體現(xiàn)在數(shù)據(jù)鏈路層,主要包括接入控制MAC層、邏輯鏈路控制LLC層。MAC層主要實(shí)現(xiàn)將用戶自定義格式封裝為標(biāo)準(zhǔn)的以太網(wǎng)數(shù)據(jù)幀以及進(jìn)行地址過(guò)濾實(shí)現(xiàn)訪問(wèn)流量管控,是確保數(shù)據(jù)傳輸可靠性的關(guān)鍵。
FPGA(Field-Programmable Gate Array)也稱為可編程門陣列,與傳統(tǒng)的微處理器相比,F(xiàn)PGA技術(shù)克服了定制電路的缺點(diǎn),采用邏輯單元陣列的概念利用并行傳輸實(shí)現(xiàn)高速傳輸及信號(hào)處理,在資源復(fù)用、嵌入式處理器、微控單元方面應(yīng)用廣泛。
目前TCP/IP網(wǎng)絡(luò)協(xié)議應(yīng)用最廣,主要包括TCP、IP、IGMP、UDP等協(xié)議。TCP協(xié)議需完成3次握手且需要包括數(shù)據(jù)重傳,在硬件實(shí)現(xiàn)上難度較高。相對(duì)來(lái)說(shuō),UDP協(xié)議占用資源少,邏輯簡(jiǎn)單,因此傳輸層選擇UDP協(xié)議,網(wǎng)絡(luò)層選擇IP協(xié)議用于格式封裝,同時(shí)去掉UDP和IP的首部,只保留數(shù)據(jù)包以降低硬件開(kāi)銷[1]?;诤?jiǎn)化的UDP/IP協(xié)議棧的以太網(wǎng)格式如圖1所示。其中,傳輸層、網(wǎng)絡(luò)IP層、用戶層為處理用戶邏輯的上層協(xié)議,數(shù)據(jù)鏈路層為以太網(wǎng)MAC層。
圖1 簡(jiǎn)化的協(xié)議棧格式
FPGA利用自身硬件加速及并行處理的優(yōu)勢(shì)在大規(guī)模信號(hào)處理方面應(yīng)用廣泛,但對(duì)于復(fù)雜的數(shù)據(jù)處理并不擅長(zhǎng),但PC具備這種數(shù)據(jù)處理能力?;诖吮尘?,設(shè)計(jì)一種嵌入式的數(shù)據(jù)通信接口將以太網(wǎng)接入系統(tǒng)平臺(tái),通過(guò)高速以太網(wǎng)接口將數(shù)據(jù)傳送至PC,由PC完成復(fù)雜運(yùn)算。利用Xilinx的TEMAC核結(jié)合自定義簡(jiǎn)化協(xié)議棧,實(shí)現(xiàn)系統(tǒng)平臺(tái)與PC間的高速數(shù)據(jù)傳輸。
為了完成整體的高速以太網(wǎng)數(shù)據(jù)通信接口,不僅要實(shí)現(xiàn)鏈路層的MAC控制和物理層的收發(fā),還需要實(shí)現(xiàn)對(duì)用戶邏輯部分的上層協(xié)議處理?;诤?jiǎn)化后的UDP/IP協(xié)議棧,設(shè)計(jì)數(shù)據(jù)通信接口的總體框架包含3個(gè)部分:上層協(xié)議的數(shù)據(jù)包封裝與解析、數(shù)據(jù)鏈路層的MAC控制器、物理層的GTX收發(fā)器,設(shè)計(jì)框架如圖2所示。其中,物理層采用Xilink 7系列的FPGA中GTX收發(fā)器內(nèi)置的串并轉(zhuǎn)換、線路編碼、時(shí)鐘修正以及數(shù)據(jù)恢復(fù)等功能電路實(shí)現(xiàn)物理層傳輸[2],因此本研究著重研究上層協(xié)議的數(shù)據(jù)包封裝與解析和數(shù)據(jù)鏈路層的MAC控制器。
圖2 高速以太網(wǎng)接口總體設(shè)計(jì)框架
上層協(xié)議的用戶邏輯處理主要包括MAC地址過(guò)濾、存儲(chǔ)地址解析、自定義協(xié)議解析以及數(shù)據(jù)包封裝4個(gè)部分。MAC地址過(guò)濾只接收與FPGA端的MAC地址匹配的數(shù)據(jù)包以實(shí)現(xiàn)地址過(guò)濾;存儲(chǔ)地址解析實(shí)現(xiàn)PC端MAC的提取和儲(chǔ)存;自定義協(xié)議解析實(shí)現(xiàn)數(shù)據(jù)字節(jié)拆解,結(jié)合PC端MAC地址作為數(shù)據(jù)發(fā)送的目標(biāo)地址;數(shù)據(jù)包封裝在創(chuàng)建初始數(shù)據(jù)幀的基礎(chǔ)上完成增加目標(biāo)地址、幀類型等處理動(dòng)作后進(jìn)行數(shù)據(jù)傳輸。
在數(shù)據(jù)幀rx_axis_mac_tdata中利用字段Address Field存儲(chǔ)接收數(shù)據(jù)目標(biāo)主機(jī)的物理地址。rx_axis_mac_tvalid代表MAC輸出是否有效,F(xiàn)PGA端接收之后檢查目標(biāo)地址pkt_mac_reg,判斷與自身地址my_mac相同則作為接收數(shù)據(jù)包去掉14個(gè)字節(jié)的幀頭接收之后的有效數(shù)據(jù)。不相同則進(jìn)行復(fù)位[3]。整體過(guò)濾流程如圖3所示。
圖3 地址過(guò)濾流程
去掉14字節(jié)幀頭之后的有效數(shù)據(jù)存儲(chǔ)于64位寄存器out_cmd_i[63:0]之中,預(yù)先定義好存儲(chǔ)方式dest_mac_redister[47:0],比較out_cmd_i[63:0]中地址字節(jié)out_cmd_i[59:32]和預(yù)先地址字節(jié)ADD_DEST_MAC_L/H。如果與ADD_DEST_MAC_L相同,則FPGA端的數(shù)據(jù)包發(fā)送目標(biāo)地址的低32位,如果與ADD_DEST_MAC_H相同,則FPGA端的數(shù)據(jù)包發(fā)送目標(biāo)地址的高16位,最終解析出PC端的MAC地址,存儲(chǔ)在dest_mac_redister[47:0]之中。
去掉幀頭后的有效數(shù)據(jù)包括1個(gè)字節(jié)的操作類型OPCODE、1個(gè)字節(jié)的信道編碼Channel Num、4個(gè)字節(jié)的數(shù)據(jù)塊大小Block Size、4個(gè)字節(jié)的幀起始位置Start Address,34個(gè)字節(jié)的填充Zero Padding[4]。在接收到存儲(chǔ)地址解析模塊的PC端MAC地址,將其作為發(fā)送FPGA端的目標(biāo)地址之后,讀取數(shù)據(jù)庫(kù)的幀字段里的Channel Num、Start Address、Block Size字段,將這3個(gè)字段加在數(shù)據(jù)包前端作為控制信息后發(fā)送響應(yīng)包至PC端。
由于以太網(wǎng)的數(shù)據(jù)鏈路層最終輸出是8位的GMII數(shù)據(jù),因此需將64位數(shù)據(jù)進(jìn)行拆分,每個(gè)時(shí)鐘周期傳輸8位,以tx_axis_mac_tdata代表封裝好的標(biāo)準(zhǔn)數(shù)據(jù)幀,op_code代表操作類型,out_data_reg代表待發(fā)送數(shù)據(jù)包[5]。整體封裝過(guò)程如圖4所示。
圖4 數(shù)據(jù)包封裝過(guò)程
數(shù)據(jù)鏈路層的高速以太網(wǎng)MAC控制器采用GTX串行收發(fā)器與外部PHY芯片進(jìn)行連接,基于TEMAC嵌入式三態(tài)以太網(wǎng)MAC硬核實(shí)現(xiàn),控制器整體實(shí)現(xiàn)過(guò)程如圖5所示。
圖5 以太網(wǎng)MAC控制器
(1) 接收接口:接收數(shù)據(jù)后判斷是否符合協(xié)議標(biāo)準(zhǔn),去除添加區(qū)域,提供接收結(jié)果信號(hào)。
(2) 發(fā)送接口:在待發(fā)送數(shù)據(jù)前增加前導(dǎo)編碼Preamble、起始符SFD、校驗(yàn)序列FCS以及填充字段Pad使數(shù)據(jù)滿足以太網(wǎng)幀的長(zhǎng)度規(guī)范。
(3) 8 bit用戶接口:為了支持GMII接口協(xié)議,用戶接口采用8 bit接口。
(4) GMII接口:將數(shù)據(jù)轉(zhuǎn)換為GMII格式,簡(jiǎn)化外部處理邏輯。
(5) PCS/PMA接口:與GTX收發(fā)器相連,將內(nèi)部并行接口GMII轉(zhuǎn)換為串行接口SGMII,利用串行收發(fā)器與物理層芯片通信[6]。
(6) 管理接口:采用AXI4-Lite總線實(shí)現(xiàn)寄存器配置。
為了驗(yàn)證設(shè)計(jì)的高速以太網(wǎng)數(shù)據(jù)通信接口的功能以及性能,針對(duì)接口傳輸準(zhǔn)確性以及傳輸性能2個(gè)方面進(jìn)行了測(cè)試。PC端軟件采用VS軟件,在winpcap驅(qū)動(dòng)的基礎(chǔ)上構(gòu)建數(shù)據(jù)包。FPGA端采用26 MHz地寫時(shí)鐘,輸入數(shù)據(jù)流為416Mbps。對(duì)于傳輸?shù)娜我庀噜彅?shù)據(jù)進(jìn)行差值運(yùn)算,相差為1則認(rèn)為連續(xù),沒(méi)有丟幀[7]。每個(gè)數(shù)據(jù)塊由204 800連續(xù)數(shù)據(jù)構(gòu)成,每個(gè)數(shù)據(jù)為2字節(jié),則數(shù)據(jù)塊大小為409 600bytes,得到輸出數(shù)據(jù)塊如下:
Blk Number=336
Prevblk last val=40204
currblk first val=40205
currblk 2nd val=40206
currblk 3rd val=40207
currblk 4 th val=40208
currblk last val=48396
Blk Number=337
Prevblk last val=48396
currblk first val=48397
currblk 2nd val=48398
currblk 3rd val=48399
currblk 4 th val=48400
currblk last val=56588
Blk Number=338
Prevblk last val=56588
currblk first val=56589
currblk 2nd val=56590
currblk 3rd val=56591
currblk 4 th val=56592
接下來(lái)將FPGA寫時(shí)鐘頻率分別定為30.72和61.44 MHz,利用WireShark抓包工具抓取數(shù)據(jù)并進(jìn)行統(tǒng)計(jì)分析,根據(jù)數(shù)據(jù)包總數(shù)、丟包數(shù)、傳輸速率等信息判斷通信接口的性能情況[8]。在寫時(shí)鐘頻率為30.72 MHz時(shí),理論上的傳輸速度應(yīng)為30.72 MHz×16 bit=491.52 Mbps,實(shí)際傳輸速率為488.82 Mbit/s,丟包率為3.6×10-6。在寫時(shí)鐘頻率為61.44 MHz時(shí),理論上的傳輸速度應(yīng)為61.44 MHz×16 bit=983.04 Mbps,實(shí)際傳輸速率為942.21 Mbit/s,丟包率為0.23%。
由此可知,本研究設(shè)計(jì)的高速以太網(wǎng)數(shù)據(jù)通信接口在寫時(shí)鐘頻率為26 Mhz時(shí)未出現(xiàn)丟包現(xiàn)象,在30.72 MHz時(shí)丟包率很低幾乎可以忽略不計(jì),在達(dá)到千兆極限的傳輸速率時(shí),丟包率僅在0.23%,在預(yù)期范圍之內(nèi)。
本研究基于FPGA技術(shù)在簡(jiǎn)化的UDP/IP協(xié)議棧的基礎(chǔ)上設(shè)計(jì)了高速以太網(wǎng)MAC控制器,并對(duì)用戶邏輯的數(shù)據(jù)包封裝及解析進(jìn)行了詳細(xì)設(shè)計(jì),經(jīng)過(guò)測(cè)試驗(yàn)證接口準(zhǔn)確性高、性能優(yōu)異。但協(xié)議棧相對(duì)簡(jiǎn)單,TCP協(xié)議相較于UDP協(xié)議更為安全,后續(xù)將對(duì)TCP/IP協(xié)議棧進(jìn)行深入研究,以期在硬件開(kāi)銷允許的情況下實(shí)現(xiàn)更安全更復(fù)雜的通信接口。