SerDes是Serializer/Deserializer的縮寫,即串行器和解串器,顧名思義是一種將并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù)發(fā)送,將接收的串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù)的”器件“。對于FPGA工程師來說“串并轉(zhuǎn)換”再熟悉過不過了,只不過SerDes是一種需要數(shù)模硬件實現(xiàn)的,用于高速傳輸?shù)摹案呒墶贝⑥D(zhuǎn)換器件。至于接口從最初從串口到并口,再回歸到串口的歷史發(fā)展,可以閱讀相關(guān)的文獻,借此可以了解一下系統(tǒng)同步、源同步的技術(shù)瓶頸。目前,商用基于SerDes架構(gòu)的通信協(xié)議最高可實現(xiàn)單通道56Gbps(好像已經(jīng)可達112Gbps)的速率,在未來高帶寬、低成本的應(yīng)用領(lǐng)域會越來越廣泛。
SerDes主要具有以下優(yōu)點:
減少布線沖突(串行,并且無單獨的時鐘線,時鐘嵌入在數(shù)據(jù)流中,從而也解決了限制數(shù)據(jù)傳輸速率的信號時鐘偏移問題);
抗噪聲、抗干擾能力強(差分傳輸);
降低開關(guān)噪聲;
擴展能力強;
更低的功耗和封裝成本;
題外話:PCIE、JESD204B都是基于SerDes的協(xié)議,用OSI網(wǎng)絡(luò)分層模型來類比的話,SerDes更接近于物理層,并強調(diào)了電氣屬性,而PCIE和JESD204B相當(dāng)于涵蓋數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層和傳輸層,所以SerDes通常又被稱之為物理層(PHY)器件。
2. 整體架構(gòu)
SerDes有四種架構(gòu):1)并行時鐘SerDes;2)嵌入式時鐘SerDes;3)8b/10b編碼SerDes;4)位交錯SerDes。(注:至于這4種所謂的架構(gòu)有什么區(qū)別,實現(xiàn)有什么特點,我還沒找到專門的文獻來說明)。
常見的SerDes架構(gòu)是一種基于8b/10b編碼并且時鐘嵌入進數(shù)據(jù)流中的架構(gòu)(是不是就是上面2、3的組合?),主要由物理介質(zhì)相關(guān)子層( PMD)、物理媒介附加子層(PMA)和物理編碼子層( PCS )所組成。如下圖所示:
底色為淺綠色的子模塊為PCS層,負(fù)責(zé)數(shù)據(jù)流的編碼/解碼,是標(biāo)準(zhǔn)的可綜合CMOS數(shù)字邏輯,可以硬邏輯實現(xiàn),也可以使用FPGA軟邏輯實現(xiàn)。
底色為淺褐色子模塊是PMA層,是數(shù)模混合CML/CMOS電路,負(fù)責(zé)負(fù)責(zé)串化/解串化,是理解SerDes區(qū)別于并行接口的關(guān)鍵。
PMD是負(fù)責(zé)串行信號傳輸?shù)碾姎鈮K(未畫出)。
PLL模塊(PLL Block)負(fù)責(zé)產(chǎn)生SerDes各個模塊所需要的時鐘信號,并管理這些時鐘之間的相位關(guān)系。
一個SerDes通常還要具調(diào)試能力,例如偽隨機碼流產(chǎn)生和比對,各種環(huán)回測試,控制狀態(tài)寄存器以及訪問接口,LOS檢測,眼圖測試等,所以還需要相應(yīng)的功能測試模塊。
整個流程可以簡述為:
發(fā)送(TX)
FPGA軟邏輯(fabric)送過來的并行信號,通過接口FIFO(Interface FIFO),送給8b/10b編碼器(8b/10b encoder)或擾碼器(scambler),以避免數(shù)據(jù)含有過長連“0”或者連“1”,之后送給串行器(Serializer)進行并->串轉(zhuǎn)換。串行數(shù)據(jù)經(jīng)過均衡器(equalizer)調(diào)理,由驅(qū)動器(driver)發(fā)送出去。
接收(RX)
外部串行信號由線性均衡器(Linear Equalizer)或DFE (Decision Feedback Equalizer,判決反饋均衡)結(jié)構(gòu)均衡器調(diào)理,去除一部分確定性抖動(Deterministic jitter)。CDR從數(shù)據(jù)中恢復(fù)出采樣時鐘,經(jīng)解串器變?yōu)閷R的并行信號。8b/10b解碼器(8b/10b decoder)或解擾器(de-scambler)完成解碼或者解擾。如果是異步時鐘系統(tǒng)(plesio-synchronous system),在用戶FIFO之前還應(yīng)該有彈性FIFO來補償頻差。
注:我發(fā)現(xiàn)系統(tǒng)性的把SerDes細(xì)節(jié)講清楚的文獻并不多,并且有些SerDes接口芯片并不完全是上面這種架構(gòu),在實際過程中,各個廠家可能會根據(jù)性能做不同的算法優(yōu)化,具體的模塊可能用到不同的技術(shù),所以不要片面的理解上述架構(gòu)是Serdes的唯一架構(gòu)。
3. 發(fā)送端模塊說明
3.1 8b/10b編碼器
8b/10b編碼是由IBM于1983年發(fā)明的,旨在解決系統(tǒng)互聯(lián)以及GB以太網(wǎng)傳輸?shù)膯栴}。是指將8b的數(shù)據(jù)通過某種編碼規(guī)則擴展成10b,保證數(shù)據(jù)流中的“0”和“1”數(shù)量基本一致,通過降低效率來增加傳輸?shù)臄?shù)據(jù)恢復(fù)的可靠性。8b/10b 主要具有以下優(yōu)點:
保證直流(DC)平衡(重點)
直流平衡是什么意思呢?如上圖所示,由于我們的串行鏈路中會有交流耦合電容,信號頻率越高,阻抗越低,反之頻率越低,阻抗越高。因此上面的情況,當(dāng)碼型是高頻的時候,基本上可以不損耗的傳輸過去,但是當(dāng)碼型為連續(xù)“0”或者“1”的情況時,電容的損耗就很大,導(dǎo)致幅度不斷降低,帶來的嚴(yán)重后果是無法識別到底是“1”還是“0”。因此編碼就是為了盡量把低頻的碼型優(yōu)化成較高頻的碼型,從而保證低損耗的傳輸過去。
8b/10b編碼方式總輸出位數(shù)是10個位,其中“0”與“1”出現(xiàn)的次數(shù)總共也僅在三種場合存在,分別為“5個位0與5個位1”、“4個位0與6個位1”、“6個位0與4個位1”。有一個8b/10b編碼的技術(shù)專用語“不均等性(Disparity)”,其涵義就是指10個位中位0與位1出現(xiàn)次數(shù)的差。換句話說,8b/10b編碼的“Disparity”就僅有“+2”(4個位0與6個位1)、“+0”(5個位0與5個位1)以及“-2”(6個位0與4個位1)三種狀況。
有利于提取時鐘
時鐘恢復(fù)是依賴于“電平跳變沿“(后面會介紹),所以平衡”0“和”1“,可以簡化了時鐘恢復(fù),降低了接收機成本。
方便錯誤檢查
8B/10B編碼采用冗余方式,將8位的數(shù)據(jù)和一些特殊字符按照特定的規(guī)則編碼成10位的數(shù)據(jù),根據(jù)這些規(guī)則,能檢測出傳輸過程中單個和多個比特誤碼。
有關(guān)8b/10b編碼的編碼算法可以進一步查閱相關(guān)文獻。在SerDes中長常用編碼方式除了8b/10b編碼外,還有64b/66b編碼等;
3.2 擾碼
擾碼是一種將數(shù)據(jù)重新排列或者進行編碼以使其隨機化的方法,但是必須能夠解擾恢復(fù)。我們希望打亂長的連“0”和長的連“1”序列,將數(shù)據(jù)隨機化。擾碼產(chǎn)生是通過循環(huán)移位寄存器來實現(xiàn)的,而擾碼生成多項式?jīng)Q定循環(huán)移位寄存器的結(jié)構(gòu)。那么對信號加干擾有什么好處?
解決EMI問題
當(dāng)數(shù)據(jù)重復(fù)傳輸時,能量就會集中在某一頻率上,產(chǎn)生EMI噪聲;數(shù)據(jù)經(jīng)過加擾后,能把集中的能量分散開,幾乎變成白噪聲。
有利于提取時鐘
同時又?jǐn)U展了基帶信號頻譜,起到加密的效果
3.3 串行器/解串器
串行器Serializer把并行信號轉(zhuǎn)化為串行信號。Deserializer把串行信號轉(zhuǎn)化為并行信號。一般地,并行信號為8 /10bit或者16/20bit寬度,串行信號為1bit寬度(也可以分階段串行化,如8bit->4bit->2bit->equalizer->1bit以降低equalizer的工作頻率)。
Serializer/Deserializer的實現(xiàn)采用雙沿(DDR)的工作方式,利用面積換速度的策略,降低了電路中高頻率電路的比例,從而降低了電路的噪聲。
接收方向除了Deserializer之外,一般帶有還有對齊功能邏輯(Aligner)。相對SerDes發(fā)送端,SerDes接收端起始工作的時刻是任意的,接收器正確接收的第一個 bit可能是發(fā)送數(shù)據(jù)的任意bit位置。因此需要對齊邏輯來判斷從什么bit位置開始(哪里開始算是第一個數(shù)據(jù)),以組成正確的并行數(shù)據(jù)。對齊邏輯通過在串行數(shù)據(jù)流中搜索特征碼字(Alignment Code)來決定串并轉(zhuǎn)換的起始位置,這就需要用到了8b/10b的控制字符集,也就是我們常說的“K”字符,常見的什么K28.5、K28.0、K28.3、K28.4等,在JESD204B中他們又稱/K/、/R/、/A/、/Q/字符。
3.4 前向反饋均衡(feed-forward equalization/equalizer)
SerDes信號從發(fā)送芯片到達接收芯片所經(jīng)過的路徑稱為信道(channel),包括芯片封裝、pcb走線、過孔、電纜、連接器等元件。從頻域看,信道可以簡化為一個低通濾波器(LPF)模型,如果SerDes的速率大于信道的截止頻率,就會一定程度上損傷信號(高頻被濾掉了,數(shù)字信號邊沿會變得平滑)。均衡器的作用就是補償信道對信號的損傷。
發(fā)送端的均衡器采用FFE(Feed forward equalizers)結(jié)構(gòu),從頻域上看,F(xiàn)FE是一個高通濾波器(容易理解,信道損傷是一個低通濾波器,會抑制高頻,那么均衡就補償高頻)。從時域上看,又叫加重器(emphasis)。加重分為去加重(de-emphasis)和預(yù)加重(pre-emphasis)。De-emphasis 降低差分信號的擺幅(swing)。Pre-emphasis增加差分信號的擺幅。由于目前芯片都需要追求降低功耗,所以大部分使用de-emphasis的方式,加重越強,信號的平均幅度會越小。
4. 接收端模塊說明
4.2 接收均衡器
4.2.1 線形均衡器(Linear Equalizer)
接收端均衡器的目標(biāo)和發(fā)送均衡器是一致的。對于低速(<5Gbps)SerDes,通常采用連續(xù)時間域、線性均衡器實現(xiàn)如尖峰放大器(peaking amplifier), 均衡器對高頻分量的增益大于對低頻分量的增益。
4.2.2 裁決反饋均衡器(Decision Feedback Equalizer-DFE)
對于高速(>5Gbps)SerDes,由于信號的抖動(如ISI相關(guān)的確定性抖動)可能會超過或接近一個符號間隔(UI,Unit Interval),單單使用線性均衡器不再適用。線性均衡器對噪聲和信號一起放大,并沒有改善SNR或者說BER。對于高速SerDes,采用一種稱作DFE的非線性均衡器。DFE通過跟蹤過去多個UI的數(shù)據(jù)(history bits)來預(yù)測當(dāng)前bit的采樣門限,從而預(yù)測碼間干擾。DFE只對信號放大,不對噪聲放大,可以有效改善SNR。
不論是發(fā)送端還是接收端的均衡器,本質(zhì)上都是高通濾波器,因為數(shù)字信號采樣都希望邊沿越抖越好,邊沿變緩之后就會產(chǎn)生碼間干擾。
如下圖所示,系統(tǒng)傳輸一個“11011”的碼流,如果沒有均衡器,信號受到信道損傷,信號展寬,出現(xiàn)碼間干擾,導(dǎo)致中間的“0”,無法被檢測到。
DFE設(shè)計的關(guān)鍵是確定DFE系數(shù),如果DFE的系數(shù)接近信道的脈沖相應(yīng),就可以到的比較理想的結(jié)果。但是信道是一個時變的媒介,比如溫度電壓工藝的慢變化等因素會改變信道的特性。因此DFE的系數(shù)需要自適應(yīng)算法,自動撲獲和跟隨信道的變化。這也是實際應(yīng)用中DFE功能開啟的時候,做環(huán)境試驗的結(jié)果很多時候會出問題,因為DFE在信道特性變化的時候,自適應(yīng)的速度沒有跟上。DFE系數(shù)自適應(yīng)算法非常學(xué)術(shù),每個廠商的算法都是保密的,不對外公布。
4.3 時鐘數(shù)據(jù)恢復(fù)(CDR)
最開始接觸SerDes的是,說“沒有單獨的時鐘線,時鐘嵌入在數(shù)據(jù)流中的”,腦海里第一反應(yīng)就是在數(shù)據(jù)中插入一定規(guī)則的編碼代表時鐘的高電平或者低電平,回頭一想,那時鐘頻率不就遠(yuǎn)低于數(shù)據(jù)的采集頻率了嗎?實際上,所謂的“時鐘嵌在數(shù)據(jù)中”的意思,是時鐘嵌在數(shù)據(jù)的跳變沿里。不難理解,極端情況下,假設(shè)一串?dāng)?shù)據(jù)流是"1"和"0"交替發(fā)送,那這不就是一個時鐘了嗎。
CDR( Clock and Data Recovery)即時鐘和數(shù)據(jù)的恢復(fù),是SerDes設(shè)計中非常重要的環(huán)節(jié)。CDR常用的技術(shù)有基于數(shù)字鎖相環(huán)(PLL)和基于相位插值器兩種。當(dāng)數(shù)據(jù)經(jīng)過時,CDR就會捕獲數(shù)據(jù)邊沿跳變的頻率,如果數(shù)據(jù)長時間沒有跳變,CDR就無法得到精確的訓(xùn)練,CDR采樣時刻就會漂移,可能采到比真實數(shù)據(jù)更多的“0”或“1”。這就是為什么我們在發(fā)送的時候采用8b/10b編碼或擾碼來避免重復(fù)出現(xiàn)“0”或“1”,原因之一也在此。所以CDR有一個指標(biāo)叫做最長連“0”或連“1”長度容忍(Max Run Length或者Consecutive Identical Digits)能力。
恢復(fù)了時鐘之后,需要恢復(fù)數(shù)據(jù)。第一步首先要將恢復(fù)出來的時鐘與數(shù)據(jù)的邊緣進行對齊,然后再將數(shù)據(jù)給讀出來。在硬件原理上,使用PLL電路以及觸發(fā)器即可。