4. 異步FIFO(先進(jìn)先出)
圖<6>是深度(depth)為8的異步FIFO的示意圖。其中,0~7代表8個(gè)寄存器,他們組成了一個(gè)環(huán)。
綠色的外圈代表寫操作,按照順時(shí)針?lè)较?地址遞增),依次寫入不同的寄存器;寫完所有的寄存器,再?gòu)募拇嫫?0開(kāi)始,循環(huán)不斷;寫指針(wrtie pointer)代表當(dāng)前寫入寄存器的地址;寫操作是寫時(shí)鐘的同步電路。
橙色的內(nèi)圈代表讀操作,按照順時(shí)鐘方向(地址遞增),依次讀取不同的寄存器,讀完所有8個(gè)寄存器,再?gòu)募拇嫫?0開(kāi)始,循環(huán)不斷;讀指針(read pointer)代表當(dāng)前讀取寄存器的地址;寫操作是讀時(shí)鐘的同步電路。
圖<6>
對(duì)于特定寄存器,F(xiàn)IFO必然是先寫后讀;FIFO內(nèi)部,讀指針在不斷追趕寫指針。當(dāng)寫指針跑的太快,比如已經(jīng)超越讀指針一圈,這種狀態(tài)就是寫滿(FIFO full),這時(shí)候繼續(xù)寫入就會(huì)把覆蓋(overwrite)未被讀取的寄存器(上溢,overflow),造成數(shù)據(jù)的丟失;另一種情況,讀指針等于寫指針,這種狀態(tài)就是讀空(FIFO empty),指向的寄存器還沒(méi)有被寫入,這時(shí)候繼續(xù)讀,讀出來(lái)的是空的或者是上一個(gè)循環(huán)已經(jīng)讀取過(guò)的數(shù)據(jù)(下溢,underflow)。
寫滿(Full):讀指針 = 寫指針 + FIFO深度;
讀空(Empty):讀指針 = 寫指針;
寫滿和讀空是兩種邊界狀態(tài),更多情況下,F(xiàn)IFO處于寫滿和讀空之間的中間狀態(tài)。讀指針和寫指針之間的差值形成了水位圖(watermark),代表著FIFO的實(shí)際使用率。
異步FIFO的實(shí)現(xiàn)有很多技術(shù)考量,最重要的是跨時(shí)鐘域(CDC)問(wèn)題:寫指針和寫滿信號(hào)屬于寫時(shí)鐘的時(shí)鐘域;讀指針和讀空信號(hào)屬于讀時(shí)鐘的時(shí)鐘域。有很多文獻(xiàn)討論異步FIFO的實(shí)現(xiàn)細(xì)節(jié),有興趣的可以參考文獻(xiàn)<1>。
異步FIFO的設(shè)計(jì)已然成熟,經(jīng)過(guò)封裝后成為異步FIFO模塊(或者IP),比如圖<7>。我們可以直接調(diào)用而不必顧慮內(nèi)部的細(xì)節(jié)。
圖<7>
圖<7>中,左側(cè)是寫操作,右側(cè)是讀操作,讀寫操作工作在各自的時(shí)鐘域,互不影響。只要沒(méi)有寫滿信號(hào),寫操作就可以一直持續(xù);只要沒(méi)有讀空信號(hào),讀操作也可以一直持續(xù)。數(shù)據(jù)源源不斷從左側(cè)流向右側(cè)。
5. RX彈性緩存(Elastic Buffer)
在以太網(wǎng)的接收端,PCS層使用彈性緩存來(lái)補(bǔ)償時(shí)鐘的PPM頻率差異。
10b編碼經(jīng)過(guò)異步FIFO,從RX時(shí)鐘的時(shí)鐘域轉(zhuǎn)換到本地時(shí)鐘域。
802.3標(biāo)準(zhǔn)沒(méi)有提供異步FIFO的實(shí)現(xiàn)細(xì)節(jié),老戚從Xilinx的用戶手冊(cè)找了一個(gè)1000Base-X設(shè)計(jì)例子做為參考。
這是一個(gè)深度為32的異步FIFO。計(jì)算讀指針和寫指針的差距,形成了圖<8>的水位圖。
圖<8>
當(dāng)水位上升時(shí),意味著FIFO讀取的速度大于寫入的速度;反之,則意味著FIFO讀取的速度小于寫入的速度。
上篇說(shuō)到,PCS和PMA之間(TBI)的10b編碼是連續(xù)的。讀寫時(shí)鐘(本地時(shí)鐘 VS RX時(shí)鐘)的頻率差異會(huì)導(dǎo)致水位或者上升到上溢,或者下降到下溢。
RX彈性緩存能夠識(shí)別10b碼型,然后根據(jù)水位來(lái)相應(yīng)的插入或者刪除特定的10b碼型。
當(dāng)水位上升到上半部灰色區(qū)間時(shí),就刪除IDLE碼;
當(dāng)水位下落到下半部灰色區(qū)間時(shí),就插入IDLE碼;
當(dāng)水位處于中間區(qū)域時(shí),既不刪除也不插入。
圖<9>
MAC層的以太網(wǎng)幀之間的間隙(IPG)最小是12字節(jié)(Octets);而在PCS層,最小IPG轉(zhuǎn)換成10b碼型:/T/,/R/,5/I/*。(見(jiàn)上篇)
由于不能刪除幀內(nèi)數(shù)據(jù),MAC幀越長(zhǎng),頻差積累的影響就會(huì)越大。
假設(shè)RX時(shí)鐘頻率為正偏100PPM,本地時(shí)鐘頻率為負(fù)偏100PPM,考慮最長(zhǎng)的Jumbo幀:
9216 Byte * (1.0001 / 0.9999 - 1) = 1.84 Byte
或者說(shuō),刪除一個(gè)/I/(/I2/ = /K28.5/D16.2/)就足以補(bǔ)償最大時(shí)鐘PPM偏差。
如果RX的時(shí)鐘慢于本地時(shí)鐘,那么就需要插入IDLE碼。
理想的水位是中間,比如16,這也意味著數(shù)據(jù)經(jīng)過(guò)FIFO的時(shí)候會(huì)有16x 10b (128ns)的延時(shí)。
6. 為什么還會(huì)丟包?
RX時(shí)鐘慢于本地時(shí)鐘的情況下,在RX的10b數(shù)據(jù)中插入IDLE碼,IPG變大,不會(huì)造成問(wèn)題;反過(guò)來(lái),會(huì)刪除部分的/I/,結(jié)果可能導(dǎo)致以太網(wǎng)幀的IPG被削減到標(biāo)準(zhǔn)之下,雖然并不損失正常數(shù)據(jù),但是在MAC層可能成為問(wèn)題。
圖<10>
通常而言,交換芯片(點(diǎn)擊進(jìn)入:可編程交換芯片)的內(nèi)部帶寬會(huì)大于接口的帶寬,所以入口(Ingress)側(cè)也不會(huì)丟包;在出口(Egress)側(cè),MAC卻必須嚴(yán)格按照802.3標(biāo)準(zhǔn)恢復(fù)12字節(jié)的最小幀間隙,這會(huì)減緩發(fā)送的速度。可以想象,長(zhǎng)時(shí)間的飽和流量會(huì)導(dǎo)致出口側(cè)的緩存(packet buffer)越積越滿。這種情況持續(xù)發(fā)生,最終會(huì)導(dǎo)致出口丟包。
圖<11>
對(duì)于交換機(jī)產(chǎn)品,端口之間互相打包(轉(zhuǎn)發(fā)包)是最基本的驗(yàn)證測(cè)試項(xiàng)目(圖<11>)。我們期望線速(line rate,utilization 100%,最小IPG)不丟包,然而,經(jīng)常會(huì)看到99.9999%就丟包了,丟的數(shù)量不多,短時(shí)間甚至看不出來(lái);調(diào)到99.99%變好了;或者下調(diào)發(fā)包儀器(traffic generator)的參考時(shí)鐘,比如-10PPM,丟包問(wèn)題就消失了。當(dāng)然,也有很多交換機(jī)按照100%速率轉(zhuǎn)發(fā)包沒(méi)有任何問(wèn)題。究其原因,就是PPM時(shí)鐘頻率偏差引起的。
一個(gè)有意思的推論就是,雖然PCS能夠補(bǔ)償時(shí)鐘的頻率差異,同步以太網(wǎng)(Synchronized Ethernet)時(shí)鐘驅(qū)動(dòng)的時(shí)鐘域,至少要包含MAC層,而不僅僅是PCS PHY。(SYNC-E下次聊)
部分以太網(wǎng)交換機(jī)的廠商會(huì)使用中心頻率正偏25PPM的參考時(shí)鐘,使得交換機(jī)的本地時(shí)鐘處在相對(duì)高位,從而避免頻差引起的丟包。但是,交換機(jī)之間的背對(duì)背連接呢?只要頻率是本地產(chǎn)生的,總是會(huì)有高有低,這樣做不能從根本上解決問(wèn)題。
實(shí)際上,對(duì)于以太網(wǎng)的應(yīng)用來(lái)說(shuō),PPM時(shí)鐘偏差的影響并不大。不像SDH/SONET這種時(shí)分復(fù)用的系統(tǒng),以太網(wǎng)包交換(packet switching)的優(yōu)勢(shì)在于帶寬動(dòng)態(tài)復(fù)用(或者統(tǒng)計(jì)復(fù)用,Statistical Multiplexing),企業(yè)級(jí)交換機(jī)(Enterprise Class Ethernet Switch)使用大緩存(packet buffer)來(lái)起到削峰填谷的作用。在MAC層,802.3X流控(flow control)協(xié)議定義了Pause Frame,可以用來(lái)通知對(duì)端暫停發(fā)送一段時(shí)間。更上層,TCP支持出錯(cuò)重傳,還有QoS等等。
以上的討論都是基于1000Base-X。當(dāng)以太網(wǎng)的端口速率上升到10G以上,8b10b編碼就被64b66b替代了,降低了額外帶寬開(kāi)銷,前提是PMA層的CDR的技術(shù)提升(僅僅要求66b保證最少一次01轉(zhuǎn)換);PCS層的IDLE碼換了形式繼續(xù)存在;8b10b檢錯(cuò)變成了AM控制碼攜帶的BIP(Bit Interleaving Parity)。總的來(lái)說(shuō),形式變了,原理沒(méi)有變。而且,不僅是以太網(wǎng),PCIe、SAS、SATA、USB等等也有類似的功能。
小結(jié)一下:物理層(physical layer)的物理編碼子層(PCS - Physical Coding Sublayer)對(duì)解決時(shí)鐘PPM問(wèn)題起了關(guān)鍵作用,PCS借助FIFO處理跨時(shí)鐘域,通過(guò)刪除或插入IDLE碼組,來(lái)補(bǔ)償接收數(shù)據(jù)和本地時(shí)鐘的有限頻差,這就是彈性緩存(Elastic buffer)。彈性緩存加上包緩存,對(duì)突發(fā)(burst)數(shù)據(jù)流量有完美的效果,卻不能解決長(zhǎng)時(shí)間線速(line rate)流量下的丟包問(wèn)題。當(dāng)然,通過(guò)802.3X流控或者更上層協(xié)議避免長(zhǎng)時(shí)間線速。
-
以太網(wǎng)
+關(guān)注
關(guān)注
41文章
5630瀏覽量
175803 -
寄存器
+關(guān)注
關(guān)注
31文章
5433瀏覽量
124343 -
fifo
+關(guān)注
關(guān)注
3文章
400瀏覽量
44796 -
時(shí)鐘
+關(guān)注
關(guān)注
11文章
1897瀏覽量
133178 -
PPM
+關(guān)注
關(guān)注
0文章
47瀏覽量
17484
發(fā)布評(píng)論請(qǐng)先 登錄
以太網(wǎng)應(yīng)用關(guān)鍵技術(shù)及設(shè)計(jì)方案集錦
德州儀器(TI)工業(yè)以太網(wǎng)解決方案

設(shè)計(jì)坊第三期:靈活的工業(yè)以太網(wǎng)解決方案
基于標(biāo)準(zhǔn)的汽車以太網(wǎng)解決方案的優(yōu)勢(shì)有哪些?
工業(yè)以太網(wǎng)方案選擇指南
高速以太網(wǎng)引動(dòng)超大規(guī)模計(jì)算技術(shù)革新,時(shí)鐘方案是實(shí)現(xiàn)高速以太網(wǎng)的關(guān)鍵
Linux以太網(wǎng)解決方案的介紹
半導(dǎo)體車用以太網(wǎng)解決方案

100G以太網(wǎng)光模塊解決方案

以太網(wǎng)時(shí)鐘的PPM頻率偏差的解決方案(上)

數(shù)據(jù)中心市場(chǎng)的關(guān)鍵以太網(wǎng)解決方案

MMWAVEPOEEVM以太網(wǎng)供電解決方案用戶指南

TOSUN 車載以太網(wǎng)仿真測(cè)試解決方案

評(píng)論