一、前言
網絡通信中的PHY芯片接口種類有很多,之前接觸過GMII接口的PHY芯片RTL8211EG。但GMII接口數量較多,本文使用RGMII接口的88E1512搭建網絡通信系統。這類接口總線位寬小,可以降低電路成本,在實際項目中應用更廣泛。
二、從GMII過度到RGMII
先看看GMII和RGMII主要的接口。
GMII:
發送 gmii_tx_clk gmii_tx_d[7:0] gmii_tx_en gmii_tx_er
接收 gmii_rx_clk gmii_rx_d[7:0] gmii_rx_dv gmii_rx_er
RGMII:
發送 tx_clk tx_d[3:0] tx_ctrl
接收 rx_clk rx_d[3:0] rx_ctrl

為什么接口變少了?首先數據總線從時鍾單邊沿采樣8bit轉變為了雙邊沿采樣4bit,從88E1512 Datasheet中時序圖可以直觀看出這一點。

RGMII中上升沿發送一字節數據的低四位,下降沿發送剩余的高四位數據。接收端時鍾雙邊沿采樣,因此125MHZ*8bit = 125MHZ*4bit*2 = 1000Mbit/s。至於GMII中的數據有效和數據錯誤指示信號被ctrl信號復用:tx_ctrl在時鍾tx_clk上升沿發送是tx_en,在下降沿發送是tx_en ^ tx_er。rx_ctrl在時鍾rx_clk上升沿接收是rx_dv,在下降沿接收是rx_en ^ rx_er。綜上,RGMII接口引腳數從25個降低到14個。
三、add clock skew
從上邊的時序圖分析,數據在時鍾的邊沿變化。因此如果不做額外處理,接收端無法穩定采樣。為了解決這一問題,常見的做法是為時鍾信號添加延時,使其邊沿對准數據總線的穩定區間。可以在控制器端、PCB走線以及PHY芯片內部添加時鍾偏移,本文使用最后一種方式實現。

在第三階段中添加延遲。數據發送方向,FPGA側的TX_CLK信號不需要額外處理,也就是說FPGA發送與數據邊沿對齊的時鍾信號。TXD和TX_CLK信號波形如圖。

PHY內部會調整TX_CLK,使之能夠穩定采樣TXD。數據接收方向,由於RX_CLK由PHY提供,PHY芯片直接產生與數據中心對齊的時鍾信號。RXD和RX_CLK信號波形如圖。

可見,使PHY芯片工作在延遲模式下時,FPGA單不需要添加額外的邏輯來保證穩定采樣。發送方向直接將數據驅動時鍾作為TX_CLK信號發送,接收方向直接利用RX_CLK對RXD信號采樣。
四、系統設計方案
本文使用ZYNQ內部的MAC控制器實現數據鏈路層功能。但由於其接口為GMII,需要用到GMII_to_RGMII IP Core轉換接口邏輯。上層網絡協議則通過LWIP開源協議棧完成。首先配置ZYNQ IP,使能ENET1並以EMIO方式引出。

系統硬件結構如圖:

五、I/O 時序約束
在較高速設計場合下,輸入輸出接口部分很容易出現數據采樣不穩定的現象。這時候就要通過Input delay,output delay約束以及STA來分析設計是否滿足穩定采樣需求。input/output delay是指數據相對於時鍾的延遲,只有設置好上述兩個數值,綜合工具才會往正確的方向優化並給出合理的時序報告。
FPGA與RGMII接口的PHY芯片之間的時序關系按照數據接口同步和數據采樣方式屬於源同步DDR采樣。input delay約束對應接收方向,時序關系是中心對齊。output delay約束對應發送方向,時序關系是邊沿對齊。前者由於很多時候不知道上游器件Tcko信息,會使用示波器測量有效數據窗口來計算。而后者因為是邊沿對齊,通過示波器測量抖動窗口並使用skew based method計算。這部分筆者還沒有親身實踐過,若有誤歡迎指出。
參考文獻
1 千兆以太網芯片88E1111 RGMII模式的驅動 - 我心狂野 - 博客園 http://www.cnblogs.com/shengansong/archive/2012/01/04/2311894.html
2 RGMII布線指導 RGMII Layout Guide | 無線時代 http://www.witimes.com/rgmii-layout-guide/
3 RGMII_PHY測試筆記1 基於開發板MiS603-X25-whilebreak-電子技術應用-AET-北大中文核心期刊-最豐富的電子設計資源平台 http://blog.chinaaet.com/whilebreak/p/46639
4 千兆以太網芯片88E1111 RGMII模式的驅動 - 百度文庫 https://wenku.baidu.com/view/d2cc412fff00bed5b9f31d49.html
5 RGMII Interface Timing Considerations | Ethernet FMC http://ethernetfmc.com/rgmii-interface-timing-considerations/
6 ALTERA AN 477: Designing RGMII Interfaces with FPGAs and HardCopy ASICs
7 米聯客 ESFP1512 以太網 SFP 光電卡教程
8 Vivado使用誤區與進階——XDC約束技巧之I/O篇 (上) - neufeifatonju的博客 - CSDN博客 https://blog.csdn.net/neufeifatonju/article/details/80653172
9 Vivado使用誤區與進階——XDC約束技巧之I/O篇 (下) - neufeifatonju的博客 - CSDN博客 https://blog.csdn.net/neufeifatonju/article/details/80450975
