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

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

官方文檔 系統 指定 wid d+ 大於等於 在線 導致 span

  上篇該系列博文中通過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 在線調試等步驟。

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