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