《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動態(tài) > 基于FPGA的Ethernet解包電路

基于FPGA的Ethernet解包電路

2009-01-12
作者:周 飚1, 謝曉陽2

??? 摘? 要: 針對傳統(tǒng)微處理器平臺中存在的接口速率瓶頸問題,提出了基于現(xiàn)場可編程門陣列(FPGA) 的以太網(wǎng)解包電路的硬件實現(xiàn)方法。主要介紹了接收數(shù)據(jù)幀的實現(xiàn)方法,該設(shè)計具有通用性好、可擴展性強以及方便易行等優(yōu)點, 為高速數(shù)據(jù)采集系統(tǒng)的網(wǎng)絡(luò)化提供了很好的解決方案。?

??? 關(guān)鍵詞: 解包; FPGA; 以太網(wǎng)

?

??? 傳統(tǒng)以PC為中心的互聯(lián)網(wǎng)應(yīng)用現(xiàn)已開始轉(zhuǎn)向以嵌入式設(shè)備為中心。據(jù)網(wǎng)絡(luò)專家預(yù)測,將來在互聯(lián)網(wǎng)上傳輸?shù)男畔⒅?有70%來自小型嵌入式系統(tǒng)。因此,對嵌入式系統(tǒng)接入Internet 網(wǎng)絡(luò)的研究是有必要的。?

??? 一般情況下,以太網(wǎng)卡用普通的MCU可以完成數(shù)據(jù)的接收/發(fā)送任務(wù)[1]。但當(dāng)系統(tǒng)中要求接收/發(fā)送的數(shù)據(jù)特別多時,僅僅依靠普通MCU的資源往往難以完成任務(wù)。此時一般只能采取多MCU聯(lián)機處理模式,或者依靠其它芯片擴展來完成任務(wù)。這樣不僅增加了大量的外部電路和系統(tǒng)成本,而且大大增加了系統(tǒng)的復(fù)雜性。?

??? 利用FPGA的I/O端口多,而且可以自由編程定義其功能的特點,配以Verilog HDL編寫的內(nèi)部執(zhí)行程序就可以完成其功能。代碼執(zhí)行是按照并行處理的,而且FPGA硬件的速度是ns級的,所以在高速的數(shù)據(jù)采集和接收的過程中具有重大意義。?

??? 本文根據(jù)IEEE 802.3數(shù)據(jù)幀格式在MII接口提供數(shù)據(jù)的情況下,利用FPGA設(shè)計完成整個數(shù)據(jù)包的接收過程。?

1 相關(guān)理論?

??? 以太網(wǎng)是在 20 世紀(jì) 70 年代研制開發(fā)的一種基帶局域網(wǎng)技術(shù),使用同軸電纜作為網(wǎng)絡(luò)媒體,采用載波多路訪問和沖突檢測(CSMA/CD)[2]機制,數(shù)據(jù)傳輸速率達(dá)到10Mb/s。但是如今以太網(wǎng)更多地被用來指各種采用CSMA/CD技術(shù)的局域網(wǎng)。以太網(wǎng)的幀格式與IP是一致的,特別適合于傳輸 IP 數(shù)據(jù)。?

1.1 以太網(wǎng)MAC子層協(xié)議?

??? IEEE 802協(xié)議標(biāo)準(zhǔn)系列中,數(shù)據(jù)鏈路層包括邏輯鏈路控制(LLC)子層和媒體訪問控制(MAC) 子層。其中MAC位于LLC和物理層之間,它使LLC 適應(yīng)于不同的媒體訪問技術(shù)和物理媒體。MAC單獨作為一個子層,就不會因為媒體訪問方法的改變而影響較高層次的協(xié)議。MAC由數(shù)據(jù)拆裝和媒體訪問管理兩個模塊組成,完成數(shù)據(jù)幀的封裝、解封、發(fā)送和接收功能。以太網(wǎng)數(shù)據(jù)幀封裝格式如圖1所示,其中目的地址、源地址、長度/類型和數(shù)據(jù)4個字段由上一層協(xié)議模塊生成。傳送數(shù)據(jù)幀時,數(shù)據(jù)封裝模塊自動在待傳輸數(shù)據(jù)前面添加7個字節(jié)的前導(dǎo)碼和1個字節(jié)的定界符,并在數(shù)據(jù)傳送結(jié)束時加發(fā)4個字節(jié)的循環(huán)冗余校驗碼,如果數(shù)據(jù)長度小于46字節(jié),則會自動進行數(shù)據(jù)填充以達(dá)到要求的最短長度。接收數(shù)據(jù)幀時,數(shù)據(jù)拆裝模塊將自動丟棄前導(dǎo)碼和定界符2個字段。?

