以太網肇始,設備都連接到同一總線(同軸電纜),以半雙工的方式通信。載波偵聽和沖突檢測(CSMA/CD)就是以太網的代名詞。據老戚了解,傳奇的Catalyst 6500交換機也使用這種半雙工的百兆以太網作為控制平面。從總線電路(時鐘同步的總線電路)的角度來看,這是妥妥的共同時鐘總線系統。后來,以太網也經歷了從總線拓撲到點對點的星型拓撲、從物理總線到包交換的轉變,交換機(SDN交換機的核心 - 可編程交換芯片)應運而生,成為連接以太網設備的橋梁。
今天以太網是使用最為廣泛的局域網(LAN)網絡協議。相對于同期的其他協議,以太網勝出的關鍵在于其成本相對低廉,性能穩定可靠,組網方便靈活。其中重要的一點:以太網設備采用本地時鐘,通常低成本的晶振就能滿足要求。不同設備采用各自本地時鐘,相互之間會有或多或少的頻率偏差(skew)。802.3標準要求相對標稱頻率的偏差不能超過100PPM。考慮到極端的情況:一個時鐘快100PPM,一個時鐘慢100PPM,它們之間的頻差可以多達萬分之二,是不是必然導致丟包?我們在做交換機測試的時候,也會遇到端口速率99.99%以上就會丟包,低一點點就不丟了。通常認為這是以太網時鐘PPM頻率偏差引起的問題,但是很多硬件攻城獅對其中的邏輯感到困惑,老戚在此嘗試作一番解讀。
老戚認為,物理層(physical layer)的物理編碼子層(PCS - Physical Coding Sublayer)對解決時鐘PPM問題起了關鍵作用,PCS借助FIFO處理跨時鐘域,通過刪除或插入IDLE碼組,來消除接收數據和本地時鐘的有限頻差,這就是彈性緩存(Elastic buffer)。彈性緩存對突發(burst)數據流量有完美的效果,卻不能解決長時間線速(line rate)流量下的丟包問題,對此局限我們應當了然于胸。當然,通過上層的流控(flow control)協議,我們可以避免長時間線速。
在深入PCS子層之前,最好先了解一下物理層。
1. IEEE 802.3 物理層規范
IEEE 802.3標準規范了有線(wired)傳輸以太網的數據鏈路層(MAC layer)和物理層(physical layer)的協議。不同于無線WIFI,有線傳輸需要媒質(media),可以是RJ45接口的網線(4對雙絞線),SFP/QSFP接口的光模塊、無源銅纜,或者PCB背板等等。為了適應不同類型的媒質(信道),我們需要在發送端采用不同的編碼(coding)甚至調制(modulation),以便在接收端能夠正確的恢復數據。好比搬家公司搬運家具,會先分拆、打包,然后運輸,到達目的地后再拆包、組裝。跟搬家具不一樣的地方在于,電子信號在媒質中的傳輸過程中伴隨著衰減和形變,給接收端的數據恢復帶來挑戰。
<圖1>
OSI七層參考模型中,物理層(physical layer)實現了MAC幀(frame)和最終進入媒質中傳輸的信號之間轉換。物理層又可以細分為PCS、PMA、PMD,以及其他一些作為可選項的子層。
<圖1>是1000Base-X(1GbE-LX/CX/SX)的物理層結構。如今802.3發展到了400GbE,速率、編解碼、協議復雜程度都今非昔比,但是基本的邏輯的依然未變,1000Base-X儼然閃爍著簡約之美。
在發送方向(下),PCS把MAC幀(Octets,8bit@125MHz)轉化為連續的8b10b編碼(code group,10bit@125MHz);PMA把8b10b編碼變成串行的比特流(bit stream);PMD把比特流轉化為DDR信號,并賦予適當的電氣特性,來滿足驅動光模塊的接口特性要求。無論是MAC幀、8b10b編碼還是串行比特流,他們都是與本地時鐘同步的信號。最后進入媒質的信號是625MHz時鐘的DDR信號,我們稱之為內嵌時鐘(clock embeded)的數據,因為在接收端可以僅僅依靠數據把時鐘恢復出來。注意,這是發送端的本地時鐘。
在接收方向(上),PMD從信號中恢復出比特流和RX時鐘,實現比特位同步;PMA從比特流中恢復8b10b碼型,實現碼同步;PCS把8b10b解碼轉換成MAC幀。注意,PMD和PMA此時的RX時鐘其實是對方(發送端)的時鐘,而MAC層使用的是接收端的本地時鐘。PCS需要實現有限頻差的跨時鐘域的數據轉換而不丟失有用數據。
2. 為什么需要8b10b編碼?
通常而言,接收端設計的復雜程度遠遠高于發送端。且看一下我們在接收端面臨的問題:
接收端的PMD通過CDR(clock and Data Recovery)電路把比特數據和RX時鐘從625MHz的DDR信號中恢復出來,前提是比特流有足夠多的0/1切換;而原始數據是隨機的,可能出現長0或者長1;
二進制流的0和1數目對等以實現直流均衡,這對接收端的光電轉換靈敏度很關鍵;
接收端的PMA把串行的比特流轉換成(并行的)10b碼型,需要特殊碼型幫助我們識別碼的比特邊界,實現碼同步;
接收端的PCS檢測單比特的誤碼,以便于評估誤碼率和信道性能;
8b10b編解碼滿足所有的要求,實際上,還不止這些。先說數據(data)編碼 - Dxy.z。
8b10b編碼把8bit的原始數據轉化為10bit編碼,同時保證10bit編碼不出現連續5個以上的長0或者長1;
假如10b編碼的0和1的數量不一樣,那么它和它的鏡像(位取反)作為正/負編碼都對應于同一個8b數據,發送端通過選擇正負碼(多0/1)來實現直流均衡;
任何單比特錯誤形成的碼型不屬于有效的碼型,這樣單比特誤碼能夠被發現;
當然還有最簡單的編碼解碼的RTL邏輯。
<圖2>
實際上,8b/10b編碼是由5b/6b和3b/4b兩部分組成。圖<2>中,
5b/6b: EDCBA -> abcdei
3b/4b: HGF -> fghj
其中,A和a都是最低比特位(lsb)。
D[EDCBA].[HGF]代表二進制數據‘HGFEDCBA’的8b10編碼(code group)。
原始數據是隨機的,它們占用了1024(2^10)個10b碼型中的256(2^8)個。在它們之外,少數碼型被挑選出來作為控制碼。
<圖3>
8b10b的碼的缺點是25%的額外帶寬開銷。隨著端口速率的提升和技術的發展,新的編碼方式也被開發出來,比如10G以上的以太網都改成64b/66b編碼,PCIe 3.0以上使用128/130b編碼,等等。
3. PCS(Physical Coding Sublayer)物理編碼子層
8b10b控制碼和數據碼一起構成了PCS碼組(ordered set)。PCS碼組由一個或者多個8b10b碼型組成。常用的有配置(Configuration),空閑(IDLE),封裝(Encapsulation,標志幀頭和幀尾)。
<圖4>
PCS完成了MAC幀和10b碼型的轉換。圖<5>的左邊是以完整的以太網幀,包括幀與幀之間的間隙(沒有有效數據),右邊是每一字節對應的10b編碼。想象一下,左右兩側同時被125MHz的時鐘驅動,從上往下,形成MAC幀8b10b編碼解碼的流水線。
<圖5>
我們看到,第一個前導碼被控制碼/K27.7/取代,代表幀頭。
從第二個前導碼開始一直到校驗碼幀尾,都是8b10b數據碼轉換。
幀之后第一個字節(IPG的一部分)被控制碼/K29.7/取代,代表幀尾。
幀之后第二個字節(IPG的一部分)被控制碼/K23.7/取代,代表載波信號延伸一拍。(根據幀長度是奇數偶數會有差異)
其他IPG將會被/I/完全填充。
IDLE(/I/)是處理時鐘PPM的關鍵,因為它們不是MAC幀的組成部分,可以根據需要來增加或者刪除。
限于篇幅,上篇到此為止。本篇闡述了以太網時鐘PPM頻率偏差問題的由來,基于1000Base-X總結了物理層和PCS層的結構。
我們將在下篇講講基于異步FIFO的彈性緩存(Elastic buffer)和解決PPM時鐘問題的局限。
-
以太網
+關注
關注
40文章
5460瀏覽量
172733 -
時鐘
+關注
關注
11文章
1746瀏覽量
131801 -
Mac
+關注
關注
0文章
1110瀏覽量
51706 -
總線系統
+關注
關注
0文章
26瀏覽量
10088 -
PPM
+關注
關注
0文章
46瀏覽量
17073
發布評論請先 登錄
相關推薦
評論