上篇該系列博文中通過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。查看開發板上使用的以太網PHY芯片RTL8211EG-VB datasheet中AC Characteristics:
數據在時鍾上升沿采樣,因此TX端可在時鍾下降沿更新數據,RX端時鍾上升沿接收數據即可。
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、板級調試。