鐘管理實(shí)戰(zhàn)指南)
1. 從一次射頻板卡調(diào)試說起為什么PLL配置總在關(guān)鍵時(shí)刻掉鏈子做射頻信號(hào)鏈的工程師大概都有過類似的經(jīng)歷板卡上電邏輯加載正常AXI-Lite寄存器讀寫也沒問題可一旦啟動(dòng)RF Data Converter IP要么Tile的PLL死活不鎖要么鎖上了但過幾分鐘又失鎖采樣數(shù)據(jù)里全是雜散。更讓人頭疼的是這類問題往往不是代碼寫錯(cuò)了而是時(shí)鐘樹和PLL參數(shù)沒配對(duì)。Zynq UltraScale RFSoC里的RF Data Converter IP本質(zhì)上是一個(gè)把數(shù)據(jù)轉(zhuǎn)換器ADC/DAC、數(shù)字上下變頻、抽取/內(nèi)插濾波器和時(shí)鐘管理全部打包在一起的硬核子系統(tǒng)。它不像外掛一顆獨(dú)立的ADC芯片那樣時(shí)鐘給對(duì)了就能跑它內(nèi)部的PLL、分頻器、參考時(shí)鐘路徑是高度耦合的任何一個(gè)環(huán)節(jié)的參數(shù)越界都會(huì)以“PLL未鎖定”這種籠統(tǒng)的報(bào)錯(cuò)形式呈現(xiàn)出來。這篇文章面向的是已經(jīng)上手RFSoC、正在調(diào)試RF Data Converter IP的工程師也適合剛接觸這套IP、想提前把時(shí)鐘管理這塊硬骨頭啃下來的朋友。我會(huì)從PLL的參考時(shí)鐘輸入路徑講起把分頻比計(jì)算、VCO工作區(qū)間、多Tile同步、時(shí)鐘約束這些容易踩坑的地方逐一拆開最后給出可以直接對(duì)照的配置流程和排查清單。所有參數(shù)計(jì)算我都會(huì)給出推導(dǎo)過程方便你套用到自己的板子上。需要提前說明的是不同器件的速度等級(jí)、不同IP版本比如2020.2和2023.2在PLL參數(shù)范圍上會(huì)有細(xì)微差異文中給出的數(shù)值以主流Gen3器件和較新IP版本為基準(zhǔn)實(shí)際使用時(shí)請(qǐng)以你手頭器件的DS926數(shù)據(jù)手冊(cè)和IP GUI里的實(shí)時(shí)校驗(yàn)為準(zhǔn)。2. RF Data Converter IP的時(shí)鐘架構(gòu)到底長(zhǎng)什么樣2.1 從參考時(shí)鐘到采樣時(shí)鐘的完整鏈路要搞懂PLL配置先得把整個(gè)時(shí)鐘鏈路畫清楚。RF Data Converter IP的時(shí)鐘來源通常有兩個(gè)一個(gè)是外部時(shí)鐘芯片直接送進(jìn)來的差分參考時(shí)鐘另一個(gè)是PL側(cè)通過BUFGCE等資源提供的時(shí)鐘。無論哪種最終都要經(jīng)過Tile內(nèi)部的PLL再經(jīng)過一系列分頻器才能得到ADC/DAC的采樣時(shí)鐘。以Gen3器件為例一個(gè)Tile包含多個(gè)ADC和DAC通道它們共享同一個(gè)Tile PLL。鏈路大致是這樣的參考時(shí)鐘先進(jìn)入Tile的參考時(shí)鐘輸入經(jīng)過一個(gè)可編程分頻器N分頻進(jìn)入PLL的鑒相器PFD與VCO反饋回來的時(shí)鐘做相位比較。PLL的電荷泵輸出經(jīng)過環(huán)路濾波器控制VCO的頻率。VCO輸出再經(jīng)過M分頻得到采樣時(shí)鐘同時(shí)經(jīng)過反饋分頻器回到PFD。這里的關(guān)鍵參數(shù)有四個(gè)參考時(shí)鐘頻率f_ref、N分頻比、M分頻比、VCO目標(biāo)頻率f_vco。它們滿足的關(guān)系是f_vco f_ref / N × M而采樣時(shí)鐘f_sample f_vco / M_sample其中M_sample是采樣側(cè)的分頻比。很多人在配置時(shí)只盯著采樣率忽略了VCO必須落在規(guī)定的區(qū)間內(nèi)結(jié)果就是PLL要么不鎖要么鎖在錯(cuò)誤的頻率上。2.2 Tile PLL與PL PLL的分工RFSoC里其實(shí)有兩套PLL體系Tile內(nèi)部的RF PLL和PL側(cè)的時(shí)鐘管理單元CMT里的PLL/MMCM。這兩者容易混淆。Tile PLL專門為數(shù)據(jù)轉(zhuǎn)換器服務(wù)它的抖動(dòng)性能、頻率范圍都是為射頻采樣優(yōu)化的PL PLL則是給邏輯和AXI接口用的。一個(gè)常見的誤區(qū)是用PL PLL去給RF Data Converter提供參考時(shí)鐘然后發(fā)現(xiàn)PLL鎖定不穩(wěn)定。原因在于PL PLL的抖動(dòng)指標(biāo)通常不如專用時(shí)鐘芯片而且PL側(cè)的時(shí)鐘網(wǎng)絡(luò)會(huì)引入額外的相位噪聲。如果系統(tǒng)對(duì)采樣質(zhì)量有要求參考時(shí)鐘最好來自專用的低抖動(dòng)時(shí)鐘發(fā)生器比如LMK系列或LMX系列通過差分走線直接送到RFSoC的專用時(shí)鐘輸入引腳。2.3 多Tile場(chǎng)景下的時(shí)鐘分發(fā)當(dāng)設(shè)計(jì)里用到多個(gè)Tile時(shí)時(shí)鐘管理會(huì)變得更復(fù)雜。RF Data Converter IP支持兩種模式一種是每個(gè)Tile獨(dú)立使用自己的PLL另一種是多個(gè)Tile共享一個(gè)主PLL其他Tile作為從屬。共享模式的好處是能保證多個(gè)Tile之間的采樣時(shí)鐘嚴(yán)格對(duì)齊這對(duì)相控陣、多通道采集這類應(yīng)用是剛需。但共享模式有個(gè)前提主Tile的參考時(shí)鐘必須同時(shí)分發(fā)給從屬Tile而且從屬Tile的PLL要配置成旁路或者跟隨模式。如果配置不當(dāng)從屬Tile會(huì)嘗試用自己的參考時(shí)鐘去鎖PLL結(jié)果就是各鎖各的通道間相位漂移。3. PLL參數(shù)計(jì)算從目標(biāo)采樣率反推分頻比3.1 先確定VCO的工作區(qū)間PLL配置的第一步不是算分頻比而是查VCO的頻率范圍。以Gen3器件為例Tile PLL的VCO典型工作區(qū)間大約在9.85GHz到13.1GHz之間具體數(shù)值請(qǐng)查DS926。這個(gè)區(qū)間決定了你的采樣時(shí)鐘能落在什么范圍。假設(shè)你要做3.2GSPS的采樣率那么VCO頻率必須是采樣率的整數(shù)倍。如果采樣側(cè)分頻比取4VCO就是12.8GHz落在區(qū)間內(nèi)如果取2VCO就是6.4GHz低于下限PLL根本鎖不住。所以采樣側(cè)分頻比的選擇不是隨意的它要保證VCO落在合法區(qū)間。這里有個(gè)經(jīng)驗(yàn)盡量讓VCO工作在區(qū)間中段比如10.5GHz到12GHz之間。太靠近邊界會(huì)導(dǎo)致鎖定時(shí)間變長(zhǎng)而且對(duì)溫度和電壓波動(dòng)更敏感。我在一塊板子上把VCO設(shè)到13.0GHz常溫下能鎖但一進(jìn)溫箱到70度就失鎖后來降到12.0GHz就穩(wěn)了。3.2 參考時(shí)鐘與N分頻的匹配確定了VCO頻率后接下來要選參考時(shí)鐘和N分頻比。PFD的鑒相頻率f_pfd f_ref / N這個(gè)頻率不能太高也不能太低。太高了PFD的線性度變差太低了環(huán)路帶寬上不去鎖定時(shí)間變長(zhǎng)。一般建議f_pfd落在50MHz到200MHz之間。舉個(gè)例子參考時(shí)鐘是245.76MHzVCO目標(biāo)12.8GHz。如果N取2f_pfd就是122.88MHzM f_vco / f_pfd 12.8G / 122.88M ≈ 104.17不是整數(shù)不行。如果N取4f_pfd 61.44MHzM 12.8G / 61.44M ≈ 208.33還是不對(duì)。這時(shí)候要么換參考時(shí)鐘要么調(diào)整VCO目標(biāo)。正確的做法是讓f_ref、N、M三者滿足整數(shù)關(guān)系。比如參考時(shí)鐘用122.88MHzN取1f_pfd 122.88MHzM取104VCO 12.77952GHz采樣側(cè)分頻取4采樣率就是3.19488GSPS。雖然不是整數(shù)GSPS但在通信和雷達(dá)應(yīng)用里這種非整數(shù)采樣率反而更常見因?yàn)樗芎拖到y(tǒng)時(shí)鐘形成整數(shù)關(guān)系。3.3 用表格快速鎖定參數(shù)組合手動(dòng)算容易出錯(cuò)我習(xí)慣用表格把候選組合列出來然后逐個(gè)校驗(yàn)。下面是一個(gè)示例假設(shè)參考時(shí)鐘245.76MHz目標(biāo)采樣率4GSPSN分頻f_pfd (MHz)M分頻VCO (GHz)采樣分頻采樣率 (GSPS)是否合法2122.88657.987223.9936VCO偏低2122.88668.1100824.05504VCO偏低1245.76338.1100824.05504VCO偏低461.441307.987223.9936VCO偏低2122.889812.0422434.01408合法2122.889711.9193633.97312合法從表里能看出VCO必須落在9.85GHz以上所以M分頻不能太小。同時(shí)采樣分頻也要配合讓最終采樣率接近目標(biāo)值。實(shí)際配置時(shí)IP GUI會(huì)自動(dòng)幫你校驗(yàn)但理解背后的計(jì)算邏輯能在GUI報(bào)錯(cuò)時(shí)快速定位問題。4. 鎖定失敗的排查鏈路從寄存器到板級(jí)信號(hào)4.1 先看IP狀態(tài)寄存器別急著改參數(shù)PLL不鎖的時(shí)候很多人的第一反應(yīng)是改分頻比其實(shí)應(yīng)該先讀狀態(tài)寄存器。RF Data Converter IP提供了一組狀態(tài)寄存器能告訴你PLL的鎖定狀態(tài)、參考時(shí)鐘是否丟失、VCO是否在調(diào)諧范圍內(nèi)。這些信息比盲目試參數(shù)有用得多。以常見的寄存器為例你可以通過AXI-Lite讀取Tile的PLL狀態(tài)位。如果鎖定位是0同時(shí)參考時(shí)鐘丟失位是1那問題在參考時(shí)鐘路徑不在PLL參數(shù)。如果鎖定位是0但參考時(shí)鐘正常再看VCO調(diào)諧位如果VCO調(diào)諧電壓已經(jīng)打到邊界說明分頻比選得不對(duì)VCO無法達(dá)到目標(biāo)頻率。我遇到過一種情況狀態(tài)寄存器顯示PLL鎖定但數(shù)據(jù)里全是噪聲。后來發(fā)現(xiàn)是參考時(shí)鐘的差分對(duì)極性接反了PLL雖然能鎖但相位關(guān)系錯(cuò)了。這種問題看寄存器看不出來得用示波器或者頻譜儀測(cè)參考時(shí)鐘。4.2 參考時(shí)鐘的質(zhì)量比頻率更重要參考時(shí)鐘的頻率對(duì)了不代表就能用。抖動(dòng)、占空比、幅度都會(huì)影響PLL鎖定。特別是占空比如果差分參考時(shí)鐘的占空比偏離50%太多PFD的鑒相范圍會(huì)縮小導(dǎo)致鎖定不穩(wěn)定。實(shí)測(cè)經(jīng)驗(yàn)用示波器測(cè)參考時(shí)鐘時(shí)不要只看頻率要看眼圖。如果眼圖張開度不夠或者交叉點(diǎn)模糊說明信號(hào)完整性有問題。這時(shí)候要么換時(shí)鐘芯片的驅(qū)動(dòng)強(qiáng)度要么檢查PCB走線是否做了阻抗控制。RFSoC的參考時(shí)鐘輸入對(duì)走線長(zhǎng)度很敏感差分對(duì)內(nèi)的長(zhǎng)度偏差要控制在5mil以內(nèi)。4.3 電源噪聲導(dǎo)致的間歇性失鎖還有一種難纏的情況PLL常溫下能鎖一跑高負(fù)載邏輯就失鎖。這通常是電源噪聲耦合到了PLL的模擬供電上。RFSoC的Tile PLL有專門的模擬電源引腳對(duì)噪聲非常敏感。如果這些引腳和數(shù)字電源共用了一個(gè)LDO或者去耦電容放得太遠(yuǎn)就會(huì)出問題。我的做法是給PLL的模擬電源單獨(dú)用一個(gè)低噪聲LDO去耦電容用0.1uF和10uF組合盡量靠近引腳放置。另外PLL的環(huán)路濾波器參數(shù)在IP里是可配的如果環(huán)路帶寬設(shè)得太寬對(duì)電源噪聲的抑制就弱。適當(dāng)降低環(huán)路帶寬能改善但會(huì)犧牲鎖定時(shí)間需要權(quán)衡。5. 多Tile同步與時(shí)鐘約束的實(shí)戰(zhàn)細(xì)節(jié)5.1 共享PLL模式下的主從配置多Tile同步是RFSoC的一大賣點(diǎn)但配置起來坑不少。共享PLL模式下主Tile的PLL輸出要通過專用的時(shí)鐘走線分發(fā)給從屬Tile。這個(gè)走線在芯片內(nèi)部是固定的不需要你在PCB上連但I(xiàn)P配置里要正確設(shè)置主從關(guān)系。具體操作在IP GUI的Clock Settings里把主Tile的PLL使能從屬Tile的PLL選擇“Slave”模式并且參考時(shí)鐘源選擇“From Master”。如果從屬Tile還用自己的參考時(shí)鐘就會(huì)導(dǎo)致兩個(gè)Tile的采樣時(shí)鐘不同步通道間相位差會(huì)隨時(shí)間漂移。有個(gè)細(xì)節(jié)容易忽略從屬Tile的PLL雖然不工作但它的分頻器配置必須和主Tile一致否則采樣率會(huì)對(duì)不上。IP GUI通常會(huì)自動(dòng)同步這些參數(shù)但如果你手動(dòng)改過某個(gè)Tile的分頻比記得檢查所有Tile是否一致。5.2 時(shí)鐘約束文件里必須寫清楚的東西RF Data Converter IP會(huì)生成一個(gè)時(shí)鐘約束文件但很多人直接用它默認(rèn)的結(jié)果時(shí)序報(bào)告里一堆違例。這個(gè)約束文件里最關(guān)鍵的是參考時(shí)鐘的周期約束和輸入延遲約束。參考時(shí)鐘的周期約束要和你實(shí)際輸入的頻率一致。比如你輸入245.76MHz周期就是4.06901ns約束里要寫create_clock -period 4.069。如果寫錯(cuò)了Vivado會(huì)按錯(cuò)誤的周期去分析時(shí)序?qū)е绿摷俚臅r(shí)序違例或遺漏真實(shí)違例。輸入延遲約束則和PCB走線有關(guān)。如果參考時(shí)鐘從時(shí)鐘芯片到RFSoC的走線有長(zhǎng)度偏差要在約束里體現(xiàn)出來。一般建議把差分對(duì)的走線做等長(zhǎng)偏差控制在5mil以內(nèi)這樣輸入延遲可以忽略。如果做不到等長(zhǎng)就要在約束里加set_input_delay把偏差補(bǔ)回來。5.3 多Tile同步的驗(yàn)證方法配置完了怎么驗(yàn)證同步是否成功最直接的方法是讓所有Tile同時(shí)采集同一個(gè)信號(hào)源然后比較各通道的相位。如果相位差固定且接近零說明同步成功如果相位差隨時(shí)間變化說明PLL沒有真正共享。另一種方法是用IP提供的內(nèi)部測(cè)試模式比如讓DAC輸出一個(gè)已知的斜坡信號(hào)ADC回環(huán)采集然后看多個(gè)Tile的數(shù)據(jù)是否對(duì)齊。這種方法不需要外部信號(hào)源適合在實(shí)驗(yàn)室快速驗(yàn)證。我通常還會(huì)在邏輯里加一個(gè)計(jì)數(shù)器用采樣時(shí)鐘去計(jì)數(shù)然后通過AXI讀回來。如果多個(gè)Tile的計(jì)數(shù)值完全一致說明采樣時(shí)鐘是同源的如果有偏差說明時(shí)鐘路徑有問題。6. 那些手冊(cè)上不會(huì)寫的配置心得6.1 上電順序?qū)LL鎖定的影響RFSoC的上電順序是有講究的。如果Tile的模擬電源還沒穩(wěn)定PL就配置了RF Data Converter IPPLL可能會(huì)進(jìn)入一個(gè)奇怪的狀態(tài)即使后來電源穩(wěn)了也不鎖。正確的順序是先讓所有電源穩(wěn)定再釋放IP的復(fù)位最后啟動(dòng)PLL。IP里有一個(gè)復(fù)位控制寄存器可以單獨(dú)復(fù)位PLL。如果遇到PLL不鎖可以先寫復(fù)位位等幾個(gè)時(shí)鐘周期后再釋放然后重新配置PLL參數(shù)。這個(gè)操作相當(dāng)于給PLL一個(gè)干凈的重啟比反復(fù)改參數(shù)有效。6.2 溫度漂移與VCO余量前面提到VCO要工作在區(qū)間中段就是為了留溫度余量。但即使這樣在極端溫度下PLL仍可能失鎖。如果應(yīng)用場(chǎng)景溫度范圍寬建議在高溫和低溫下都測(cè)一下PLL鎖定狀態(tài)。如果高溫失鎖說明VCO調(diào)諧電壓不夠了可以適當(dāng)降低VCO頻率或者換用溫度特性更好的參考時(shí)鐘。還有一個(gè)技巧IP里可以配置PLL的電荷泵電流和環(huán)路濾波器參數(shù)。增大電荷泵電流能提高環(huán)路增益改善鎖定穩(wěn)定性但會(huì)增加相位噪聲。這個(gè)權(quán)衡要根據(jù)系統(tǒng)對(duì)抖動(dòng)的敏感度來定。6.3 用ILA抓PLL鎖定信號(hào)的正確姿勢(shì)調(diào)試時(shí)用ILA抓PLL鎖定信號(hào)很常見但要注意ILA的采樣時(shí)鐘。如果你用PL時(shí)鐘去抓Tile PLL的鎖定信號(hào)可能會(huì)因?yàn)榭鐣r(shí)鐘域?qū)е抡`判。正確做法是用Tile輸出的采樣時(shí)鐘或者相關(guān)的RF時(shí)鐘去抓或者用IP提供的AXI狀態(tài)寄存器輪詢而不是直接抓硬件信號(hào)。另外ILA的觸發(fā)條件要設(shè)對(duì)。PLL鎖定信號(hào)通常是一個(gè)電平信號(hào)不是脈沖。如果你設(shè)成上升沿觸發(fā)可能永遠(yuǎn)抓不到因?yàn)樗想姾笠恢笔歉?。設(shè)成“等于0”觸發(fā)才能在失鎖時(shí)抓到。7. 一個(gè)完整的配置流程示例假設(shè)我們要配置一個(gè)雙Tile系統(tǒng)每個(gè)Tile兩個(gè)ADC通道采樣率3.2GSPS參考時(shí)鐘245.76MHz要求兩個(gè)Tile同步。第一步確定VCO頻率。3.2GSPS乘以采樣分頻4VCO 12.8GHz落在9.85到13.1GHz區(qū)間內(nèi)合法。第二步選N分頻和M分頻。參考時(shí)鐘245.76MHzN取2f_pfd 122.88MHzM 12.8G / 122.88M ≈ 104.17不是整數(shù)。調(diào)整VCO為12.77952GHzM 104采樣率 12.77952G / 4 3.19488GSPS接近3.2GSPS可接受。第三步在IP GUI里設(shè)置主Tile的PLL參數(shù)N2M104采樣分頻4。從屬Tile選擇Slave模式參考時(shí)鐘源選Master。第四步生成IP后檢查時(shí)鐘約束文件確認(rèn)參考時(shí)鐘周期約束為4.069ns輸入延遲約束根據(jù)PCB實(shí)際情況填寫。第五步上電后先讀狀態(tài)寄存器確認(rèn)參考時(shí)鐘正常再啟動(dòng)PLL。如果鎖定位為1說明配置成功。然后用內(nèi)部測(cè)試模式驗(yàn)證兩個(gè)Tile的數(shù)據(jù)對(duì)齊。第六步如果鎖定失敗按第4章的排查鏈路逐項(xiàng)檢查參考時(shí)鐘質(zhì)量、電源噪聲、VCO調(diào)諧范圍、主從配置。這個(gè)流程我在多個(gè)項(xiàng)目里用過基本能覆蓋大部分配置場(chǎng)景。實(shí)際調(diào)試時(shí)最耗時(shí)的往往不是參數(shù)計(jì)算而是板級(jí)信號(hào)完整性和電源問題。所以我的建議是先把硬件測(cè)好再調(diào)IP參數(shù)能省很多時(shí)間。8. 關(guān)于時(shí)鐘管理我踩過的幾個(gè)坑第一個(gè)坑是參考時(shí)鐘的幅度。有一次用了一個(gè)時(shí)鐘芯片輸出幅度只有400mVpp而RFSoC的參考時(shí)鐘輸入要求是800mVpp以上。結(jié)果PLL偶爾能鎖但很不穩(wěn)定。后來?yè)Q了時(shí)鐘芯片的驅(qū)動(dòng)配置幅度提到1Vpp問題就解決了。所以選時(shí)鐘芯片時(shí)一定要看它的輸出幅度是否滿足RFSoC的要求。第二個(gè)坑是IP版本升級(jí)后的參數(shù)變化。從2020.2升級(jí)到2023.2后同樣的分頻比配置PLL不鎖了。查了Release Notes才發(fā)現(xiàn)新版本的VCO下限提高了。這種問題只能靠仔細(xì)讀文檔和實(shí)測(cè)來發(fā)現(xiàn)。第三個(gè)坑是AXI-Lite時(shí)鐘和RF時(shí)鐘的跨時(shí)鐘域。RF Data Converter IP的AXI接口通常用PL時(shí)鐘而狀態(tài)寄存器里的PLL鎖定信號(hào)是RF時(shí)鐘域的。如果直接讀可能會(huì)讀到亞穩(wěn)態(tài)值。正確做法是用IP提供的同步邏輯或者連續(xù)讀多次取穩(wěn)定值。這些坑說起來都不復(fù)雜但真遇到的時(shí)候如果沒有排查思路很容易卡好幾天。希望這篇內(nèi)容能幫你在RFSoC的時(shí)鐘管理上少走點(diǎn)彎路。