同避免鏈路收斂失敗)
1. 串行鏈路里的DSP模塊與它們?yōu)槭裁纯偸恰按蚣堋弊鲞^幾輪高速SerDes鏈路調(diào)試的工程師應(yīng)該都有這種感覺單看某個模塊原理圖、指標(biāo)、仿真報告都說得通一旦把發(fā)送端均衡、接收端均衡、時鐘恢復(fù)這些模塊串到同一條鏈路上跑起來就會出現(xiàn)各種“莫名其妙”的現(xiàn)象——眼圖明明在單模塊仿真里是開的整條鏈路卻收斂不了DFE抽頭權(quán)重讀出來一片亂碼CDR鎖定頻率漂移幾十個ppm找不到原因。這些問題的根源往往不在某個模塊本身而在于模塊和模塊之間的DSP交互邏輯沒有理清楚。1.1 SerDes DSP不只是均衡器先看清整個信號鏈在干什么SerDes的完整信號鏈可以分成幾個環(huán)節(jié)每個環(huán)節(jié)對信號做一件“修復(fù)”工作。發(fā)送端先把并行數(shù)據(jù)轉(zhuǎn)成串行比特流經(jīng)過TX驅(qū)動器輸出到信道。信道就是一段PCB走線、連接器、背板過孔它對高速信號做的事情非?!氨┝Α彼p高頻分量、引入反射、帶來串?dāng)_。信號在信道里走的距離越長、速率越高損傷就越嚴(yán)重。到了接收端信號已經(jīng)不是一個干凈的方波了而是一團被“壓扁”的模擬波形體現(xiàn)在眼圖上就是眼睛變小、抖動變大、碼間干擾ISI嚴(yán)重。接收端接下來的工作是把這個損壞的信號盡量恢復(fù)成可以判別的數(shù)字信號。這里涉及幾個關(guān)鍵模塊CTLE連續(xù)時間線性均衡器模擬域里做的線性濾波器主要用來補償信道的頻率相關(guān)損耗把高頻分量抬起來。AGC自動增益控制調(diào)節(jié)信號幅度到后端ADC或者比較器能處理的范圍。DFE判決反饋均衡器利用之前判決出來的碼元消除當(dāng)前碼元上的殘余ISI屬于非線性均衡對后標(biāo)post-cursor干擾的抑制特別有效。CDR時鐘數(shù)據(jù)恢復(fù)從接收數(shù)據(jù)里提取出時鐘找出最佳的采樣點。這四個模塊在SerDes接收端按順序協(xié)同工作而且每一個模塊的參數(shù)都會影響后面模塊的輸入信號形態(tài)。這就是DSP interactions的核心它們不是四個孤立的黑盒而是一條鏈路上的四個相互耦合的調(diào)節(jié)環(huán)。1.2 為什么“獨立調(diào)優(yōu)”的思路在SerDes里走不通很多第一次接觸高速鏈路調(diào)試的工程師會習(xí)慣性地采用“各個擊破”的思路先把CTLE調(diào)好再看DFE最后調(diào)CDR。這個思路在低速或者短距離鏈路上勉強能跑但在56Gbps PAM4或者112Gbps這類高速鏈路上幾乎一定會碰壁。原因在于鏈路的“均衡預(yù)算”是有限的。整個接收鏈路的均衡能力有個總量CTLE抬了多少高頻增益DFE需要消除的后標(biāo)幅度就會變化DFE抽頭收斂得深不深會改變采樣點附近的信號張度而采樣點的位置又是由CDR決定的CDR的環(huán)路帶寬和采樣點的選擇反過來又會決定DFE誤差信號的統(tǒng)計特性。用一個生活化的類比來理解這三者就像三個人配合抬一張桌子進窄門。CTLE負責(zé)把桌子的前半部分抬高DFE負責(zé)修正桌面的扭曲CDR負責(zé)找準(zhǔn)哪一刻能把整張桌子塞進門。如果一個人動作幅度過大另外兩個人就不得不大幅度修正自己的動作甚至互相抵消。整套系統(tǒng)只有“配合著調(diào)”才能收斂到一個共同的最優(yōu)點而不是各自調(diào)到各自的最優(yōu)。2. 發(fā)射端均衡FFE抽頭、增益與擺幅的協(xié)同發(fā)送端均衡在鏈路DSP交互里往往是被低估的角色。很多調(diào)試筆記的注意力都集中在接收端的CTLE和DFE上把發(fā)射端的FFE當(dāng)成了一個“預(yù)設(shè)好就不用管”的參數(shù)。實際上發(fā)射端的設(shè)置會深刻地影響接收端DSP的收斂狀態(tài)。2.1 FFE的預(yù)加重與去加重邏輯發(fā)送端FFE前饋均衡用一串抽頭系數(shù)來塑造發(fā)送波形的頻譜。最常見的形式是“去加重”主抽頭決定發(fā)送幅度后抽頭一般一兩個決定相對主抽頭的衰減量衰減相當(dāng)于對高頻分量做額外的強調(diào)。舉個例子一條信道在5GHz處的衰減比在1GHz處多8dB那么FFE可以預(yù)先在發(fā)送端把高頻分量多抬一點讓信號經(jīng)過信道之后各頻率分量恢復(fù)到大體均衡的狀態(tài)。這個“預(yù)先抬高頻”在時域上表現(xiàn)為當(dāng)發(fā)送碼元從高電平跳到低電平時后面的碼元被稍微壓低當(dāng)連續(xù)發(fā)送相同碼元時輸出幅度恢復(fù)到滿幅。FFE抽頭數(shù)量和權(quán)重的設(shè)計核心約束有兩個一個是抽頭數(shù)量不能無限增加因為每一級抽頭都需要對應(yīng)的模擬延遲線和驅(qū)動級面積和功耗吃不消另一個是抽頭的權(quán)重分辨率決定了均衡精度。對于56Gbps以上的設(shè)計發(fā)送端FFE往往只有3到5個抽頭能削的ISI范圍有限所以接收端的CTLE/DFE還得繼續(xù)兜底。2.2 TX幅度、壓擺率與接收端AGC的隱性聯(lián)動發(fā)送端FFE的權(quán)重設(shè)置會直接改變接收端看到的信號擺幅。主抽頭權(quán)重大平均發(fā)送幅度就高后抽頭權(quán)重拉低信號邊緣會變得更陡峭但整體的平均幅度也可能被壓低。接收端的AGC會基于接收信號幅度做自動調(diào)整。如果發(fā)射端主抽頭權(quán)重過大接收端AGC會主動降低增益這時候如果信道損耗又很大信號經(jīng)過CTLE之后的高頻分量幅度可能不夠如果發(fā)射端主抽頭權(quán)重過小AGC會把增益拉得很高這時候CTLE和DFE輸入端的噪聲和串?dāng)_也會被放大。這里的一個實操心得是調(diào)試時不要只盯著接收端的CTLE/DFE寄存器也要把TX FFE的抽頭權(quán)重讀數(shù)打出來看。如果TX的主抽頭權(quán)重在鏈路建立之后被訓(xùn)練算法調(diào)到接近上限甚至掛著上限說明接收端AGC大概率已經(jīng)在“拼命喊救命”了此時應(yīng)該優(yōu)先調(diào)整信道設(shè)計或者TX預(yù)加重策略而不是繼續(xù)在接收端均衡上死磕。我在某次背板鏈路的調(diào)試?yán)锞陀龅竭^接收端DFE的第一個抽頭權(quán)重讀出來異常大怎么調(diào)CTLE都不對勁。后來把眼光放到發(fā)送端發(fā)現(xiàn)當(dāng)時測試用的參考信號源FFE默認配置其實引入了過大的后標(biāo)干擾。把TX側(cè)前一個抽頭的權(quán)重稍微拉高之后DFE第一條抽頭權(quán)重立刻回落整個鏈路的抖動也降下來了。這個案例給我的教訓(xùn)很直接所謂DSP交互是真的會跨越發(fā)送端和接收端整條物理鏈路的。3. 接收端DSP核心鏈CTLE→AGC→DFE→CDR的編排接收端是整個SerDes DSP交互最密集的區(qū)域也是問題集中爆發(fā)的區(qū)域。這里每一個模塊的系數(shù)調(diào)整都會“波及”其他模塊。理解它們之間的耦合關(guān)系才是做好高速鏈路調(diào)優(yōu)的關(guān)鍵。3.1 CTLE與AGC不能讓“第一顆”均衡器吃太多增益CTLE在信號鏈里處于非常靠前的位置它直接處理從信道進來的模擬信號。CTLE可以補償信道損耗但它有個致命軟肋它沒法區(qū)分“被信道衰減掉的高頻信號”和“本來就在高頻段的高頻噪聲”。CTLE把高頻分量抬起來的同時也把高頻噪聲抬起來了。所以AGC和CTLE之間有個經(jīng)典的“博弈”。AGC會根據(jù)輸出信號的幅度調(diào)整增益CTLE根據(jù)信號的高頻損傷情況調(diào)整高頻增益。如果CTLE把高頻增益拉得太高AGC為了讓信號幅度不超出ADC的范圍會整體壓低增益。這樣做的結(jié)果是信號的中低頻部分反而被壓得太低高頻噪聲卻已經(jīng)被“放大”了一輪最終信噪比反而惡化。實際操作上需要記住一個原則CTLE高頻增益應(yīng)當(dāng)以一個較低的幅度姿態(tài)去補償信道而不是把信道損耗完全“補平”。補平是一個陷阱因為你會同時補出一堆噪聲。業(yè)界一般的做法是CTLE補償信道損耗的60%到80%剩余的交給DFE來處理。DFE是判決反饋型的它在消除探頭時的噪聲放大效應(yīng)上比CTLE優(yōu)秀得多。3.2 DFE抽頭權(quán)重與CDR鑒相信息之間的關(guān)系DFE是接收端均衡里“力氣最大”的一環(huán)。它的核心思路是當(dāng)前碼元恢復(fù)之后把它對下一個碼元的干擾減掉。因此DFE需要知道前面幾個碼元的值并且為每一個“前碼元位置”分配一個權(quán)重。DFE的收斂過程依賴判決反饋環(huán)路而判決反饋環(huán)路需要準(zhǔn)確的時鐘來采樣波形。CDR就是那個提供時鐘的模塊。于是出現(xiàn)了一個雞生蛋蛋生雞的問題DFE的收斂需要CDR給出好的采樣點CDR的鑒相需要均衡后的信號呈現(xiàn)清晰的跳變沿。這個耦合在自適應(yīng)算法里的體現(xiàn)是DFE抽頭權(quán)重和CDR相位會互相“拉扯”。當(dāng)DFE收斂不夠充分時信號波形上還有殘留的ISI這些ISI會被CDR的鑒相器誤判為相位偏移導(dǎo)致CDR把采樣點推到一個次優(yōu)位置采樣點次優(yōu)又會讓DFE的誤差信號變大DFE進一步調(diào)整權(quán)重形成惡性循環(huán)。一個有效的排查手段是觀察CDR積分路徑上的相位控制字。如果這個控制字在DFE收斂前后出現(xiàn)大幅擺動就要懷疑均衡是不是還沒收住。此時可以先強制把CDR固定在一個試驗性的采樣點比如最佳采樣的左側(cè)一點點讓DFE先收斂再放開CDR讓CDR自行找到最終采樣位置。這種“分步收斂”的方法在實際調(diào)試中屢試不爽。3.3 動態(tài)運行時的DSP握手自適應(yīng)的耦合與收斂順序現(xiàn)代SerDes接收端的自適應(yīng)算法大體上是分階段收斂的。鏈路建立初期先跑CTLE和AGC的粗調(diào)讓信號幅度落在合理范圍內(nèi)然后打開DFE自適應(yīng)讓抽頭權(quán)重逐步收斂最后再由CDR沿著均衡后的眼圖尋找最優(yōu)采樣相位。這個順序是有講究的。CTLE/AGC是模擬域的粗調(diào)響應(yīng)快、穩(wěn)定DFE是數(shù)字域的精確補償收斂需要幾個微秒級別的時間CDR則涉及整個采樣環(huán)路的反饋帶寬收斂最慢也最容易受前面兩者的影響。如果上來就讓CDR和DFE同時瘋狂自適應(yīng)經(jīng)常會出現(xiàn)“二者都認為自己沒錯但整體性能就是差”的情形。實操里的一個技巧是觀察所有自適應(yīng)環(huán)路的收斂曲線而不是只看最終讀數(shù)。以某個速率和信道條件為基準(zhǔn)記錄下CTLE、DFE抽頭權(quán)重、CDR相位控制字隨時間的變化軌跡。如果某一條曲線振蕩幅度一直很大說明有另一個環(huán)路在跟它“糾纏”。把糾纏雙方找出來優(yōu)先固定其中一方問題往往會迎刃而解。4. 鏈路訓(xùn)練與DSP參數(shù)交接從握手狀態(tài)機看交互高速SerDes鏈路從加電到正常收發(fā)數(shù)據(jù)并不是“信號一接上就能跑”的。它要經(jīng)歷一個鏈路訓(xùn)練階段類似于兩個人先用暗號試探對方再約定一套統(tǒng)一的“說話規(guī)則”。這套規(guī)則在以太網(wǎng)環(huán)境里叫鏈路訓(xùn)練Link Training在PCIe環(huán)境里叫LTSSM訓(xùn)練狀態(tài)機。不管協(xié)議怎么叫背后的核心都是DSP參數(shù)的握手和交接。4.1 訓(xùn)練序列與Preset系數(shù)為什么第一步是握手鏈路訓(xùn)練的第一步是收發(fā)雙方交換訓(xùn)練序列這些序列是預(yù)先約定好的、帶有一定頻率成分的長pattern。接收端用訓(xùn)練序列來評估信道質(zhì)量并依此調(diào)整自己的均衡參數(shù)。訓(xùn)練序列的選擇有講究它要包含足夠多的跳變沿才能讓CDR鎖定頻率也要包含足夠長的連續(xù)相同碼元段才能讓DFE觀察到完整的后標(biāo)拖尾。經(jīng)典常用的PRBS7、PRBS9、PRBS31各有各的特性分別適合不同的測試目的。在握手階段發(fā)送端通常會先按一組“預(yù)設(shè)”的FFE系數(shù)來發(fā)送信號。這些預(yù)設(shè)系數(shù)是從典型信道場景里統(tǒng)計出來的“平均最優(yōu)值”不是針對當(dāng)前信道的精確值。接收端拿到信號之后評估出信道特性再通過反饋通道把建議的系數(shù)調(diào)整信息送回發(fā)送端。這種“發(fā)送端-接收端”之間的系數(shù)交換本身就是一種DSP交互而且是跨芯片的交互。這里有一個容易忽略的點訓(xùn)練階段傳輸?shù)乃俾释日9ぷ魉俾实?。這是因為在DSP參數(shù)還沒收斂之前鏈路的承載能力有限強行跑滿速率會導(dǎo)致訓(xùn)練序列上的誤碼率太高自適應(yīng)算法根本無從評估。所以鏈路訓(xùn)練的握手是先慢速達成基本通信再逐步提速到目標(biāo)速率最后在目標(biāo)速率上完成精細均衡。4.2 收斂后DSP參數(shù)凍結(jié)的依據(jù)與風(fēng)險當(dāng)訓(xùn)練完成后收發(fā)雙方的DSP參數(shù)通常會被“凍結(jié)”進入數(shù)據(jù)階段。凍結(jié)不是隨便凍的有一個判定標(biāo)準(zhǔn)在訓(xùn)練序列上達到目標(biāo)誤碼率BER并且連續(xù)保持多個評估周期。但“凍結(jié)”本身也帶來了風(fēng)險。高速鏈路的信道條件不是永恒不變的。溫度變化會讓PCB的介電常數(shù)漂移電源電壓波動會改變驅(qū)動器的輸出擺幅連接器插拔會改變反射特性。參數(shù)被凍結(jié)之后這些緩慢漂移就沒人去補償了鏈路的眼圖裕量會被慢慢“啃掉”。為此現(xiàn)代鏈路設(shè)計引入了后臺自適應(yīng)和周期性重訓(xùn)練機制。后臺自適應(yīng)允許DFE抽頭權(quán)重在數(shù)據(jù)階段繼續(xù)微調(diào)但調(diào)整步長被限制得很小防止數(shù)據(jù)階段的噪聲把參數(shù)帶偏。周期性重訓(xùn)練則是在鏈路質(zhì)量下降到一定程度時主動切回訓(xùn)練階段重新握手。實際的判斷依據(jù)可以看誤碼率監(jiān)控模塊的實時數(shù)據(jù)。如果BER長期為零或者極低說明DSP參數(shù)和當(dāng)前信道匹配良好如果BER在某個時間點突然跳變大概率是信道發(fā)生了實質(zhì)性變化需要主動觸發(fā)重訓(xùn)練。DSP交互不只是參數(shù)之間的耦合也包括時間維度上“訓(xùn)練-凍結(jié)-監(jiān)測-重訓(xùn)”的循環(huán)。5. 實測經(jīng)驗一個眼圖問題的排查過程實錄講了這么多原理最后分享一個真實場景下的排查案例。雖然具體項目做了脫敏處理以下統(tǒng)稱為“某高速背板項目”但整個過程非常典型能幫大家把前面幾章的交互邏輯串起來。5.1 案例描述與初步現(xiàn)象某公司的背板交換機項目單板上有若干條高速差分通道工作速率為56Gbps PAM4鏈路長度在20英寸左右。某天測試時發(fā)現(xiàn)某條通道的誤碼率明顯偏高眼圖在接收端示波器上看起來“眼睛睜不開”——上下眼皮之間有大量圍繞采樣點的“毛刺”。初步測試結(jié)果發(fā)射端信號本身的眼圖在測試點上看起來正常眼高達到規(guī)范要求。接收端CTLE輸出端的眼圖高頻分量沒有明顯缺損。DFE輸出端的眼圖上下兩層的眼睛都偏小且中心區(qū)域有明顯散射點。5.2 排查步驟從寄存器讀數(shù)到隔離CDR/DFE第一步讀取接收端DSP的寄存器狀態(tài)。把CTLE的增益檔位、AGC控制字、DFE抽頭權(quán)重、CDR相位控制字都打出來。結(jié)果發(fā)現(xiàn)DFE第一個抽頭權(quán)重偏大第二條抽頭權(quán)重也明顯非零而CDR的控制字持續(xù)在某個范圍內(nèi)擺動沒有完全穩(wěn)定下來。這個組合很可疑。DFE第二條抽頭權(quán)重非零說明信道存在較長的反射拖尾CDR控制字?jǐn)[動說明采樣點一直在漂移。表面看起來像是信道反射問題但換一條參考鏈路測試時同樣的信道條件卻沒有這個現(xiàn)象。于是懷疑問題出在模塊間的耦合上。第二步按照前面說的“分步收斂”方法把CDR先固定在一個試探位置讓DFE先收斂。結(jié)果DFE抽頭權(quán)重明顯回落說明DFE的收斂條件是滿足的。然后放開CDR觀察它找到的采樣位置。發(fā)現(xiàn)CDR最終鎖定的位置對比DFE收斂后的最優(yōu)采樣點存在大概0.2個UI的偏移。到這里問題已經(jīng)比較清晰了CDR被什么因素“帶偏了”。第三步回頭查發(fā)送端的FFE設(shè)置。讀取訓(xùn)練階段協(xié)商出來的TX FFE系數(shù)發(fā)現(xiàn)主抽頭和后抽頭的比例與信號源默認值有差異。仔細檢查原來這條通道的TX均衡參數(shù)是測試系統(tǒng)自動配置的配置過程中參考了一條特征相近但實際有差異的參考鏈路導(dǎo)致高頻補償量偏大。TX高頻補償偏大等效于在接收端輸入了一個被“過度均衡”的信號波形的過沖加大。DFE為了消除過沖造成的后標(biāo)會把第一個抽頭權(quán)重推高。而DFE的變化改變了采樣點附近的波形形態(tài)最終誤導(dǎo)了CDR的鑒相。整條鏈就是因為TX側(cè)的一個配置偏差引發(fā)了接收端三個DSP模塊的連鎖反應(yīng)。第四步修正TX FFE參數(shù)把高頻補償降低到參考鏈路的較優(yōu)配置重新跑鏈路訓(xùn)練。結(jié)果DFE抽頭權(quán)重恢復(fù)正常水平CDR鎖定穩(wěn)定誤碼率降到儀器底噪級別整個問題解決。5.3 三種高頻故障模式速查表把這些年遇到的SerDes DSP交互類問題整理成一個速查表供大家在調(diào)試時快速定位方向故障現(xiàn)象可能原因排查方向常見誤區(qū)DFE抽頭權(quán)重異常偏大TX均衡過度補償或CTLE高頻增益偏高檢查TX FFE系數(shù)、CTLE增益檔位只顧著調(diào)DFE增益CDR相位控制字持續(xù)擺動DFE未完全收斂CDR相位受ISI干擾分步收斂先固定CDR、收斂DFE直接加大CDR環(huán)路帶寬眼圖兩側(cè)不對稱一側(cè)塌陷CTLE引入相位失真或信道有反射點查看CTLE相位響應(yīng)、TDR掃描信道認為是單純信道反射鏈路訓(xùn)練完成后BER仍然偏高訓(xùn)練階段與數(shù)據(jù)階段信號條件不一致檢查訓(xùn)練時是否使用完整速率的pattern忘記對比訓(xùn)練/數(shù)據(jù)兩個階段的參數(shù)這個表只能做為初步方向判斷不能替代實際調(diào)試。真正的DSP交互問題往往涉及多參數(shù)聯(lián)動需要拿著寄存器讀數(shù)一點點對照分析。6. 最后再分享一個調(diào)試時非常實用的小習(xí)慣我做高速鏈路調(diào)試的習(xí)慣是拿到一塊板子之后不管眼圖開路還是閉路先把所有DSP模塊的寄存器讀數(shù)完整存一版存檔。之后每調(diào)整一個參數(shù)就重新存一版。調(diào)試到深夜發(fā)現(xiàn)鏈路壞了找不到原因的時候把之前幾版寄存器讀數(shù)的差異拿出來比對經(jīng)常比在示波器上抓波形有效得多。另一個小技巧是把DFE第一條抽頭權(quán)重的“顆粒度”打出來看。對于現(xiàn)代SerDesDFE抽頭權(quán)重通常是一組高精度的數(shù)字控制字這個控制字的變化粒度可以反映鏈路的穩(wěn)定程度。如果這個值在小數(shù)點后第三位還在持續(xù)跳動說明鏈路的噪聲基底很高如果這個值穩(wěn)得紋絲不動說明鏈路被“凍”得過于死板信道一旦漂移就會出問題。“均衡不是越強越好收斂不是越快越好參數(shù)不是越穩(wěn)越好”——這三句話基本概括了我這幾年做SerDes DSP交互調(diào)試的核心體會。每個模塊都有它的作用范圍也有它的副作用邊界。好的鏈路設(shè)計是在充分理解這些交互關(guān)系的前提下讓每個模塊各自收斂到恰到好處的位置。