曹云鵬, 錢敏, 楊翠軍
(蘇州大學電子信息學院微電子系,江蘇 蘇州 215006)
當前,由Soc組成的嵌入式系統越來越廣泛的進入到人們的生活中,不管在手機、電視、工業控制設備、網絡設備中,都可以看到嵌入式系統的身影。隨著網絡規模的不斷擴大,服務不斷增加,嵌入式互聯網發揮越來越重要的作用。因此,對嵌入式系統以太網通信的研究是非常必要的[1]。目前應用于無線傳感網的嵌入式以太網媒體訪問控制層(MAC)也被廣泛研究[2-3]。
該嵌入式以太網控制器基于FPGA(現場可編程門陣列)平臺實現了符合 IEEE 802.3MAC層通信協議。設計的重點目標是:能夠支持 10 Mb/s、100 Mb/s兩種工作速率、全雙工/半雙工兩種工作模式、基于IEEE802.3x的全雙工流量控制、靈活的收發選項、并能通過媒體無關接口(MII)與以太網物理層(PHY)芯片進行通信。
IEEE 802.3協議把數據鏈路層分為 MAC子層、邏輯鏈路控制(LLC)子層及可選的 MAC控制子層,如圖 1(a)所示。可選的MAC控制子層提供了全雙工流量控制結構。MAC子層使LLC子層適應不同的媒體訪問技術和物理媒體,其主要實現的基本功能有:數據的封裝及解封,包括發送前幀的組合和接收中、接收后的差錯檢測;媒體接入管理,包括媒體分配(即沖突避免)、競爭處理(即沖突的處理)[4]。
以太網數據幀格式如圖 1(b)所示。前導碼用于同步收發雙方,包括 7個字節的 10101010。幀起始符(SFD),代碼為 10101011,表示一幀的開始。目的/源地址中目的地址的最低位用來決定是單播(‘0')還是組播(‘1')。長度/類型域指定待收發數據的長度或傳輸類型。待收發數據由上層協議提供。填充位(PAD)用來保證幀長至少是 64字節。幀校驗序列(FCS)的值通過對目的/源地址、長度/類型、待收發數據和填充位的 CRC(循環冗余校驗碼)的計算得到。

圖 1 OSI參考模型和以太網數據幀格式
該控制器主要由發送/接收模塊、流量控制模塊、MII、寄存器模塊和總線接口模塊等幾部分組成。它通過總線接口連接 WISHBONE片上總線,并與片上處理器和其外圍設備通信;通過MII與以太網物理層芯片連接實現數據收發,并由MIIM(MII管理模塊)實現對物理層芯片的控制和管理,完成自適應等功能,結構參考圖 2。