?

?

1.2 CSMA/CD協(xié)議?

??? 媒體訪問管理模塊主要實現(xiàn)CSMA/CD(Carrier Sense Multiple Access with Collision Detection)協(xié)議[4]。CS2MA/CD是一種分布式介質(zhì)訪問控制協(xié)議,使網(wǎng)中的多個站(節(jié)點) 可以共享傳輸介質(zhì)。發(fā)送數(shù)據(jù)幀時,節(jié)點首先進行載波監(jiān)聽,當(dāng)介質(zhì)空閑時開始發(fā)送幀。如果在傳輸過程中與其他節(jié)點產(chǎn)生沖突,則正在傳輸?shù)拿總€節(jié)點必須發(fā)出32bit大小的阻塞信號來加強沖突,以便通知總線上各個站點已發(fā)生沖突,然后隨機延時一段時間重新爭用介質(zhì),再重新傳送數(shù)據(jù)幀。?

??? 以太網(wǎng)用載波偵聽多路訪問/沖突檢測(CSMA/CD)作為它的媒體訪問控制協(xié)議,CSMA/CD定義了以太網(wǎng)節(jié)點為傳輸數(shù)據(jù)如何獲得對網(wǎng)絡(luò)媒體的訪問。?

1.3 介質(zhì)無關(guān)接口(MII)?

??? MII是一個用于互連控制器和收發(fā)器的全新介質(zhì)無關(guān)接口,它是100Mb/s快速以太網(wǎng)開發(fā)工作的一個組成部分。此接口提供了新的物理連接機制以及控制器和收發(fā)器的功能劃分。該接口主要由發(fā)送信號、接收信號、以太網(wǎng)控制信號和管理信號組成。?

1.4 CRC校驗?

??? 利用CRC進行檢錯的過程可簡單描述為:在發(fā)送端根據(jù)要傳送的k位二進制碼序列,以一定的規(guī)則產(chǎn)生一個校驗用的r位監(jiān)督碼(CRC碼),附在原始信息后邊,構(gòu)成一個新的二進制碼序列數(shù)共k+r位,然后發(fā)送出去。在接收端,根據(jù)信息碼和CRC碼之間所遵循的規(guī)則進行檢驗,以確定傳送中是否出錯。?

2 解包電路的設(shè)計?

??? 根據(jù)以太網(wǎng)的工作原理,其接收數(shù)據(jù)過程如下:?

??? (1)網(wǎng)上的站點,若不發(fā)送幀,都處在接收狀態(tài),只要介質(zhì)上有幀在傳輸,這些站點都會接收幀;?

??? (2)接收幀后,首先判斷是否為幀碎片(碰撞),若是,則丟棄;?

??? (3)識別目的MAC地址,若不是,本站地址則丟棄;?

??? (4)判斷幀校驗序列是否有效,若無效則傳輸出錯,丟棄;?

??? (5)判斷類型/長度是否正確,若正確,接收成功。?

??? 其流程圖如圖2所示。 ?

?

?

??? 該解包電路主要完成數(shù)據(jù)幀的接收, 即從物理層PHY芯片接收4 bit半位元數(shù)據(jù),將其轉(zhuǎn)化成以字節(jié)為單位的數(shù)據(jù)并存貯在接收數(shù)據(jù)緩沖區(qū), 按照設(shè)計要求,采用層次結(jié)構(gòu)化的設(shè)計方法,可將該電路劃分為狀態(tài)機模塊、計數(shù)器模塊、地址判斷模塊和CRC校驗?zāi)K。其模塊結(jié)構(gòu)圖如圖3所示。?

?

?

2.1 狀態(tài)機模塊?

??? 接收控制狀態(tài)機是整個接收模塊的核心,負(fù)責(zé)管理各個功能子模塊,檢測總線及實現(xiàn)接收數(shù)據(jù)幀的時序。其接口電路如圖4所示。?

?

?

??? 圖中,MRxClk、Reset、MRxDV、Transmitting是MII接口提供的時鐘、復(fù)位、數(shù)據(jù)有效和無發(fā)送沖突信號。MRxDEqA判斷接收到的數(shù)據(jù)是否為1010, MRxDEqB判斷能否進入接收數(shù)據(jù)狀態(tài),它們用來對狀態(tài)機進行相應(yīng)的控制。ByteCntSmall7是在StatePreamble狀態(tài)下檢測到傳輸數(shù)據(jù)為A能否跳到StateSFD狀態(tài)的條件(不為1即跳轉(zhuǎn))。ByteCntMaxFrame用來判斷接收的字節(jié)是否超出最大字節(jié)數(shù),如果為1即由當(dāng)前狀態(tài)跳轉(zhuǎn)到StateDrop。?

