:從理論到FPGA高速ADC/DAC鏈路調(diào)試全解析)
1. 項目概述從“紙上談兵”到實戰(zhàn)的JESD204B“紙上談兵_JESD204B”這個標(biāo)題精準(zhǔn)地戳中了很多硬件和FPGA工程師在面對這個高速串行接口標(biāo)準(zhǔn)時的痛點。我們可能都讀過JESD204B的官方標(biāo)準(zhǔn)文檔看過一堆理論介紹知道它用8B/10B編碼支持多通道、確定性延遲是下一代高速數(shù)據(jù)轉(zhuǎn)換器ADC/DAC與邏輯器件如FPGA互聯(lián)的基石。但真到了項目里要動手把一塊高速ADC的數(shù)據(jù)通過JESD204B鏈路穩(wěn)定、無誤地接收到FPGA里或者把FPGA處理完的數(shù)據(jù)通過JESD204B發(fā)送給DAC就會發(fā)現(xiàn)理論和實操之間隔著一道鴻溝。參數(shù)怎么配鏈路訓(xùn)練失敗怎么調(diào)眼圖怎么測時鐘怎么規(guī)劃這些問題光看標(biāo)準(zhǔn)文檔是找不到現(xiàn)成答案的。這個項目或者說這篇分享目的就是填平這道鴻溝把JESD204B從“紙上”的理論變成可以“談兵”乃至“實戰(zhàn)”的工程能力。它適合正在或即將使用高速ADC/DAC進(jìn)行系統(tǒng)設(shè)計的射頻、通信、儀器儀表領(lǐng)域的工程師無論你是用Xilinx的7系列、UltraScale還是Intel的Arria 10、Stratix 10這里面的核心思路和踩坑經(jīng)驗都是相通的。2. 鏈路核心設(shè)計與參數(shù)規(guī)劃實戰(zhàn)2.1 鏈路速率與通道配置的權(quán)衡計算JESD204B鏈路的設(shè)計起點永遠(yuǎn)是那幾個核心參數(shù)鏈路速率Lane Rate、每幀位數(shù)F、每幀周期數(shù)K、每轉(zhuǎn)換器位數(shù)N‘、每幀的轉(zhuǎn)換器數(shù)M。標(biāo)準(zhǔn)文檔里的公式看著頭疼我們換個方式理解。假設(shè)我們有一個雙通道、14位、采樣率250MSPS的ADC。廠商給的JESD204B接口模式可能是“JESD204B Subclass 1 L2 M2 F2”。這串“黑話”怎么解讀首先L2代表用了2個物理通道Lane。M2代表鏈路承載了2個轉(zhuǎn)換器Converter的數(shù)據(jù)這里就是我們的兩個ADC通道。F2代表每幀F(xiàn)rame包含2個字節(jié)Octets。關(guān)鍵來了鏈路速率怎么算公式是Lane Rate (M * N‘ * 采樣率 * 10/8) / L。這里10/8是因為8B/10B編碼帶來了20%的開銷。N‘是每轉(zhuǎn)換器位數(shù)對于14位ADC通常N‘會取16因為要字節(jié)對齊且可能包含控制位。代入計算Lane Rate (2 * 16 * 250e6 * 1.25) / 2 5 Gbps。這意味著每個物理通道需要運行在5Gbps。你需要立刻評估你的FPGA的GTX/GTH收發(fā)器在這個速率下性能如何你的PCB板材比如是否用了Megtron 6和布線差分對長度、對內(nèi)skew控制能否支持5Gbps的穩(wěn)定傳輸如果評估下來有風(fēng)險一個直接的調(diào)整思路就是增加通道數(shù)L。如果把L增加到4那么單通道速率就降到了2.5Gbps布線難度和功耗都會顯著下降但代價是使用了更多的FPGA收發(fā)器資源和PCB布線復(fù)雜度。這就是一個典型的權(quán)衡。注意公式里的N‘一定要以器件數(shù)據(jù)手冊為準(zhǔn)。有些16位ADC其JESD204B模式下的N‘可能只有14只傳輸數(shù)據(jù)位也可能是16包含數(shù)據(jù)位和狀態(tài)位。算錯了速率鏈路永遠(yuǎn)無法建立。2.2 子類Subclass與時鐘架構(gòu)選擇Subclass是JESD204B的另一個核心概念它定義了系統(tǒng)同步和確定性延遲的實現(xiàn)方式。Subclass 0最簡單但基本不用。它不保證多芯片間的確定性延遲只適用于單芯片點對點。Subclass 1目前絕對的主流。它依靠一個公共的、高精度的設(shè)備時鐘Device Clock 也常叫SYSREF來對齊所有鏈路參與者的內(nèi)部時鐘相位和幀、多幀邊界。SYSREF必須與采樣時鐘或與其同源保持固定的相位關(guān)系。Subclass 2使用SYNC~信號作為精準(zhǔn)時序參考理論上可以不用SYSREF但實現(xiàn)復(fù)雜支持度低很少見。對于絕大多數(shù)涉及高速數(shù)據(jù)采集和波束成形等需要嚴(yán)格時間對齊的應(yīng)用Subclass 1是唯一的選擇。這就引出了時鐘架構(gòu)的設(shè)計難點如何產(chǎn)生低抖動Jitter的采樣時鐘和滿足嚴(yán)格時序要求的SYSREF一個經(jīng)典的方案是使用一顆高性能的時鐘芯片如LMK04828 HMC7044同時產(chǎn)生采樣時鐘和SYSREF。關(guān)鍵點在于SYSREF必須是采樣時鐘的整數(shù)分頻并且其邊沿必須被精準(zhǔn)地對齊到采樣時鐘或器件時鐘的某個有效沿上以滿足建立/保持時間要求。在PCB設(shè)計上必須將采樣時鐘和SYSREF作為差分對進(jìn)行嚴(yán)格的等長布線并確保到ADC和FPGA的時鐘走線長度匹配以最小化時鐘偏斜Skew。3. FPGA側(cè)核心IP配置與關(guān)鍵信號解析3.1 JESD204 IP核參數(shù)化要點無論是Xilinx的JESD204 IP還是Intel的JESD204B Intel FPGA IP配置界面都有一大堆參數(shù)。除了填入2.1節(jié)計算出的L M F等參數(shù)外有幾個隱藏的“坑點”需要特別注意。1. RX/TX數(shù)據(jù)位寬與時鐘域IP核內(nèi)部會有一個“Converted Data”接口位寬 M * N‘。對于前面M2 N‘16的例子位寬就是32位。這個接口的時鐘是“鏈路層時鐘”頻率 采樣率。你需要確保這個時鐘域能夠被后級的DSP邏輯安全地處理。如果采樣率很高如250MHz32位寬的數(shù)據(jù)在FPGA內(nèi)跨時鐘域傳遞會是一個挑戰(zhàn)可能需要用到異步FIFO或寄存器打拍同步。2. 彈性緩沖區(qū)Elastic Buffer深度這個緩沖區(qū)用于補償SYSREF和采樣時鐘之間的相位差以及不同通道間的微小偏斜。深度設(shè)置太小容易溢出或下溢導(dǎo)致鏈路失鎖設(shè)置太大會增加固定延遲和資源消耗。通常IP核會根據(jù)你輸入的時鐘參數(shù)推薦一個值初期可以接受推薦值。但在調(diào)試階段如果發(fā)現(xiàn)偶爾有數(shù)據(jù)錯誤可以嘗試適當(dāng)增加緩沖區(qū)深度。3. 確定性延遲建立Deterministic Latency使能如果你用的是Subclass 1并且需要多片ADC之間或ADC與DAC之間的數(shù)據(jù)嚴(yán)格對齊這個功能必須使能。它要求IP核在收到有效的SYSREF后開始進(jìn)行鏈路初始化并確保每次上電或重同步后從串行數(shù)據(jù)到并行輸出數(shù)據(jù)的延遲是固定不變的。3.2 關(guān)鍵狀態(tài)與調(diào)試信號監(jiān)測配置好IP生成例子工程后你會看到一堆信號。除了數(shù)據(jù)總線下面幾個信號是調(diào)試的生命線sync 這個信號雙向的。在初始化階段FPGA接收端拉低sync告訴ADC“我沒準(zhǔn)備好”當(dāng)FPGA的接收邏輯準(zhǔn)備好后會釋放sync拉高ADC檢測到sync變高后開始發(fā)送數(shù)據(jù)。如果sync一直來回跳變在高低電平間振蕩說明鏈路在不斷地訓(xùn)練和失敗這是最常見的故障現(xiàn)象。cgsCode Group Synchronization狀態(tài)在sync拉低期間接收端會嘗試對齊8B/10B編碼的碼組。你可以通過IP核的狀態(tài)寄存器或ILA集成邏輯分析儀抓取這個狀態(tài)。如果cgs長時間無法完成說明物理層有問題比如差分線極性接反、速率不匹配、信號完整性太差。ilasInitial Lane Alignment Sequence狀態(tài)cgs完成后接收端會等待并解析ADC發(fā)送的ILAS序列。這個序列里包含了鏈路的所有配置參數(shù)L M F K N‘ SCR CF等。如果ilas校驗失敗說明FPGA側(cè)配置的參數(shù)與ADC實際發(fā)送的參數(shù)不匹配。這是“紙上”參數(shù)和“實戰(zhàn)”配置脫節(jié)的高發(fā)區(qū)你必須用ILA抓取ADC實際發(fā)來的ILAS數(shù)據(jù)與IP核的配置進(jìn)行逐位比對。幀錯誤Frame Error和可糾正錯誤Disparity Error計數(shù)器在鏈路穩(wěn)定運行后這些計數(shù)器應(yīng)該保持為0或極低值由噪聲引起。如果幀錯誤持續(xù)增長說明鏈路同步可能丟失如果可糾正錯誤增長說明信號質(zhì)量不佳但8B/10B編碼自身糾正了單比特錯誤這是一個預(yù)警信號。4. 板級調(diào)試與信號完整性實戰(zhàn)4.1 上電初始化與眼圖測試硬件上電后不要急于在FPGA邏輯里找數(shù)據(jù)。第一步應(yīng)該是用高速示波器帶寬至少是鏈路速率的1.8倍以上對于5Gbps建議13GHz以上帶寬示波器測量收發(fā)器通道的眼圖。確保電源和參考時鐘穩(wěn)定首先測量FPGA收發(fā)器bank的供電如MGTAVTT MGTAVCC和ADC的供電是否干凈紋波是否在要求范圍內(nèi)。測量輸入到FPGA GTX參考時鐘的頻偏和抖動。強制發(fā)送PRBS模式大多數(shù)ADC的JESD204B接口支持發(fā)送偽隨機二進(jìn)制序列PRBS用于測試。在初始化ADC寄存器時將其配置為PRBS輸出模式。同時將FPGA側(cè)的JESD204 IP核也配置為PRBS檢測模式。測量眼圖用示波器連接一個JESD204B通道的差分對最好使用差分探頭或示波器的差分輸入功能。觸發(fā)模式設(shè)為時鐘恢復(fù)或邊沿觸發(fā)。觀察眼圖是否張開眼高、眼寬是否足夠有無明顯的抖動、彌散或閉合。一個健康的5Gbps眼圖應(yīng)該清晰開闊。如果眼圖閉合問題可能出在PCB布局布線阻抗不連續(xù)、過孔stub太長、電源噪聲、或收發(fā)器驅(qū)動/均衡設(shè)置不當(dāng)。調(diào)整收發(fā)器參數(shù)如果眼圖不理想可以在FPGA側(cè)動態(tài)調(diào)整收發(fā)器的參數(shù)這是調(diào)試的“利器”。主要包括發(fā)射預(yù)加重Pre-emphasis補償高頻損耗。對于長走線可以適當(dāng)增加預(yù)加重。接收均衡Equalization包括連續(xù)時間線性均衡CTLE和判決反饋均衡DFE。CTLE可以增強高頻分量DFE可以消除碼間干擾??梢詮哪J(rèn)值開始逐步微調(diào)觀察眼圖改善情況。注意調(diào)整這些參數(shù)需要一定的經(jīng)驗過度調(diào)整反而會惡化信號。最好在硬件設(shè)計階段就通過仿真確定大致范圍。4.2 鏈路建立失敗常見問題排查當(dāng)sync信號振蕩鏈路無法建立時可以按照以下流程排查故障現(xiàn)象可能原因排查方法sync持續(xù)為低1. FPGA參考時鐘未就緒或頻率錯誤。2. ADC未上電或未正確配置。3. 物理鏈路斷開電阻未焊、連接器虛接。1. 測量FPGA GT參考時鐘引腳是否有正確頻率和幅度的時鐘。2. 通過SPI/I2C讀取ADC的寄存器確認(rèn)其JESD204B模塊已使能并配置正確。3. 用萬用表測量差分線對間的直流阻抗應(yīng)為100歐姆左右端接電阻值。sync周期性振蕩cgs失敗1. 鏈路速率配置不匹配FPGA與ADC設(shè)置的Lane Rate不一致。2. 差分線極性接反P和N反接。3. 信號完整性極差無法識別數(shù)據(jù)。1. 仔細(xì)核對雙方寄存器配置確保速率、編碼方式一致。2. 交換差分對的P和N線或在IP核/ADC配置中使能“極性反轉(zhuǎn)Polarity Invert”功能。3. 進(jìn)行眼圖測試檢查信號質(zhì)量。降低鏈路速率測試是否成功。cgs成功ilas失敗1. 鏈路參數(shù)L M F K配置不匹配。2. SYSREF時序不滿足要求。3. 多幀時鐘LMFC邊界未對齊。1.用ILA抓取ADC發(fā)出的ILAS序列與IP核配置逐字段比對。這是最有效的診斷方法。2. 用示波器同時測量ADC和FPGA的SYSREF輸入確保其邊沿滿足器件數(shù)據(jù)手冊要求的建立/保持時間。3. 檢查Subclass 1配置是否正確SYSREF是否在正確時刻LMFC邊界被應(yīng)用。鏈路建立后偶發(fā)誤碼1. 電源噪聲或同步開關(guān)噪聲SSN。2. 時鐘抖動過大。3. 溫度變化導(dǎo)致時序漂移。4. 收發(fā)器均衡參數(shù)未優(yōu)化。1. 用近場探頭掃描PCB查找噪聲源。加強電源濾波。2. 測量采樣時鐘和SYSREF的相位噪聲抖動。3. 進(jìn)行高低溫測試觀察誤碼率變化??赡苄枰{(diào)整時鐘芯片的配置以適應(yīng)溫漂。4. 在穩(wěn)定溫度下重新進(jìn)行眼圖測試和收發(fā)器參數(shù)優(yōu)化。5. 系統(tǒng)集成與數(shù)據(jù)對齊驗證5.1 多器件同步與確定性延遲驗證當(dāng)系統(tǒng)中有多片ADC或者ADC與DAC需要協(xié)同工作時Subclass 1的確定性延遲特性就至關(guān)重要。驗證步驟如下同步觸發(fā)確保所有ADC的采樣時鐘和SYSREF來自同一個時鐘源并且通過等長布線分配。使用一個共同的硬件觸發(fā)信號如SYNC~或一個GPIO同時啟動所有ADC的采樣和JESD204B鏈路初始化。捕獲ILAS中的幀號在ILAS序列中包含了一個起始幀號。理論上所有ADC在收到同一個SYSREF邊沿后發(fā)出的第一個多幀包含ILAS的幀號應(yīng)該是一致的。你可以在FPGA邏輯里抓取并比較來自不同ADC鏈路的這個幀號。注入測試模板將ADC配置為輸出固定的數(shù)字測試模板如遞增的鋸齒波、正弦波。在FPGA側(cè)為每個ADC通道的數(shù)據(jù)路徑添加一個相同的、足夠深的FIFO。驗證數(shù)據(jù)對齊在系統(tǒng)觸發(fā)后同時從所有FIFO中讀取數(shù)據(jù)。如果確定性延遲已建立那么所有ADC通道的FIFO中對應(yīng)同一時刻采樣點的數(shù)據(jù)應(yīng)該同時出現(xiàn)在各自的讀端口。你可以通過比較這些數(shù)據(jù)是否構(gòu)成預(yù)期的、同步的測試模板波形來驗證。如果發(fā)現(xiàn)固定的相位差比如某個通道的數(shù)據(jù)總是晚幾個時鐘周期可以在FPGA邏輯中為該通道添加一個固定的延遲補償例如通過FIFO的“首字預(yù)讀”特性或額外的移位寄存器。5.2 高速數(shù)據(jù)流處理與后級接口JESD204B鏈路穩(wěn)定輸出數(shù)據(jù)后考驗的是FPGA內(nèi)部的數(shù)據(jù)處理能力。以250MSPS、雙通道14位ADC為例數(shù)據(jù)吞吐率高達(dá) 250e6 * 2 * 16bit 8 Gbps。這么高的數(shù)據(jù)率直接送給ARM處理器或者通過PCIe上傳到電腦是不現(xiàn)實的通常需要在FPGA內(nèi)進(jìn)行實時預(yù)處理。數(shù)據(jù)重組與格式化JESD204 IP核輸出的可能是交織的數(shù)據(jù)格式。你需要根據(jù)數(shù)據(jù)手冊將字節(jié)流還原成每個ADC通道的采樣數(shù)據(jù)。這可能涉及字節(jié)序交換、位提取如果N‘實際位數(shù)等操作。數(shù)字下變頻DDC或濾波對于射頻采樣應(yīng)用通常需要在FPGA內(nèi)進(jìn)行數(shù)字混頻和濾波將感興趣的頻段搬移到基帶并降低數(shù)據(jù)率。這需要調(diào)用大量的DSP Slice和Block RAM資源。數(shù)據(jù)打包與接口降速后的數(shù)據(jù)可以通過AXI4-Stream接口傳遞給其他IP核如FFT或者通過DDR內(nèi)存控制器緩存再通過PCIe、以太網(wǎng)如10G/25G Ethernet上傳到上位機。這里需要精心設(shè)計跨時鐘域和數(shù)據(jù)流控制邏輯避免數(shù)據(jù)丟失或溢出。從閱讀標(biāo)準(zhǔn)文檔的“紙上談兵”到調(diào)通一個穩(wěn)定可靠的JESD204B鏈路再到將其集成到完整的信號處理系統(tǒng)中每一步都需要理論結(jié)合實踐細(xì)致排查。最寶貴的經(jīng)驗往往來自于示波器上一個異常的眼圖、ILA中一段錯誤的ILAS序列、以及為了解決某個偶發(fā)誤碼而熬過的那些夜晚。記住參數(shù)計算是基礎(chǔ)信號完整性是保障而基于ILA和寄存器的細(xì)致調(diào)試則是連接理論與實踐的橋梁。當(dāng)你第一次看到經(jīng)過自己調(diào)試的JESD204B鏈路穩(wěn)定地將高速ADC的數(shù)據(jù)無誤地送入FPGA并在上位機上呈現(xiàn)出清晰的時域或頻域波形時那種成就感遠(yuǎn)非“紙上談兵”可比。