圖 2 以太網控制器結構框
設計采用 WISHBONE片上總線規范,通過總線接口連接總線并與片上處理器和共享存儲器等通信,其包括主設備接口和從設備接口。從設備接口用于處理器讀寫以太網控制器的配置寄存器和描述符寄存器(BD_RAM),以控制其工作狀態;主設備接口主要用來實現 DMA功能,將要發送的數據從共享存儲器讀到發送 FIFO中或將接收到的數據從接收FIFO存儲到共享主存儲器中。
2.1.1 從設備接口及仲裁的設計
仲裁器的作用是判決設備的使用權。該以太網控制器的發送過程和接收過程分別由發送描述符和接收描述符來控制,發送邏輯和接收邏輯需要訪問 BD_RAM;發送/接收描述符由處理器來配置,處理器通過讀取發送/接收描述符來獲取發送/接收信息。該項目中設計了一個仲裁邏輯,來決定從設備BD_RAM的使用權。
優先級仲裁算法通常有兩種:一種是固定優先級算法,一種是循環優先級算法[5]。固定優先級的的好處是電路簡單、硬件開銷少、但容易發生優先級低的設備“餓死”的現象。在循環優先級中,每個設備都能上升為最高優先級,從而保證了每個設備都能擁有從設備的使用權。
該設計采用循環優先級算法,其控制邏輯通過一個有限狀態機實現。總線主設備(WbM)、以太網發送邏輯(TxL-gic)、以太網接收邏輯(RxLogic)的訪問優先權按照 WbM->RxLogic->TxLogic->WbM的順序進行流轉;當控制權進行切換時,仲裁器總是把 BD_RAM授予最高優先權。當總線主設備通過總線對以太網控制器的 BD_RAM進行操作時,必須要首先通過總線仲裁(第一級仲裁)來獲得總線的控制權。二級仲裁(即BD_RAM訪問仲裁)可能會增加訪問遲滯,因此在設計中,把來自總線的訪問請求作為默認訪問請求,與 Idle狀態交替控制 BD_RAM。
2.1.2 主設備接口及仲裁的設計
主設備接口用來實現 DMA功能,把發送或接收到的數據幀讀出或寫入片上共享存儲器中。發送邏輯和接收邏輯要使用同一主設備接口訪問存儲器,因此可能存在競爭;為解決該問題,在主設備接口模塊中設計了一個仲裁狀態機。
該狀態機由“主接口發送邏輯控制”、“主接口接收邏輯控制”、“存儲器讀”、“存儲器寫”、“主接口存取結束”、“總線釋放”、“發送突發”、“接收突發”幾個信號組成,采用循環優先級算法。發送邏輯和接收交替享有控制優先權,當其中一個進行完一次總線操作后就釋放主設備總線接口,將控制權交給另一方。
“發送突發”信號決定讀操作進入何種工作狀態,當發送FIFO剩余空間和主存儲器的待讀數據都大于 4個字時,該信號置高。當發送邏輯取得主設備接口控制權后,若“發送突發”信號有效,進入突發操作狀態,讀取 4個字的數據。在“突發讀 3”狀態,“發送突發”信號被置低,標志一次突發操作結束,進入釋放總線狀態。當“發送突發”信號為 0時,進入“單次讀”狀態,讀取 1個字后,就釋放總線。接收邏輯進行 DMA操作過程和發送類似。
2.2.1 發送模塊
發送模塊主要實現CSMA/CD協議,包括數據的封裝、媒體管理、信道獲取、沖突處理等。發送模塊把從發送FIFO中讀取數據的數據封裝后轉換為 4比特傳送給物理層芯片,并能完成相關退避(back-off)操作和CRC值的計算,同時監視來自物理層的信號(載波和沖突信號)。
該模塊由發送控制邏輯、發送計數器、隨機數生成器和CRC產生器等組成。其中發送控制邏輯是整個發送模塊的核心,用以管理整個功能子模塊,使之協同工作,狀態轉換如圖 3所示。

圖 3 以太網發送控制狀態機(實線表示在全雙工模式下的狀態轉換;半雙工模式,包括實線和虛線兩部分)
接收模塊主要完成數據的解封和媒體管理。解封功能包括響應物理層芯片的“數據有效”信號,接收 4bits數據,移除前導碼和 SFD后,將其轉化為整字節后存儲到接收 FIFO中,同時完成對目的地址和CRC值的檢測。媒體管理功能包括判斷幀的有效性(即是否為殘幀、幀是否字節對齊等)。
該模塊主要由接收控制器、接收計數器、地址檢測和CRC校驗等子模塊組成。其中接收控制器是整個接收模塊的核心,用以管理各功能子模塊,并實現接收時序,狀態機轉換如圖 4所示。