??? 根據(jù)狀態(tài)機模塊的功能,可將其狀態(tài)機劃分為以下狀態(tài): ?

??? StateIdle:??? ?線路空閑狀態(tài)?

??? StatePreambl:? 前導(dǎo)字符檢測狀態(tài)?

??? StateSFD:????? 起始符檢測狀態(tài)?

??? StateData0: ?? 接收低4位狀態(tài)?

??? StateData1: ?? 接收高4位狀態(tài)?

??? StateDrop: ??? 數(shù)據(jù)丟棄狀態(tài);?

??? 接收模塊狀態(tài)轉(zhuǎn)移圖如圖5所示。通常接收模塊處于StateIdle 狀態(tài)并監(jiān)聽總線的狀態(tài),當(dāng)檢測到以太網(wǎng)幀時自動進入StateSFD 狀態(tài),此時如果接收到以太網(wǎng)數(shù)據(jù)幀的幀定界符,并且與前一個數(shù)據(jù)幀之間的時間間隔大于最小幀間間隙,則接收模塊進入數(shù)據(jù)接收狀態(tài)開始接收數(shù)據(jù)。處于StateData0 狀態(tài)時接收字節(jié)的低4 位,而處于StateDatal 狀態(tài)時接收字節(jié)的高4 位,將接收到的完整字節(jié)數(shù)據(jù)存儲到接收數(shù)據(jù)緩沖區(qū)。如果接收的數(shù)據(jù)字節(jié)數(shù)超過允許的最大幀長度,則接收模塊進入StateDrop 狀態(tài),此時丟棄后面的數(shù)據(jù)。當(dāng)全部數(shù)據(jù)傳輸完畢即總線處于空閑時,接收模塊重新處于StateIdle 狀態(tài),等待接收下一個數(shù)據(jù)幀。?

?

?

??? 其狀態(tài)轉(zhuǎn)換條件的Verilog[5]描述如下:?

??? assign StartIdle =~MRxDV & (StateDrop | StatePreamble | StateSFD | (|StateData));?

??? assign StartPreamble = MRxDV & ~MRxDEqA & (StateIdle & ~Transmitting);?

??? assign StartSFD = MRxDV & MRxDEqA & (StateIdle & ~Transmitting | StatePreamble) &~ByteCntSmall7;?

??? assign StartData0 = MRxDV &(StateSFD & MRxDEqB & IFGCounterEq24 | StateData1);?

??? assign StartData1 = MRxDV & StateData0 & (~ByteCntMaxFrame);?

??? assign StartDrop = MRxDV & ( Transmitting | StateSFD & ~I(xiàn)FGCounterEq24 &? MRxDEqB| StateData0 & ByteCntMaxFrame);?

2.2 計數(shù)器模塊?

??? 計數(shù)器模塊用以檢測接收到的數(shù)據(jù)幀與前一幀之間是否滿足最小幀間間隔的要求,如果不滿足則將它丟棄。 接收字節(jié)計數(shù)器用以存儲接收幀的字節(jié)長度,判斷接收幀長度是否滿足要求(在最小幀長度與最大幀長度之間)。其接口電路如圖6所示。?

?

?

??? 該模塊主要完成三個計數(shù)功能:(1)是否連續(xù)檢測到7個以上的1010;(2)接收到組字節(jié)數(shù)據(jù)計數(shù)器;(3)連續(xù)兩個數(shù)據(jù)幀之間的間隔時間與最短時間大小關(guān)系。?

??? MRxDEqA是判斷接收到的數(shù)據(jù)是否為1010,如果檢測正確即可進行計數(shù)來判斷能否跳轉(zhuǎn)到下一狀態(tài)StateSFD; MRxDEqB用來判斷能否進入接收數(shù)據(jù)狀態(tài)StateData0;MaxFL是給定能接收的數(shù)據(jù)的最大數(shù)。?

??? 輸出信號ByteCntEq2、ByteCntEq3、ByteCntEq4、ByteCntEq5、ByteCntEq6、ByteCntEq7對接收的前6個字節(jié)計數(shù)來進行相應(yīng)的地址判斷操作。?

2.3 地址判斷模塊?

??? 地址判斷模塊用以檢查幀的目的地址字段是否與本站地址相匹配,如果不匹配,則說明不是發(fā)送給本站的而將它丟棄掉。其接口電路如圖7所示。?

?

?

