10GbE以太網MAC和PHY
概述
10GbE以太網遵循IEEE 802.3ae規范,其物理傳輸介質只支持光纖。
10GbE以太網主要分為串行的10GBase-S/L/E-R/W與並行(4路並行WDM波分復用)的10GBase-LX4兩類。
10GBase-S/L/E-R/W中,S/L/E表示波長,S表示850nm短波,L表示1310nm長波,E表示1550nm超長波,不同波長有效傳輸距離不一樣;R/W表示PHY類型,R表示LAN PHY,即局域網物理層,碼率為10.3125Gb/s,W表示WAN PHY,即廣域網物理層,碼率為9.95328Gb/s。
串行10GBase-R/W使用64B/66B編碼,而並行10GBase-LX4沿用千兆以太網的8B/10B編碼。通過64B/66B編碼,10Gb/s會變成10.3125Gb/s,所以10GBase-R的碼率為10.3125Gb/s。但是10GBase-W要與SONET/SDH無縫兼容,所以在10GBase-W的物理層增加了WIS(WAN Interface Sublayer)子層,其主要功能是將10GbE LAN應用中的Idle碼去掉,使速率降到9.95328Gb/s,與SDH VC-4-64c和STS-192c兼容。
名詞解釋
MAC Media Access Controller 媒介訪問控制器
PHY Physical 物理層
PCS Physical Coding Sublayer 物理編碼子層
PMA Physical Media Attach 物理附加子層
PMD Physical Media Dependent 物理依賴子層
XGXS XGMII Extender Sublayer XGMII擴展子層
XAUI 10 Gigabit Attachment Unit Interface 一種10G以太網接口
CDR Clock Data Recovery 數據時鍾恢復
pre-emphasis 預加重技術
offset cancellation 失調消除技術
MII Media Independent Interface
RS Reconciliation Sublayer 協調子層
MAC
數據鏈路層包括LLC子層、MAC Control子層(可選)、MAC子層和RS子層。MAC層主要負責控制與連接物理層的物理介質。在發送數據時,MAC協議事先判斷是否可以發送數據,如果可以發送,將給數據添加一些控制信息,最終將數據以及控制信息以規定的格式發送到物理層;在接收數據時,MAC協議首先判斷輸入的信息是否發生傳輸錯誤,如果沒有錯誤,則去掉控制信息發送至LLC層。
上圖是10GE MAC的內部實現框圖,主要包括Transmit Engine、Receive Engine、Flow Control、RS、管理模塊和時鍾&復位模塊。其中Transmit Engine和Receive Engine主要是兩個FIFO緩沖區,用來緩存發送和接收的數據。Flow Control指流控制,因為實際通信過程中,雙方的處理速度不一致,這樣可能出現MAC接收緩沖區滿的情況,如果此時繼續接收報文,則接收到的報文會被直接丟棄,Flow Control就是針對這種情況,當接收緩沖區報文達到閾值時,發送PAUSE幀或者PFC幀,告知對端MAC停止發送報文。Statistics模塊則進行報文統計。
以太網幀
標准數據幀
802.1Q數據幀
MAC Control
MAC Control幀格式如上圖,其中,目的MAC是一個特定的地址,Type字段為0x8808,MAC Control Opcode決定了MAC Control幀的類型。
PAUSE幀和PFC幀是MAC層Flow Control的基礎。
PAUSE幀的目的MAC固定為01-80-C2-00-00-01,它的作用是當接收FIFO達到閾值時,告訴對端MAC停止發送報文。PAUSE幀的參數表示停止發送報文的時間間隙,當對端MAC接收到PAUSE幀之后,會在時間間隙結束之后繼續發送報文;如果在時間間隙結束之前接收到參數為0的PAUSE幀,則表示可以立即發送報文。
PFC(Priority-based Flow Control)幀則是根據802.1Q VLAN TAG的COS值,依據優先級進行流控。PFC幀的目的MAC也是01-80-C2-00-00-01。
RS
協調子層主要是使不同物理介質對MAC子層透明,即把各種MII接口的數據,以統一的方式和MAC層傳輸。
MII
MII接口是MAC和PHY之間的接口,有MII/RMII/SMII/SSMII/GMII/SGMII/XGMII等,由MII接口轉換而來的以太網背板接口有XAUI/10G-KR4等。
XGMII
XGMII總線(IEEE 802.3 Clause 46)有發送和接收兩個相互獨立的通道,每個通道有一根參考時鍾信號、4根數據同步信號(每個同步信號控制1個Lane的數據同步)、32根數據傳輸信號(分為4個Lane),一共74根信號線。
XGMII碼流格式如上圖,由幀間隙(IFG)、幀前導碼(Preamble)、幀開始定界符(SFD)、幀數據(DATA)和幀結束定界符(EFD)構成。
幀間隙從Terminate控制符開始,到Start控制符結束,幀間隙過程中傳輸Idle控制幀。幀間隙的時長以字節為單位,幀間隙最小值根據雙方MAC實現確定,10GBASE-R應用場景,最小幀間隙(IPG)為5個字節。
幀前導碼是7個連續的0xAA。
幀開始定界符必須通過XGMII Lane 0傳輸,一個字節0xAB。(此處與下表中的Start控制符不一致,待商榷)
幀結束定界符,可以出現在XGMII的任意Lane,其值不詳。
TXC為低電平時,表示傳輸數據幀;TXC為高電平時,表示傳輸控制幀。
RXC為低電平時,表示傳輸數據幀;RXC為高電平時,表示傳輸控制幀。
XGXS & XAUI
XGXS包括位於RS側的DTE XGXS和PHY側的PHY XGXS兩部分。XGXS子層(IEEE 802.3 Clause 47)的出現有兩個原因:
1) XGMII接口是並行接口,一共有74根信號線,XGXS將XGMII接口轉為XAUI接口,串行化(4 Lane共16根信號線);
2) XGMII接口總線的布線長度小於7cm,無法支持二層以太網交換機跨板(通過背板)通信,經過XGXS轉換的XAUI接口則支持最長50cm的布線長度;
發送方向,XGXS接收XGMII的數據,將XGMII數據幀和控制幀轉換成XAUI碼流(code-groups),編碼之后傳輸。接收方向,首先解碼XAUI碼流,補償時鍾和相位,轉換成XGMII數據幀和控制幀,然后傳輸。
PHY
PHY層包括PCS子層、PMA子層和PMD子層。
PCS
PCS層面向的業務接口是XGMII, XGMII是所有10Gb/s PHY針對RS層或者XGXS層提供的統一接口。
上圖是一個典型的10GBase-R PHY的IP核內部結構體,紅色框圖部分是PCS實現。其中,64B/66B Encode/Decode負責編解碼、Test Pattern Generate/Test Pattern Check負責發送和校驗測試報文(PHY硬件自檢)、Scramble/Descramble負責加解擾、Gearbox(變速箱)和Block Sync負責速率匹配和時鍾、相位補償、字對齊等功能、BER Mon(Bit Error Rate Monitor)負責監控誤碼率。
加解擾技術是一種調制技術,其原理是將擾碼與原始信號相乘,從而得到新的信號,與原始信號相比,新信號在時間和頻率上被打散。
PCS層發送方向和接收方向都可以工作在正常模式(Normal mode)和測試模式(Test-Pattern mode)。當處於測試模式時,Test Pattern Generate/Check使能。
PCS層Gearbox模塊負責將發送方向的數據分組成16位一組的數據單元,通過XSBI接口發送給PMA層。
編解碼的目的有兩個:
1)避免物理傳輸介質上出現連續的1或者0,如64B/66B編碼將64位數據編碼成66位數據在傳輸介質上傳輸,從而降低信噪比;
2)區分出數據和命令。
此外,PCS層還負責PHY自協商,PHY自協商可以自動匹配工作模式、工作速率等。
64B/66B
10GBase-R的PCS層使用64B/66B編碼(IEEE802.3 Clause 49),支持數據幀和控制幀,同時擁有健全的錯誤檢測機制。
發送方向,PCS從XGMII接收兩組32位數據,一共64位數據。然后添加2位同步頭(根據XGMII的TXC信號決定),01表示數據幀,10表示控制幀。同步頭不通過Scrambler模塊加擾碼,因為如果同步頭被改變,就無法區分數據幀和控制幀,也無法進行幀定界。
在接收方向,PCS從接收到的66位數據塊中提取出同步頭,負載部分進行解擾碼和64B/66B解碼,然后把解碼出來的數據通過XGMII接口發送給XGXS層或者RS層。
PCS層無論是對接RS層還是XGXS層,都是通過XGMII接口。XGMII接口在發送和接收方向都有32根數據線,通過TXC[3:0]和RXC[3:0]進行數據同步,每個TXC/RXC信號控制8根數據線。
64B/66B編碼中,數據幀和控制幀除了同步頭之外的負載部分,均包含8個字節。對於數據幀而言,負載各字節命名為D0~D7。控制幀負載的8個字節,除了Ordered Set(/O/)字符、Start(/S/)字符和Terminate(/T/)字符之外,命名為C0~C7。Ordered Set字符只能由XGMII的第一個Lane發送,因此命名為O0或者O4;Start字符同樣只能由XGMII的第一個Lane發送,因此命名為S0或者S4;Terminate字符則可以出現在任意字節,因此命名為T0~T7。
對於控制幀而言,進行64B/66B之后,除同步頭之外的負載部分第一個字節稱為Block Type域,用來區分控制幀類型。對於包含Start字符或者Terminate字符的控制幀,Block Type域指示了它的類型。其他控制字符被編碼為7位的控制碼(Control Code)或者4位的O碼(Ordered Set Code)。
Control Codes
Idle(/I/)
從XGMII接收到Idle控制字符(0x07)時,PCS會根據當前數據傳輸忙或者閑,動態地插入或者刪除Idle字符,從而調整時鍾頻率。/I/字符的插入和刪除需要4個一組,/I/字符只能出現在/I/或者/O/之后。數據接收過程中,不能插入/I/字符。刪除/I/時,緊跟着/T/的四個/I/不能被刪除。
LPI(/LI/)
/LI/字符的插入和刪除原則同/I/字符。
Start(/S/)
Start字符表示開始發送報文。
Terminate(/T/)
Terminate字符表示發送報文結束。
Ordered Set(/O/)
/O/字符表示開始發送Ordered Set,有兩種類型的Ordered Sets——Sequence Ordered Set和Signal Ordered Set(保留擴展用)。其中,/O/出現在XGMII的第一個Lane中,/Q/緊跟着/O/出現。
Ordered Sets用來發送控制和狀態信息,如Remote Fault和Local Fault。Ordered Sets包含一個控制字符,緊跟着3個數據字符。10GBASE-R應用場景只有一種Ordered Set類型,即Sequence Ordered Set,它的控制字符簡寫為/Q/。
Error(/E/)
當從XGMII接收到/E/字符,或者接收到無效控制幀時,/E/被發送。/E/可以使PCS層或者XGXS層接收到錯誤信息。
一個66位數據塊怎么確認是否為有效數據塊呢?當出現以下情況是,被判定為無效數據塊:
1) 同步頭不是01或者10;
2) 如果為控制幀,Block Type域為無效類型;
3) 如果為控制幀,控制碼為無效控制碼;
4) 任何無效Ordered Set Code(4位),包括0xF;
5) 64位負載各字符順序錯亂;
PMA
如圖所示,10GBASE-R應用場景中,PMA子層介於PCS編碼子層和PMD子層之間,它與PCS編碼子層之間使用XSBI總線接口。
PMA主要包括TX Serializer、RX Deserializer、PLL和CDR幾部分。其中CDR負責從接收的數據中恢復出時鍾信號,並通過PLL輸出發送數據時鍾。發送方向,Tx Serializer負責將並行數據轉換成串行數據。接收方向,Rx Deserializer負責將接收的串行數據轉換成並行數據。
在PMA的實現中,針對發送通道可以配置預加重值和VOD值。預加重是噪聲整形技術在模擬信號處理中的應用,其原理是在信號發送之前,先對模擬信號的高頻分量進行適當提升;在收到信號之后,再對信號進行逆處理,即去加重,對高頻分量進行適當衰減。預加重與去加重技術可以降低信號在傳輸過程中的高頻損耗,也可以使噪聲的頻譜發生變化,這就是模擬降噪的原理。在接收方向,使用失調消除技術(offset cancellation)進行降噪。
接收方向
接收方向,PMA層從PMD層接收數據,然后發送到PCS層:
1) 從接收PMD的串行數據中恢復時鍾,並將時鍾信號傳送到PCS編碼層;
2) 將10Gb/s串行數據並行化,變成16bit並行數據,速率為644.53Mbps,通過XSBI(10G Sixteen Bit Interface)接口,發送到PCS編碼層;
3) 提供鏈路狀況信息;
發送方向
發送方向,PMA層從PCS層接收數據,然后發送到PMD層:
1) 提供時鍾信號給PCS層;
2) 從PCS編碼層接收16bit並行數據進行串行化,變成10Gb/s串行數據發送到PMD層;
PMD
10GBASE-R應用場景中,PMD子層負責光電信號轉換,即光模塊。
自協商
目前只有千兆PHY才支持自協商模式,如10/100/1000M自適應PHY。
PHY自協商是通過快速連接脈沖(Fast Link Pulse)信號實現,簡稱FLP。自協商的雙方通過FLP來交互數據。
在具備自協商能力的端口沒有Link的情況下,端口一直發送FLP,在FLP中包含着自己的連接能力信息,包括支持的速率能力、雙工能力、流控能力等。這個連接能力是從自協商能力寄存器中得到的(Auto-Negotiation Advertisement Register ,PHY標准寄存器地址4 )。FLP依靠脈沖位置編碼攜帶數據,一個FLP突發包含33個脈沖位置。17個奇數位置脈沖為時鍾脈沖,時鍾脈沖總是存在的;16個偶數位置脈沖用來表示數據:此位置有脈沖表示1,此位置沒有脈沖表示0。這樣1個FPL的突發就可以傳輸16bit的數據。自協商交互數據就這樣通過物理線路被傳輸。
如果兩端都支持自協商,則都會接收到對方的FLP,並且把FLP中的信息解碼出來。得到對方的連接能力。並且把對端的自協商能力值記錄在自協商對端能力寄存器中(Auto-Negotiation Link Partner Ability Register , PHY標准寄存器地址5 )。同時把狀態寄存器(PHY標准寄存器地址1)的自協商完成bit(bit5)置成1。在自協商未完成的情況下,這個bit一直為0。然后各自根據自己和對方的最大連接能力,選擇最好的連接方式Link。比如,如果雙方都即支持10M也支持100M,則速率按照100M連接;雙方都即支持全雙工也支持半雙工,則按照全雙工連接。一定連接建立后,FLP就停止發送。直到鏈路中斷,或者得到自協商Restart命令時,才會再次發送FLP。
Error and Fault Handling
數據幀接收過程中,通常是/S/ + /D/ … /D/ + /T/序列,如果在/C/控制字符出現在/S/和/T/之間,那么RS層應該告知MAC層發生了FrameCheckError。如果/S/出現在除了lane 0之外的lane上,RS層也會感知到錯誤。
數據幀發送過程中,PHY必須仔細校驗保證數據不被篡改,因為一旦對端發現接收到的數據被篡改,就會發送Error控制字符。
Link Fault Signaling
關於Link Fault Signaling,參考IEEE 802.3ae Clause46.3.4章節。
首先要區分兩個概念,PHY層Link Up和LLC層Link Up,前者是物理鏈路的連接狀態,后者是邏輯鏈路的連接狀態。通常,此處,Link Fault指的是PHY層的鏈路連接狀態。
PHY層的鏈路狀態指Local RS層和Remote RS層之間的鏈路狀態。
PHY層的各子層都需要具備檢測鏈路錯誤的能力,檢測鏈路錯誤主要分為兩個方面:
1) 檢測I/O信號;
2) 傳輸數據/控制幀解析,包括:
CODEC Synchronization;
Lane Alignment,如/S/只能出現在Lane 0等;
Link Status Report Recognized;
Link Status Message是一個四字節的Ordered Sets,其中Lane 0是Sequence控制字符,剩下的3個是數據部分。Local Fault幀的Sequence控制字符是0x9C,Remote Fault幀的Sequence控制字符是0x00。
任何一方,在接收過程中檢測到鏈路錯誤,都會產生Local Fault, Local Fault幀會在接收方向透傳PHY各子層,直到RS層。
RS層負責處理Local Fault幀,同時發送Remote Fault幀給對端RS層(只有RS層可以殘生Remote Fault幀)。Remote Fault幀在RS層之間透傳。RS層之所有會發送Remote Fault幀給對端,是假設只有接收鏈路發生鏈路錯誤,發送鏈路沒有問題。
當RS層在128個時鍾周期內接收到4個以上Local Fault幀時,它會通知本機MAC停止發送數據,並連續發送Remote Fault幀給對端RS層。當RS層在128個時鍾周期內,連續接收到4個Remote Fault幀時,才會認為發送鏈路出現問題,它會通知本機MAC停止發送數據,並在發送鏈路上連續發送Idle幀。
在128個時鍾周期內,沒有接收到Local Fault幀或者Remote Fault幀,則表示鏈路狀態正常。