1. 为什么LMK04828值得单独拿出来讲搞高速数据采集或者软件无线电的朋友大概率都绕不开JESD204B这个协议。它把传统并行LVDS接口那一大把数据线砍成了几对高速SerDes布线爽了但代价是——时钟系统变得极其讲究。LMK04828这颗芯片就是在这个背景下被大量设计采用的它是一颗双环路、支持JESD204B的时钟抖动衰减器能同时输出14路时钟其中7路可以配成器件时钟Device Clock另外7路可以配成SYSREF。说白了它就是整个JESD204B链路里发令枪和节拍器合二为一的角色。我最早接触这颗芯片是在一个多通道ADC采集板上当时用FPGA接四片ADC每片ADC都要和FPGA保持确定性延迟。一开始想用FPGA内部的MMCM直接分频出器件时钟和SYSREF结果链路死活同步不上抓波形发现SYSREF和器件时钟的相位关系每次上电都在飘。后来换成LMK04828把SYSREF和Device Clock从同一颗芯片、同一个VCO分出来确定性问题一下就解决了。从那以后凡是涉及JESD204B多片同步的板子我基本都会优先考虑它。这篇文章我打算把LMK04828从引脚到寄存器、从时钟树规划到JESD204B同步的完整流程捋一遍。适合两类人看一类是刚拿到板子、对着原理图不知道从哪下手的硬件工程师另一类是FPGA逻辑工程师需要理解为什么时钟芯片要这么配、SYSREF到底该怎么处理。我会尽量把为什么这么配讲清楚而不是只丢一堆寄存器值。2. 先搞清楚LMK04828的引脚和内部结构2.1 关键引脚功能速查LMK04828一般是64脚QFN封装引脚多但不乱按功能分组记就轻松了。下面这张表是我自己整理的核心引脚分组实际画板子时对着看会快很多。引脚类别典型引脚功能说明实操注意点参考输入CLKin0/0*, CLKin1/1*, CLKin2/2*三路差分参考输入可切换CLKin0支持最高频率优先接主参考OSCinOSCin/OSCin*外部VCXO或晶振输入抖动性能的关键尽量选低相噪VCXO时钟输出CLKout0~1314路输出可配LVPECL/LVDS/HSDS每路有独立分频和延时SYSREF输出SYSREF相关CLKout部分输出可配成SYSREF必须和Device Clock同源控制接口SDIO, SCLK, CS*SPI三线/四线配置上电默认状态要确认状态指示STATUS, PLL_LD锁定指示一定要引到FPGA或LED电源Vcc各分组多路供电需分别去耦模拟电源和数字电源分开这里要特别提醒一句CLKin和OSCin的区分很多人一开始会搞混。CLKin是外部参考比如OCXO、GPS驯服钟、或者从背板来的参考OSCin接的是VCXO。LMK04828内部有两个PLLPLL1把CLKin和VCXO锁定PLL2把VCXO和内部VCO锁定。所以VCXO是中间桥梁它的相噪直接决定了最终输出的抖动。我见过有人为了省钱用普通晶振接OSCin结果PLL2锁定后输出抖动大得没法看JESD204B的眼图直接闭合。2.2 双环路PLL的工作逻辑理解双环路是配置LMK04828的前提。PLL1是窄带环路负责把外部参考可能抖动很大清理干净输出一个干净的参考给PLL2PLL2是宽带环路负责把频率倍频到VCO频段2370~2630MHz左右然后再分频输出。这样设计的好处是外部参考的抖动被PLL1的窄带滤掉了而PLL2又能提供足够的频率灵活性。打个比方PLL1像一个慢速但精准的调速器把粗糙的输入转速磨平PLL2像一个快速响应的齿轮箱把转速放大到工作区间。两者配合既有精度又有灵活性。配置时有个关键点PLL1的环路带宽要设得比PLL2窄很多通常PLL1在几十到几百HzPLL2在几十到几百kHz。如果两个带宽设得接近会出现两个环路打架锁定时间变长甚至锁不住。我一般先用TI的Clock Design Tool跑一遍仿真确认相位裕度在50度以上再落地。2.3 输出通道的分组与灵活性14路输出不是随便分的它们分成两组Group 0CLKout0~6和Group 1CLKout7~13。每组有一个统一的分频器和延时基准组内每路还可以再单独分频和调延时。这个结构对JESD204B特别友好——你可以把Group 0全部配成Device Clock给ADC/DACGroup 1配成SYSREF两组之间的相位关系通过内部的SYNC机制对齐。实际用的时候我习惯把同一片ADC的Device Clock和SYSREF放在相邻通道比如CLKout0出Device Clock、CLKout1出SYSREF这样走线长度好控制偏斜小。如果跨组分配虽然也能同步但布线时要格外注意等长。3. 时钟树规划从参考到JESD204B的完整链路3.1 先算频率再谈配置配置寄存器之前一定要先把频率规划算清楚。JESD204B对频率有硬性要求Device Clock必须是帧时钟的整数倍SYSREF必须是Device Clock的整数分频而且SYSREF频率通常等于多帧时钟Multiframe Clock或者其分频。举个我实际项目的例子一片ADC采样率250MSPSJESD204B用4 lane帧结构是每帧1个采样、每多帧K32帧。那么采样时钟Device Clock 250MHz帧时钟 250MHz / 1 250MHz因为每帧1个采样多帧时钟 250MHz / 32 7.8125MHzSYSREF频率通常取多帧时钟或其分频这里取7.8125MHz然后反推LMK04828的VCO和分频假设VCO2500MHz那么Device Clock分频2500/25010SYSREF分频2500/7.8125320。这两个分频值都要是整数而且要在芯片支持范围内。算完发现320超过了单级分频上限就需要用两级分频比如先除32再除10。这一步用Clock Design Tool能自动帮你算但自己心里要清楚逻辑不然出了问题不知道怎么调。3.2 参考输入的选择与切换LMK04828支持三路参考输入可以配置成自动切换或手动切换。在需要高可靠性的场景比如基站、测试仪器通常会接两路参考一路主用OCXO一路备用GPS驯服钟通过CLKin_SEL引脚或寄存器切换。这里有个坑自动切换模式下如果两路参考频率不同切换瞬间PLL1会失锁输出会短暂中断。JESD204B链路对这种中断很敏感可能导致链路重同步。我的做法是要么两路参考同频要么在切换时先让FPGA把链路置为待同步状态切完再恢复。如果对连续性要求极高可以考虑用外部时钟切换芯片做无中断切换LMK04828只负责抖动衰减。3.3 VCXO的选型与相噪预算VCXO是整条链路的心脏选型时重点看三个参数频率、调谐范围、相位噪声。频率要配合PLL2的VCO范围选比如VCO是2370~2630MHzVCXO可以选100MHz、122.88MHz、125MHz等常见值。调谐范围要覆盖PLL1的锁定需求一般±50ppm到±100ppm够用。相噪方面我一般要求VCXO在100kHz偏移处的相噪优于-150dBc/Hz。如果VCXO本身相噪差PLL1再窄带也救不回来因为PLL2会把VCXO的相噪放大到输出。有个经验公式输出抖动约等于VCXO抖动乘以PLL2的噪声增益所以VCXO选好了后面省一半事。4. 寄存器配置实操从SPI写入到锁定确认4.1 SPI接口时序与写入顺序LMK04828的SPI是标准的四线模式SCLK、SDIO、CS*、SDO可选支持最高约10MHz的时钟。写入时要注意每个寄存器是32位高16位是地址低16位是数据。上电后芯片处于默认状态需要按顺序写入初始化序列。我一般按这个顺序写先写复位寄存器0x000软复位一次确保状态干净配置PLL1相关寄存器参考分频、鉴相器、环路参数配置PLL2相关寄存器VCO选择、分频、环路参数配置输出通道分频、延时、电平标准配置SYSREF相关使能、分频、相位最后写使能寄存器启动PLL锁定注意写入过程中不要频繁复位每次复位后PLL重新锁定需要时间通常几毫秒到几十毫秒频繁复位会导致锁定不稳定。4.2 关键寄存器详解几个必须搞懂的寄存器0x100~0x10FPLL1的R分频和N分频。R分频是参考分频N分频是VCXO分频。鉴相频率 CLKin频率 / R VCXO频率 / N。这个等式必须成立否则PLL1锁不住。0x200~0x20FPLL2的N分频和VCO选择。VCO频率 VCXO频率 × N2。N2的范围要查手册不同VCO档位对应不同范围。0x300~0x30F输出通道配置。每路有分频值1~1023、延时值0~511、电平标准。0x400~0x40FSYSREF配置。包括SYSREF分频、相位、是否连续输出还是脉冲输出。配置时我习惯用TI的TICS Pro软件生成寄存器序列然后导出成C数组或文本再通过FPGA的SPI控制器写入。这样比手算靠谱得多但生成后一定要对照手册核对几个关键值软件偶尔也会有版本差异。4.3 锁定确认与状态读取写完之后通过STATUS引脚或读寄存器确认锁定状态。PLL1和PLL2各有锁定指示位两个都置位才算真正锁定。我一般会读0x00X寄存器看PLL1_LD和PLL2_LD用示波器测STATUS引脚确认电平翻转用频谱仪看输出时钟的相噪确认没有杂散如果PLL2锁不住先检查VCO频率是否在范围内如果PLL1锁不住先检查鉴相频率等式是否成立。这两个是最常见的锁定问题。5. JESD204B同步机制与SYSREF处理5.1 为什么SYSREF必须和Device Clock同源JESD204B的确定性延迟靠的是SYSREF对齐。SYSREF是一个低频脉冲所有器件ADC、DAC、FPGA都用它来复位内部的LMFC计数器。如果SYSREF和Device Clock来自不同源两者的相位关系会随温度、电压漂移导致每次上电的延迟不一致链路就无法确定性同步。LMK04828的SYSREF是从同一个VCO分出来的所以和Device Clock天然同源相位关系固定。这是它相比FPGA内部生成SYSREF方案的最大优势。我前面提到的那个失败案例就是因为FPGA的MMCM和外部时钟芯片不同源SYSREF相位每次上电都变。5.2 SYSREF的工作模式选择SYSREF有三种常见模式连续模式SYSREF一直输出适合调试阶段方便用示波器抓脉冲模式上电后发若干个脉冲然后停止适合低功耗场景门控模式由外部信号控制何时发脉冲适合需要动态重同步的场景实际产品中我一般用脉冲模式上电时发4~8个脉冲确保所有器件都捕获到。调试阶段切到连续模式用示波器确认SYSREF和Device Clock的相位关系符合JESD204B规范SYSREF的上升沿要落在Device Clock的稳定窗口内。5.3 同步失败的排查思路JESD204B同步失败是家常便饭我整理了一个排查顺序现象可能原因排查方法链路一直重同步SYSREF相位不对示波器看SYSREF和Device Clock相位部分lane同步失败某路时钟偏斜大测各lane的Device Clock偏斜上电偶尔同步失败SYSREF脉冲数不够增加脉冲数或改连续模式温度变化后失步时钟相位漂移检查VCXO温漂和PLL环路带宽多片ADC之间不同步SYSREF走线不等长检查SYSREF走线等长和端接这里重点说SYSREF相位JESD204B规范要求SYSREF的建立/保持时间满足器件要求通常在Device Clock的上升沿前后各几百皮秒。LMK04828可以通过寄存器调整SYSREF的延时步进约几十皮秒。调试时我一般先设中间值然后用示波器微调直到眼图最开。6. 实操心得与常见问题实录6.1 电源和去耦不能省LMK04828对电源噪声很敏感尤其是VCO和OSCin的供电。我一般给模拟电源用LDO单独供数字电源用DC-DC加LC滤波。去耦电容按手册推荐放但实际布板时我会在每路电源引脚旁边再加一个0.1uF和1uF高频噪声能压下去不少。有一次为了省空间少放了几个去耦结果输出时钟上出现了明显的杂散后来补上就好了。6.2 输出电平标准要匹配LMK04828的输出支持LVPECL、LVDS、HSDS等配置时要和接收端匹配。比如FPGA的GT参考时钟输入通常要求LVDS而ADC的时钟输入可能是LVPECL。如果配错了要么幅度不够要么共模电压不对链路直接起不来。我一般会在原理图阶段就确认好每路输出的电平和接收端要求配置时再核对一遍。6.3 延时调整的实用技巧输出通道的延时调整可以用来补偿PCB走线偏斜。我的做法是先测出各路走线的实际长度差换算成时间约6.7ps/mm然后在LMK04828里设置对应的延时值。这样比在PCB上绕等长更灵活尤其是改板时不用重新布线。但要注意延时调整会影响SYSREF和Device Clock的相对相位调完要重新确认同步。6.4 常见问题速查PLL2锁不住先查VCO频率范围再查N2分频值是否整数输出无时钟检查输出使能位和电平配置确认通道没被误关SYSREF无输出检查SYSREF使能位和分频值确认没被配成0相噪差检查VCXO选型和PLL环路带宽确认参考输入干净SPI写不进检查CS*和SCLK时序确认SDIO方向切换正确6.5 调试工具推荐TICS Pro是官方配置工具能生成寄存器序列和仿真环路。Clock Design Tool适合前期频率规划。示波器建议用高带宽的至少1GHz不然看SYSREF和Device Clock的相位关系会失真。频谱仪用来测相噪和杂散有条件的话用相位噪声分析仪更准。7. 从配置到落地的完整检查清单最后给一个我实际项目用的检查清单按这个顺序走基本不会漏频率规划Device Clock、SYSREF、VCO、分频值全部算清楚参考输入确认CLKin频率和电平VCXO选型确认寄存器生成用TICS Pro生成序列核对关键值SPI写入按顺序写写完后读回验证锁定确认PLL1和PLL2都锁定STATUS引脚正常输出验证示波器看每路时钟频率和幅度SYSREF相位示波器确认和Device Clock相位关系JESD204B同步FPGA侧抓链路状态确认确定性延迟温度测试高低温下确认链路稳定长时间跑机至少跑24小时确认无偶发失步这套流程我在多个项目上验证过从单通道到八通道采集板都适用。LMK04828这颗芯片看起来寄存器多但把双环路和SYSREF这两条主线理清楚剩下的就是按部就班填参数。真正花时间的往往不是配置本身而是前期频率规划和后期同步调试。我的建议是前期多花一小时算频率后期能省一天调链路。