??? 地址字段包括目的地址字段DA和源地址字段SA。目的地址字段占6個字節(jié),用于標(biāo)識接收站點的地址,它可以是單個的地址,也可以是組地址或廣播地址。DA字段最高位為“0”表示單個的地址,該地址僅指定網(wǎng)絡(luò)上某個特定站點;DA字段最高位為“1”、其余位不為全“1”表示組地址,該地址指定網(wǎng)絡(luò)上給定的多個站點;DA字段為全“1”,則表示廣播地址,該地址指定網(wǎng)絡(luò)上所有的站點。源地址字段也占2個或6個字節(jié),但其長度必須與目的地址字段的長度相同,它用于標(biāo)識發(fā)送站點地址。在6字節(jié)地址字段中,可以利用其48位中的次高位來區(qū)分是局部地址還是全局地址。?

???? ByteCntEq2、ByteCntEq3、ByteCntEq4、ByteCntEq5、ByteCntEq6和ByteCntEq7依次對應(yīng)接收到的1~6個字節(jié)。即目的地址通過對這6個字節(jié)和本地地址的比較可以判斷是否接收這個數(shù)據(jù)。RxEndFrm是數(shù)據(jù)接收結(jié)束信號,應(yīng)對地址比較結(jié)果進行保持到數(shù)據(jù)接收結(jié)束為止。MRxAddressValid是地址比較的結(jié)果。?

2.4 CRC校驗?zāi)K?

??? 該模塊主要完成4位并行數(shù)據(jù)的CRC-32校驗,所進行的是無延遲的方法。IEEE802.3協(xié)議規(guī)定,以太網(wǎng)的FES(幀校驗序列)域以CRC-32為基礎(chǔ)[6],并且在編碼時首先將信息碼的最初4個字節(jié)取反碼,對目的地址、源地址、長度/類型域、數(shù)據(jù)域、PAD域求出基本CRC-32碼之后再將結(jié)果取反,最后的結(jié)果才是FCS。其接口電路如圖8所示。?

?

?

3 解包電路功能仿真與綜合結(jié)果?

??? 本文采用Altera 公司的Flex系列Flex6000 芯片,整個設(shè)計全部采用Verilog HDL 硬件描述語言來實現(xiàn),并在Active HDL 的設(shè)計平臺上完成整個模塊的設(shè)計,在Quartus進行綜合布局布線仿真。其仿真結(jié)果如圖9、10、11所示。?

?

?

?

?

??? 從圖9可以看出,接收數(shù)據(jù)時狀態(tài)機的變化情況,以及接收數(shù)據(jù)RxData和開始的數(shù)據(jù)位置。??????????? ?

??? 從圖10可以看出地址比較的結(jié)果,當(dāng)?shù)刂窞閺V播時,此時接收數(shù)據(jù)。單一地址情況如上圖,故不列出。?

??? 從圖11可以看出地址比較不一致以及進行的CRC校驗結(jié)果。?

??? 仿真結(jié)果表明,各信號的邏輯功能和時序配合完全達(dá)到了設(shè)計要求。?

??? 本文介紹了一種基于FPGA 的以太網(wǎng)MAC 子層接收數(shù)據(jù)的設(shè)計方法,仿真和綜合結(jié)果表明該解包電路各項功能均達(dá)到預(yù)期要求。通過本模塊可以簡單方便地設(shè)計發(fā)送控制模塊以實現(xiàn)小型嵌入式系統(tǒng)的Internet 網(wǎng)絡(luò)接口,如果再結(jié)合基于FPGA實現(xiàn)的TCP/IP協(xié)議棧及其他輔助功能模塊,不僅可以使小型嵌入式系統(tǒng)接入網(wǎng)絡(luò)更加簡單,而且系統(tǒng)的集成度、穩(wěn)定性將進一步提高。?

參考文獻(xiàn)?

[1] 王蘭,王景存,楊君.單片機系統(tǒng)接入Internet方法的探討[J]. 電子技術(shù),2002,29(8):37-39.?

[2] IEEE Std 802. 3, 2000 Edition, Part 3: Carrier sense?multiple access with collision detection(CSMA/CD) accessmethod and physical layer apecifications S.?

[3] 曹政,李磊,陳明宇. 萬兆以太網(wǎng)媒體訪問控制層研究[J]. 計算機工程,2007(17):31-33?

[4] 謝希仁.計算機網(wǎng)絡(luò)(第4版)[M]. 北京:電子工業(yè)出版社,2003.?

[5] BHASKER J . Verilog HDL 硬件描述語言[M]. 北京:機械工業(yè)出版社,2005.?

[6] 郭熙業(yè),蘇紹璟,王躍科.并行CRC-32校驗碼生成算法研究及其實現(xiàn)[J].電子技術(shù)應(yīng)用,2007,33(5):121-123.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。