圖 4 以太網接收控制狀態機(實線表示在全雙工模式下的狀態轉換,半雙工模式下,包括實線和虛線兩部分)
流量控制模塊提供符合IEEE802.3x標準的全雙工流量控制,在MAC控制子層的框架下以暫停操作實現控制機制。主要完成發送幀隊列中插入控制幀,對收到的控制幀分析并完成暫停操作。
該模塊主要包括發送控制幀子模塊、接收控制幀子模塊和控制邏輯三個部分。當高層協議來不及處理連續接收的網絡數據幀時,置位配置寄存器的“暫停幀發送請求”位,流量控制模塊就會產生控制幀交給發送模塊發送出去;此時,發送模塊不再和發送FIFO的數據通道相連。若發送模塊此時有數據幀正在發送,發送控制幀不能打斷當前數據幀的發送,必須等待數據幀發送完畢再發送控制幀;同時由于控制幀格式的要求,必須添加 PAD和 FCS。
接收控制幀子模塊用來監測接收模塊接收到的是否為控制幀;若接收到控制幀,暫停計數器鎖存控制時間參數 N作為初始值,然后每隔一定間隔時間減"1"。當計數器減到0后,發送模塊恢復發送數據。
MIIM用于設置PHY寄存器并獲得其狀態信息,同時與PHY芯片配合完成自適應功能。該模塊是一個兩線接口:MDC(時鐘線)和 MDIO(雙向數據線),主要包括時鐘產生子模塊、輸出控制子模塊、移位寄存器模塊和控制邏輯4個部分。
以太網控制器的自適應功能主要由物理芯片的自動協商功能體現。自動協商功能使在網絡連接的兩端之間可以交換配置信息,自動選擇最優的配置。
設計選用Realtek公司的RTL8201CP作為物理芯片。該芯片支持 10 Mb/s全 /半雙工、100 Mb/s全/半雙工 4種工作模式,自動協商功能自動選擇性能最高的工作方式。
仿真工具采用了產業界應用廣泛的Mentor公司的ModelSim Plus 6.4 SE,用 VerilogHDL語言構建了測試向量,模擬了 WISHBONE總線系統(包括處理器,總線仲裁,存儲器等)以及物理芯片行為級模型,它們和以太網控制器結合在一起構成了一個完整的系統架構。仿真結果表明該設計完全實現了相關功能。
在硬件測試平臺的搭建中,FPGA采用 ALTERA公司的EP3C16Q240C8,外圍接入RTL8201CP作為PHY芯片。通過移植Linux操作系統和相關驅動,成功實現了以太網絡的通信操作[6-7]。圖 5顯示了通過以太網進行 Tftp操作情況;客戶端運行在 MAC測試平臺上,服務器端運行在PC上,同時在PC端安裝Sniffer軟件抓取以太網數據包。

圖5 Sniff軟件抓取的以太網數據包
相對于目前有關報道單純著重于以太網MAC IP的應用或者仿真驗證,提供了一種基于嵌入式 10/100 Mb/s以太網控制器 MAC的設計方法,通過軟件仿真和硬件驗證,證明基于 WISHBONE總線的以太網控制器 MAC設計是有效的,可以在嵌入式網絡系統中應用。鑒于目前嵌入式千兆以太網尚未大規模應用,下一步將對千兆以太網MAC進行研究[8]。
[1]徐功偉,戴學豐,劉樹東,等.嵌入式以太網控制器設計[J].通信技術,2009,42(05):183.
[2]劉希若,袁康敏,李院民.無線傳感器網絡新型 MAC協議研究[J].通信技術,2008,41(08):160-165.
[3]楊斯煒,李鷗.無線傳感器網絡 MAC協議的研究及仿真[J].通信技術,2008,41(02):114-116.
[4]周先軍,周丹,李利榮,等.IEEE802標準分析[J].通信技術,2009,42(07):254-255.
[5]王良清,沈緒榜.PCI總線分組循環仲裁算法的實現[J].微電子學與計算機,2002(01):1-4.
[6]劉啟軍,程明.嵌入式linux中以太網設備驅動的設計與實現[J].通信技術,2009,42(09):146-147.
[7]鄧春健,李文生,黃杰勇,等.嵌入式以太網接口及精簡網絡協議的非常規實現[J].通信技術,2009,42(01):150-151.
[8]曹凌,黃俊.千兆以太網測試設計與實現[J].通信技術,2007,40(11):214-215.