理解SerDes
FPGA發展到今天,SerDes(Serializer-Deserializer)基本上是標配了。從PCI到PCI Express, 從ATA到SATA,從並行ADC接口到JESD204, 從RIO到Serial RIO,…等等,都是在借助SerDes來提高性能。SerDes是非常復雜的數模混合設計,用戶手冊的內容只是描述了森林里面的一棵小樹,並不能夠解釋SerDes是怎么工作的。SerDes怎么可以沒有傳輸時鍾信號?什么是加重和均衡?抖動和誤碼是什么關系?各種抖動之間有什么關系?本篇小文試着從一個SerDes用戶的角度來理解SerDes是怎么設計的, 由於水平有限,一定有不夠准確的地方,希望對剛開始接觸SerDes的工程師有所幫助。
Contents
2.1串行器解串器(Serializer/Deserializer) 6
2.7 SerDes收發Driver及差分接口轉換... 19
6.參考資料 了解更多的內容,可以閱讀以下內容。... 25
1. SerDes的價值
1.1並行總線接口
在SerDes流行之前,芯片之間的互聯通過系統同步或者源同步的並行接口傳輸數據,圖1.1演示了系統和源同步並行接口。
隨着接口頻率的提高,在系統同步接口方式中,有幾個因素限制了 有效數據窗口寬度 的繼續增加。
l 時鍾到達兩個芯片的傳播延時不相等(clock skew)
l 並行數據各個bit的傳播延時不相等(data skew)
l 時鍾的傳播延時和數據的傳播延時不一致(skew between data and clock)
雖然可以通過在目的芯片(chip #2)內用PLL補償時鍾延時差(clock skew),但是PVT變化時,時鍾延時的變化量和數據延時的變化量是不一樣的。這又進一步惡化了數據窗口。
源同步接口方式中,發送側Tx把時鍾伴隨數據一起發送出去, 限制了clock skew對有效數據窗口的危害。通常在發送側芯片內部,源同步接口把時鍾信號和數據信號作一樣的處理,也就是讓它和數據信號經過相同的路徑,保持相同的延時。這樣PVT變化時,時鍾和數據會朝着同一個方向增大或者減小相同的量,對skew最有利。
我們來做一些合理的典型假設,假設一個32bit數據的並行總線,
a)發送端的數據skew = 50 ps ---很高的要求
b)pcb走線引入的skew = 50ps ---很高的要求
c)時鍾的周期抖動jitter = +/-50 ps ---很高的要求
d)接收端觸發器采樣窗口 = 250 ps ---Xilinx V7高端器件的IO觸發器
可以大致估計出並行接口的最高時鍾 = 1/(50+50+100+250) = 2.2GHz (DDR)或者1.1GHz (SDR)。
利用源同步接口,數據的有效窗口可以提高很多。通常頻率都在1GHz以下。在實際應用中可以見到如SPI4.2接口的時鍾可以高達DDR 700MHz x 16bits位寬。DDR Memory接口也算一種源同步接口,如DDR3在FPGA中可以做到大約800MHz的時鍾。
要提高接口的傳輸帶寬有兩種方式,一種是提高時鍾頻率,一種是加大數據位寬。那么是不是可以無限制的增加數據的位寬呢?這就要牽涉到另外一個非常重要的問題-----同步切換噪聲(SSN)。
這里不討論SSN的原理,直接給出SSN的公式 SSN = L *N* di/dt。L是芯片封裝電感,N是數據寬度,di/dt是電流變化的斜率。隨着頻率的提高,數據位款的增加,SSN成為提高傳輸帶寬的主要瓶頸。圖1.2是一個DDR3串擾的例子。圖中低電平的理論值在0V,由於SSN的影響,低電平表現為震盪,震盪噪聲的最大值達610mV,因此噪聲余量只有1.5V/2-610mV=140mV。
因此也不可能靠無限的提高數據位寬來繼續增加帶寬。一種解決SSN的辦法是使用差分信號替代單端信號,使用差分信號可以很好的解決SSN問題,代價是使用更多的芯片引腳。使用差分信號仍然解決不了數據skew的問題,很大位寬的差分信號再加上嚴格的時序限制,給並行接口帶來了很大的挑戰。
源同步接口的時鍾頻率已經遇到瓶頸,由於信道的非理想(channel)特性,再繼續提高頻率,信號會被嚴重損傷,就需要采用均衡和數據時鍾相位檢測等技術。這也就是SerDes所采用的技術。SerDes(Serializer-Deserializer)是串行器和解串器的簡稱。串行器(Serializer)也稱為SerDes發送端(Tx),(Deserializer)也稱為接收端Rx。Figure1.3是一個N對SerDes收發通道的互連演示,一般N小於4。
可以看到,SerDes不傳送時鍾信號,這也是SerDes最特別的地方,SerDes在接收端集成了CDR(Clock Data Recovery)電路,利用CDR從數據的邊沿信息中抽取時鍾,並找到最優的采樣位置。
SerDes采用差分方式傳送數據。一般會有多個通道的數據放在一個group中以共享PLL資源,每個通道仍然是相互獨立工作的。
SerDes需要參考時鍾(Reference Clock),一般也是差分的形式以降低噪聲。接收端Rx和發送端Tx的參考時鍾可以允許幾百個ppm的頻差(plesio-synchronous system),也可以是同頻的時鍾,但是對相位差沒有要求。
作個簡單的比較,一個SerDes通道(channel)使用4個引腳(Tx+/-,Rx+/-), 目前的FPGA可以做到高達28Gbps。而一個16bits的DDR3-1600的線速率為1.6Gbps*16 = 25Gbps,卻需要50個引腳。此對比可以看出SerDes在傳輸帶寬上的優勢。
相比源同步接口,SerDes的主要特點包括:
l SerDes在數據線中時鍾內嵌,不需要傳送時鍾信號。
l SerDes通過加重/均衡技術可以實現高速長距離傳輸,如背板。
l SerDes 使用了較少的芯片引腳
1.3 中間類型
也存在一些介於SerDes和並行接口之間的接口類型,相對源同步接口而言,這些中間類型的接口也使用串行器(Serializer)解串器(Deserializer),同時也傳送用於同步的時鍾信號。這類接口如視頻顯示接口7:1 LVDS等。
2. SerDes結構(architecture)
SerDes的主要構成可以分為三部分,PLL模塊,發送模塊Tx,接收模塊Rx。為了方便維護和測試,還會包括控制和狀態寄存器,環回測試,PRBS測試等功能。見圖2.1。

