1. 程式人生 > >FPGA設計千兆乙太網MAC(2)——乙太網協議及設計規劃

FPGA設計千兆乙太網MAC(2)——乙太網協議及設計規劃

  上篇該系列博文中通過MDIO介面實現了PHY晶片的狀態檢測,驗證其已處於1000M 全雙工工作模式。在設計MAC邏輯之前,要先清楚MAC與PHY之間的介面以及乙太網協議細節,這樣才能保證網路的相容性。本文內容多來自Xilinx官方文件pg051 tri-mode-eth-mac.

1.GMII介面

  此處使用較簡單的GMII介面,介面列表及說明如下:

   TX方向時鐘tx_mac_aclk由FPGA給出,RX方向時鐘gmii_rx_clk由PHY晶片經過內部CDR模組從接收資料中恢復出來,時鐘頻率均為125MHz。TX和RX方向基本均由三個訊號組成:d en/dv er。

2.乙太網協議規範

  MAC層的功能就是“成幀解幀”,接下來檢視乙太網資料幀結構和規則。

  前導碼、幀頭符以及FCS在TX方向被MAC新增,在RX方向被剔除。接收端MAC邏輯會將SFD作為接收幀起始時刻。

  關於長度/型別欄位之前有所提及,Ethernet II幀長度/型別域解釋為上層協議型別(欄位值大於等於1536,即十六進位制的0x0600),而IEEE802.3同樣位置是長度欄位(欄位值小於等於1500,即十六進位制的0x05DC)。若為EthernetII幀,接收端MAC不做處理。若為IEEE802.3幀,MAC則檢測幀長度是否與該欄位匹配,並在必要時去除pad域。

  Pad域用來確保前導碼和SFD之後的部分長度在64byte以上,也就是保證pad+data≥46byte。當data≥46byte時,不需要pad域。

  FCS採用CRC32,多項式為:

  接收端MAC會檢測每個幀的FCS值,如果接收FCS錯誤,則MAC指示給上層使用者接收到一個錯誤幀。

   IEEE 802.3-2008規定,乙太網幀間隔為96-bit時間以上。對於千兆網來說,t = Tbit*96 = (1/1000*1000*1000)*96s = 96ns。

3.流量控制高階話題

當收發兩端的時鐘頻率出現細微偏差,持續一段時間後會導致頻率較慢的一方快取溢位。此時較慢一方需要告訴另一方暫停一段時間傳送資料包以減輕自身快取壓力。“告訴”這一動作通過傳送指定控制幀完成。

  其中mac control parameters代表對方暫停的時間單位個數,在千兆網中若該資料為1則表示對方需暫停傳送資料包512ns。當一方快取即將溢位,則傳送暫停幀。若此時正在傳送資料幀,則等待當前幀傳送完成。接收方收到pause幀後,依次檢測目的地址及型別域,若目的地址為多播地址(01-80-c2-00-00-01)且符合pause幀操作碼,則提取控制引數數值並通過拉低傳送側rdy訊號來暫停傳送。

4.系統設計

  先定義MAC介面:使用者側包括髮送資料通道,接收資料通道以及事件統計通道。PHY晶片側同樣有傳送通道 接收通道和MDIO管理通道。使用者側資料位寬32bit,PHY晶片側位寬8bit。

  MAC內部設計結構可以參照Altera的乙太網MAC IP核,可見內部主要由傳送和接收處理邏輯、快取部分、配置與統計以及MDIO控制模組五部分組成。

  模組劃分和介面定義完成後,開始寫RTL程式碼。後續以快取及位寬轉換模組為例,依次進行程式碼編寫 自動對比模擬 時序約束與STA 線上除錯等步驟。