史振國 李德和 尹虎
【摘要】 本文介紹了一種高效傳輸速率的千兆以太網(wǎng)通信系統(tǒng)設(shè)計方法。該方法采用ALTERA內(nèi)部的MAC核加外部PHY芯片實現(xiàn),通信協(xié)議采用UDP/IP協(xié)議方式,并實現(xiàn)了ARP請求和應(yīng)答功能可以實現(xiàn)大規(guī)模系統(tǒng)級聯(lián),而且整個通信系統(tǒng)都是用verilog 純硬件語言編寫實現(xiàn)。經(jīng)實驗驗證,該方法與傳統(tǒng)軟硬結(jié)合設(shè)計方法相比通信速率要高兩倍以上。
【關(guān)鍵詞】 千兆以太網(wǎng) UDP/IP ARP MAC核 FPGA 高效傳輸速率
在高速數(shù)據(jù)采集領(lǐng)域,隨著速度的增加,數(shù)據(jù)量越來越巨大,限于芯片GPIO的速度限制,傳統(tǒng)的并行總線方式已經(jīng)不能滿足設(shè)備的需求。高速以太網(wǎng)以其速度快、網(wǎng)絡(luò)成熟的特點,逐漸受到數(shù)據(jù)采集設(shè)備廠商的歡迎。但是基于Altera公司FPGA平臺上,采用SOPC技術(shù)實現(xiàn)的千兆以太網(wǎng)方案,自身的操作系統(tǒng)耗時較多,實測速度只能達(dá)到200Mbit/s,無法滿足高速采集設(shè)備的需求。因此本文設(shè)計采用純硬件描述語言實現(xiàn)千兆以太網(wǎng)UDP及ARP通信,在精簡通信過程的基礎(chǔ)上,提高了以太網(wǎng)TCP/IP協(xié)議棧的運行效率,經(jīng)驗證該方案能夠速度能到達(dá)到800Mbit/s以上,能夠滿足高速數(shù)據(jù)傳輸?shù)男枰?/p>
一、系統(tǒng)基本架構(gòu)
所設(shè)計的千兆網(wǎng)通信系統(tǒng)的基本架構(gòu)如圖1所示,采用自頂向下的設(shè)計方法將整個系統(tǒng)劃分為如下幾大功能模塊:三速MAC核、MAC核的寄存器配置模塊、發(fā)送和接收FIFO緩沖模塊、協(xié)議解析模塊、ARP請求和應(yīng)答模塊、UDP/IP數(shù)據(jù)打包和解析模塊。
整個系統(tǒng)的所有功能模塊都采用verilog 純硬件語言編寫實現(xiàn),包括對MAC核的初始化配置和控制,以及協(xié)議判斷。而傳統(tǒng)方法對這部分都是采用嵌入式系統(tǒng)進(jìn)行軟件控制,工作效率低下。該系統(tǒng)還增加了ARP請求和應(yīng)答功能,可以實現(xiàn)大規(guī)模系統(tǒng)集聯(lián),例如水聽器監(jiān)測系統(tǒng)需要進(jìn)行大范圍的數(shù)據(jù)采集,往往需要多個數(shù)據(jù)采集卡同時進(jìn)行數(shù)據(jù)上傳,即實現(xiàn)一臺上位機對不同采集卡進(jìn)行控制和數(shù)據(jù)區(qū)分。有了ARP請求和應(yīng)答功能,多個采集卡只需要一個交換機與上位機相連,上位機通過下發(fā)ARP請求,下層的采集卡進(jìn)行ARP協(xié)議解析和應(yīng)答即可讓上位機知道各個采集卡的MAC地址和IP地址,從而對各個采集卡進(jìn)行不同的控制并區(qū)分各個采集卡上傳的數(shù)據(jù)信息。
二、主要功能模塊設(shè)計
2.1 MAC核的寄存器配置模塊
本設(shè)計調(diào)用了ALTERA內(nèi)部的三速MAC核[1],要想讓其正常工作必須對MAC控制寄存器進(jìn)行基本配置從而來控制MAC內(nèi)部的功能模塊工作起來。涉及的主要寄存器配置有:命令配置(command config)、MAC地址(mac_0/ mac_1)、最大幀長(frame_length)、外部PHY地址(mdio_addr0/mdio_addr1),以及內(nèi)部FIFO的一些閾值(al_ empty、al_full、sec_empty、sec_full)。三速MAC核的使用手冊有詳細(xì)的配置說明,采用Avalon-MM總線方式,設(shè)計一個狀態(tài)機,每個狀態(tài)都是一個地址對應(yīng)一個寄存器配置即可。
2.2協(xié)議解析模塊、ARP請求解析模塊、UDP/IP數(shù)據(jù)解析模塊
FIFO_R是接收緩沖模塊,接收MAC核發(fā)送的MAC幀數(shù)據(jù),協(xié)議解析模塊的功能就是對MAC幀數(shù)據(jù)進(jìn)行解析從而判斷上位機發(fā)來的是ARP請求還是IP協(xié)議數(shù)據(jù)包,如果是ARP請求就進(jìn)行ARP協(xié)議解析提取上位機的MAC地址和IP地址,反之如果是IP協(xié)議就進(jìn)行UDP/IP協(xié)議解析提取有用的數(shù)據(jù)信息給底層應(yīng)用。
圖2是三個功能模塊的協(xié)議解析狀態(tài)圖,首先對數(shù)據(jù)轉(zhuǎn)換模塊的數(shù)據(jù)進(jìn)行數(shù)據(jù)讀取,通過對讀地址rdaddr進(jìn)計數(shù)提取幀類型frame_type,然后對frame_type進(jìn)行判斷,如果frame_type=16h0806說明是ARP協(xié)議類型,狀態(tài)機進(jìn)入st2狀態(tài)進(jìn)行ARP協(xié)議解析,按照圖3所示的以太網(wǎng)MAC幀格式進(jìn)行計數(shù)分解并將響應(yīng)的參數(shù)用不同的寄存器進(jìn)行存儲,關(guān)鍵參數(shù)有操作碼(operate_code)、發(fā)送端MAC地址、發(fā)送端IP地址、目的端IP地址,如果operate_code= 16h0001說明是ARP請求,然后判斷目的端IP地址是否為FPGA的IP地址,如果是就發(fā)出ARP應(yīng)答使能信號給ARP應(yīng)答模塊,當(dāng)rdaddr計數(shù)器達(dá)到ARP幀長度時說明整個ARP幀解析完成進(jìn)入狀態(tài)st4結(jié)束解析復(fù)位rdaddr=0,狀態(tài)機進(jìn)入st0等待新的一輪數(shù)據(jù);如果frame_type=16h0800說明是IP協(xié)議類型,狀態(tài)機進(jìn)入st3狀態(tài)進(jìn)行IP協(xié)議解析,按照圖3所示的以太網(wǎng)MAC幀格式進(jìn)行計數(shù)分解并將響應(yīng)的參數(shù)用不同的寄存器進(jìn)行存儲,這里的參數(shù)主要是對數(shù)據(jù)解調(diào)發(fā)送的參數(shù)配置命令,包括脈沖寬度、脈沖周期、ADC偏移量等,當(dāng)rdaddr計數(shù)器達(dá)到IP幀長度時說明整個IP幀解析完成進(jìn)入狀態(tài)st4結(jié)束解析復(fù)位rdaddr=0,狀態(tài)機進(jìn)入st0等待新的一輪數(shù)據(jù)。
2.3 ARP應(yīng)答模塊、UDP/IP數(shù)據(jù)打包模塊
該模塊主要完成ARP應(yīng)答模塊和發(fā)送數(shù)據(jù)的UDP/IP協(xié)議打包功能。簡易狀態(tài)機設(shè)計如圖4所示。
首先判斷協(xié)議解析模塊發(fā)送過來的ARP請求信號arp_ reply_enable信號是否有效,有效說明上位機發(fā)起了ARP請求,狀態(tài)機進(jìn)入st1狀態(tài),按照圖3所示的MAC幀格式進(jìn)行ARP應(yīng)答,將FPGA的MAC和IP地址封裝起來發(fā)給MAC核發(fā)送緩沖模塊,當(dāng)wraddress=arp_length,說明整個ARP數(shù)據(jù)幀發(fā)送完畢進(jìn)入st3狀態(tài)復(fù)位,重新進(jìn)入初狀態(tài)st0,判斷data_ok是否有效,data_ok=1說明數(shù)據(jù)解調(diào)板有數(shù)據(jù)發(fā)送,進(jìn)入st2狀態(tài),將要發(fā)送的數(shù)據(jù)按照圖3所示的MAC幀格式將數(shù)據(jù)封裝成IP協(xié)議幀格式發(fā)送給MAC核發(fā)送緩沖模塊,當(dāng)wraddress= ip_length,說明一個完整的IP數(shù)據(jù)包發(fā)送完進(jìn)入st3狀態(tài)復(fù)位,重新進(jìn)入初狀態(tài)st0等待新一輪的數(shù)據(jù)。
三、測試結(jié)果
本設(shè)計在開發(fā)板上做了測試驗證,選用的FPGA芯片是ALTERA的EP4CE40F23I7,PHY芯片是88E1111[2],接口采用GMII方式。圖5是用網(wǎng)絡(luò)封包分析軟件wireshark捕獲的上位機下發(fā)的ARP請求,從圖中數(shù)據(jù)窗口看發(fā)送的ARP請求協(xié)議數(shù)據(jù)報可以看出,上位機的MAC地址為50:7B:9D:8C:81:71,IP地址為192.168.50.27,它以網(wǎng)絡(luò)廣播的方式尋找IP地址為192.168.50.1的FPGA對應(yīng)的MAC地址是多少。
圖6是FPGA接收到上位機的ARP請求之后反饋的ARP應(yīng)答數(shù)據(jù)報,從數(shù)據(jù)窗口可以看到IP地址為192.168.50.1的FPGA將自己的MAC地址00:1c:23:17:4a:cb準(zhǔn)確的反饋給上位機。
圖7是用wireshark捕獲的所設(shè)計的千兆網(wǎng)發(fā)送數(shù)據(jù)傳輸速率,從圖中可以看出,每秒上傳的IP數(shù)據(jù)包為82243,每包傳輸?shù)挠行DP數(shù)據(jù)為1454字節(jié),即傳輸速率約為900Mbits/s。
四、結(jié)論
本文基于FPGA內(nèi)部的MAC核加外部PHY芯片的硬件架構(gòu)實現(xiàn)一種高效傳輸速率的千兆以太網(wǎng)通信系統(tǒng)設(shè)計方法。經(jīng)實驗證明,用純硬件語言verilog 實現(xiàn)UDP/IP和ARP協(xié)議和MAC核控制方法通信效率可以達(dá)到90%,比傳統(tǒng)采用SOPC等嵌入式操作系統(tǒng)設(shè)計方法相比通信速率要高兩倍以上。
參 考 文 獻(xiàn)
[1] Triple Speed Ethernet MegaCore Function User Guide[M].ALTERA,V9.1,November 2009.
[2] MARVELL corp. 88E1111 datasheet[CP].2004.
[3]謝希仁,計算機網(wǎng)絡(luò)(第5版)[M],北京:電子工業(yè)出版社,2010.