Figure 2.1 Basic Blocks of a typical SerDes
圖中藍色背景子模塊為PCS層,是標准的可綜合CMOS數字邏輯,可以硬邏輯實現,也可以使用FPGA軟邏輯實現,相對比較容易被理解。褐色背景的子模塊是PMA層,是數模混合CML/CMOS電路,是理解SerDes去別於並行接口的關鍵,也是本文要討論的內容。
發送方向(Tx)信號的流向: FPGA軟邏輯(fabric)送過來的並行信號,通過接口FIFO(Interface FIFO), 送給8B/10B編碼器(8B/10B encoder)或擾碼器(scambler),以避免數據含有過長連零或者連1。之后送給串行器(Serializer)進行 並->串 轉換。串行數據經過均衡器(equalizer)調理,有驅動器(driver)發送出去。
接收方向(Rx)信號的流向, 外部串行信號由線性均衡器(Linear Equalizer)或DFE (Decision Feedback Equalizer)結構均衡器調理,去除一部分確定性抖動(Deterministic jitter)。CDR從數據中恢復出采樣時鍾,經解串器變為對齊的並行信號。8B/10B解碼器(8B/10B decoder)或解擾器(de-scambler)完成解碼或者解擾。如果是異步時鍾系統(plesio-synchronous system),在用戶FIFO之前還應該有彈性FIFO來補償頻差。
PLL負責產生SerDes各個模塊所需要的時鍾信號,並管理這些時鍾之間的相位關系。以圖中線速率10Gbps為例,參考時鍾頻率250MHz。Serializer/Deserializer至少需要5GHz 0相位時鍾和5GHz 90度相位時鍾,1GHz(10bit並行)/1.25GHz(8bit並行)時鍾等。
一個SerDes通常還要具調試能力。例如偽隨機碼流產生和比對,各種環回測試,控制狀態寄存器以及訪問接口,LOS檢測, 眼圖測試等。
2.1串行器解串器(Serializer/Deserializer)
串行器Serializer把並行信號轉化為串行信號。Deserializer把串行信號轉化為並行信號。一般地,並行信號為8 /10bit或者16/20bit寬度,串行信號為1bit寬度(也可以分階段串行化,如8bit->4bit->2bit->equalizerà1bit以降低equalizer的工作頻率)。采用擾碼(scrambled)的協議如SDH/SONET, SMPTE SDI使用8/16bit的並行寬度,采用8B/10B編碼的協議如PCIExpress,GbE使用10bits/20bits寬度。
一個4:1的串行器如圖xxx所示。8:1或16:1的串行器采用類似的實現。實現時,為了降低均衡器的工作頻率,串行器會先把並行數據變為2bits,送給均衡器equalizer濾波,最后一步再作2:1串行化,本文后面部分都按1bit串行信號解釋。
一個1:4的解串器如圖2.3所示,8:1或16:1的解串器采用類似的實現。實現時,為了降低均衡器(DFE based Equalizer)的工作頻率,DFE工作在DDR模式下,解串器的輸入是2bit或者更寬,本文后面部分都按1bit串行信號解釋。
Serializer/Deserializer的實現采用雙沿(DDR)的工作方式,利用面積換速度的策略,降低了電路中高頻率電路的比例,從而降低了電路的噪聲。
接收方向除了Deserializer之外,一般帶有還有對齊功能邏輯(Aligner)。相對SerDes發送端,SerDes接收端起始工作的時刻是任意的,接收器正確接收的第一個 bit可能是發送並行數據的任意bit位置。因此需要對齊邏輯來判斷從什么bit位置開始,以組成正確的並行數據。對齊邏輯通過在串行數據流中搜索特征碼字(Alignment Code)來決定串並轉換的起始位置。比如8B/10B編碼的協議通常用K28.5(正碼10’b1110000011,負碼10’b0001111100)來作為對齊字。圖2.4為一個對齊邏輯的演示。通過滑窗,逐bit比對,以找到對齊碼(Align-Code)的位置,經過多次在相同的位置找到對齊碼之后,狀態機鎖定位置並選擇相應的位置輸出對齊數據。
2.2發送端均衡器( Tx Equalizer)
SerDes信號從發送芯片到達接收芯片所經過的路徑稱為信道(channel),包括芯片封裝,pcb走線,過孔,電纜,連接器等元件。從頻域看,信道可以簡化為一個低通濾波器(LPF)模型,如果SerDes的速率大於信道(channel)的截止頻率,就會一定程度上損傷(distort)信號。均衡器的作用就是補償信道對信號的損傷。
發送端的均衡器采用FFE(Feed forward equalizers)結構,發送端的equalizer也稱作加重器(emphasis)。加重(Emphasis)分為去加重(de-emphasis)和預加重(pre-emphasis)。De-emphasis降低差分信號的擺幅(swing)。Pre-emphasis增加差分信號的擺幅。FPGA大部分使用de-emphasis的方式,加重越強,信號的平均幅度會越小。
發送側均衡器設計為一個高通濾波器(HPF),大致為信道頻響H(f)的反函數H-1(f),FFE的目標是讓到達接收端的信號為一個干凈的信號。FFE的實現方式有很多,一個典型的例子如圖2.5所示。
調節濾波器的系數可以改變濾波器的頻響,以補償不同的信道特性,一般可以動態配置。以10Gbps線速率為例,圖2.5為DFE頻率響應演示。可以看到,對於C0=0,C1=1.0,C2=-0.25的配置,5GHz處高頻增益比低頻區域高出4dB,從而補償信道對高頻頻譜的衰減。
采樣時鍾的頻率限制了這種FFE最高只能補償到Fs/2(例子中Fs/2=5GHz)。根據采樣定理,串行數據里的信息都包含在5GHz以內,從這個角度看也就足夠了。如果要補償Fs/2以上的頻率,就要求FFE高於Fs的工作時鍾,或者連續時間域濾波器(Continuous Time FFE)。
圖2.7為DFE時域濾波效果的演示,以10Gbps線速率為例,一個UI=0.1 nS=100ps。演示的串行數據碼流為二進制[00000000100001111011110000]。








