AD9122高速DAC设计实战:从选型到PCB布局的关键要点
做高速板卡这些年正经被我拿来当主力DAC用过的芯片不算少但AD9122是值得单独写一篇的。16位精度、最高1.23 GSPS的更新率、内置2/4/8倍插值滤波器和数字上变频在中频信号生成和宽带通信系统里属于那种参数看着不夸张、用起来很顺手的稳定选手。这篇文章就围绕AD9122展开从芯片选型逻辑到时钟/电源/PCB三大关键点再到寄存器配置和实际调试中踩过的坑尽量把能直接抄作业的部分都写清楚适合正在做高速数模混合电路的硬件工程师、FPGA工程师以及刚接触高速DAC想系统了解设计思路的朋友。1. 高速DAC选型为什么最终锁定了AD91221.1 这颗芯片的核心家底先看AD9122最关键的几个指标。双通道16位DAC更新速率最高到1230 MSPS数字接口是LVDS支持DDR双沿采样。片内集成了2/4/8倍插值滤波器、一个用于补偿sin(x)/x滚降的反sinc滤波器还有数字上变频DUC模块带多个NCO数控振荡器可以在数字域直接做载波搬移。输出端支持差分电流输出满量程电流可以在8.7mA到31.7mA之间通过寄存器灵活配置。这些参数翻译成人话就是你可以用一片AD9122把基带I/Q数据直接插值到中频输出省掉外部一大堆模拟上变频电路。它的典型应用场景包括无线基站收发信机、微波点对点通信、软件定义无线电、宽带调制解调器、信号发生器和雷达波形产生。我做的那块板子是用于宽带信号发生器DAC输出中心频率设在120MHz附近AD9122的插值滤波能力让FPGA侧的工作时钟压力小了很多。1.2 别急着谈参数先搞清你需要哪种DAC选DAC之前最容易犯的错是拿MCU内置DAC或者低速并行DAC的思路来套高速DAC。STM32F4自带的DAC是12位、最高更新率也就几MHz级别适合音频类、直流控制类的场合通过定时器6触发DMA输出正弦波这种玩法追求的是波形能出来跟杂散和相位噪声达标完全不是一个量级的需求。AD9122这类高速DAC面对的是几十MHz以上中频/射频信号位深、更新率、SFDR无杂散动态范围、ACLR邻道泄漏比这些才是硬指标。我当时做选型对比时主要看三条线一是更新率能不能覆盖目标中频的奈奎斯特区二是SFDR和IMD指标是否满足系统误码率/调制精度要求三是数字接口方案是否跟现有FPGA资源匹配。表格里是我当时对比过的几颗器件型号位深更新率数字接口插值/调制能力适用场景AD912216bit1.23 GSPSLVDS DDR2/4/8x插值、DUCNCO宽带通信、信号源AD913616bit2.8 GSPSJESD204B插值、DUC更高中频、多通道DAC5682Z16bit1 GSPSLVDS插值、DUC通信基站STM32F4 DAC12bit~1 MSPS片内无控制、音频、波形演示选AD9122而不是更高端的AD9136原因很实际我的FPGA没有JESD204B高速串行硬核用LVDS并行接口最省事另外1.23 GSPS的更新率在120MHz中频下留足了过采样余量插值倍数开到4倍DAC实际工作在492 MHz时钟既避开了低通重建滤波器的高滚降需求又没把PCB设计难度推到极限。记住一个原则DAC的更新率越高输出端重构滤波器的阶数可以越低但时钟、数据和PCB的难度全都上来了。够用就好别追指标追到给自己挖坑。2. 高速DAC设计的三个命门时钟、电源、PCB布局这部分是整篇文章最核心的内容也是刚入门同行最容易翻车的地方。很多人原理图画得像模像样一上电频谱仪一看全是杂散问题十有八九就出在时钟、电源和PCB这三件事上。2.1 时钟抖动对SNR的影响算一笔账就懂高速DAC对参考时钟的敏感程度远超多数人的直觉。时钟抖动clock jitter直接影响DAC输出信号的SNR。在不考虑其他噪声源的前提下由时钟抖动限制的信噪比可以用下面这个式子估算SNR_jitter -20·log10(2π · f_out · t_jitter)其中f_out是DAC输出的信号频率t_jitter是时钟的随机抖动有效值。注意这里f_out是输出信号的频率不是DAC更新率。同样的抖动输出频率越高信噪比劣化越严重。举个例子AD9122输出一个70MHz中频信号如果时钟抖动是1 ps RMS那么SNR_jitter约等于70dB。如果把输出频率提高到350MHz同样的1ps抖动SNR直接掉到大约56dB。这就是为什么高速DAC设计对时钟源那么较真的原因DAC位深是16位不假理论量化噪声底在96dB左右但时钟抖动这一关就可能把实际性能卡在60-70dB。我当时给AD9122配时钟的方案是选用低抖动锁相环芯片输出频率从25MHz参考倍频到295.2 MHz实测随机抖动大约在0.5ps左右配合AD9122内部再对这个时钟进行处理整机输出在70MHz附近的SNR能做到接近理论预期值。经验就是时钟源的相噪指标一定要看偏移频率范围内的积分抖动光看晶振标称ppm没意义另外时钟走线必须差分尽量短串接交流耦合电容且尽量不要过板级连接器。2.2 电源噪声模拟性能的第二杀手高速DAC通常是混合信号器件内部既有数字逻辑又有模拟输出电路。AD9122的电源域大致分三类模拟电源AVDD3.3V、数字电源DVDD1.8V以及PLL相关的电源引脚。如果电源处理不干净电源纹波会直接调制到输出信号上在频谱上表现为偏离载波的杂散分量严重的会在中频带内产生交调。解决思路有三层。第一层是源头抑制用低噪声LDO而不是开关电源直接给DAC供电开关电源只负责板级总线电压之后每一路DAC电源都用单独的LDO再做一次稳压。第二层是滤波每个电源引脚就近放0.1uF陶瓷电容和1uF/10uF的大电容组合形成宽频带低阻抗路径。陶瓷电容选X7R或者C0G介质避免用高容值小封装的Y5V电容那种电容直流偏压下容量衰减严重实际滤波效果大打折扣。第三层是隔离模拟电源和数字电源的PCB走线明确分区单点汇合避免数字开关噪声串到模拟电源网络里。电源域电压主要负载处理要点AVDD3.3V模拟输出、内部参考低噪LDO严格滤波远离数字走线DVDD1.8V数字逻辑、LVDS接收可共用数字LDO但需合理解耦PLL_VDD3.3V片内PLL独立LC滤波PLL环路滤波电容要高Q值2.3 PCB布局的实操要点规避时钟抖动与电源噪声这块内容我拿自己的惨痛教训换来的值得单独展开。第一版PCB打样回来之后DAC输出频谱上总有-65dBc附近的一簇杂散怎么调寄存器都消不掉。后来拿频谱仪近场探头在板上扫了一圈发现杂散能量最大位置竟然在DAC电源引脚附近而不是在输出走线上。问题根源就是电源去耦回路面积太大回路电感过大高频噪声没法有效旁路。吸取教训之后我整理出高速DAC PCB布局的三个核心要点第一去耦电容的放置位置极其重要。小容值去耦电容必须紧贴DAC电源引脚走线尽量短最好直接通过过孔接到内层地平面形成最小的电流回路面积。电容到引脚的走线每多1mm寄生电感就大一些旁路效果就打个折扣。我后来把0.1uF电容放在DAC背面正对着电源引脚的位置用两个过孔直连实测杂散底噪降低了接近5dB。第二地平面必须完整严禁在DAC下方割地。高速混合信号芯片的底层参考地平面是信号回流的关键路径如果在芯片下方有走线穿过或者地平面被分割回流电流就会绕路形成环路天线。DAC芯片正下方的所有层最好都保持完整地平面其他信号从旁边绕。第三时钟和LVDS数据走线要远离模拟输出和电源网络。时钟优先级最高走内层带状线或者表层差分对两侧打地过孔隔离不要与其他高速信号并行走线超过3mm。LVDS差分对之间要做好等长匹配和差分阻抗控制通常按100Ω差分阻抗去做。DAC的模拟输出走线尽量短过孔越少越好输出变压器/巴伦建议就放在DAC输出引脚旁边不超过5mm的位置。3. 硬件电路实现从原理图到一块能跑的板卡3.1 供电架构怎么搭AD9122完整的供电架构我建议分成三级来做。第一级是板级输入电源根据整机电源分配来定我当时用5V总线输入。第二级用LDO把5V转为3.3V模拟和3.3V数字再转1.8V数字。模拟3.3V选择低噪声LDO输出噪声指标在10Hz-100kHz范围内尽量小于30uVrms。数字3.3V虽然对噪声宽容一些但也要选PSRR好的LDO因为DAC的数字电源与内部时钟缓冲器有耦合。第三级是针对PLL电源的专项处理。AD9122内部PLL虽然不依赖外部VCO但它的供电纯净度直接影响DAC时钟相噪。我习惯在PLL_VDD引脚前串一颗磁珠再接10uF钽电容和0.1uF陶瓷电容构成π型滤波。注意磁珠选型要按直流电流额定值来AD9122的PLL电源电流很小一般几十毫安以内选额定100mA以上的磁珠就够了太大电流规格的磁珠高频阻抗反而低。另外有一个细节DAC的参考电压引脚REFIO如果用的是内部参考需要在引脚旁放高质量去耦电容。内部带隙参考的噪声会直接传递到输出满量程电流上我试过用普通电容和用C0G高频低损耗电容对比输出底噪确实有可测量的差异。3.2 输出通路设计与阻抗匹配AD9122输出是差分电流型满量程电流I_fullscale通过寄存器设定。输出端要接负载电阻把电流转成电压。典型接法是在DAC输出引脚IOUTP/IOUTN上各接一个阻值相等的电阻到地然后通过变压器或巴伦把差分信号转成单端。具体参数计算是这样的如果寄存器设满量程电流为20mA差分输出时每个引脚输出电流幅度是±10mA。用25Ω负载电阻每个引脚的电压摆幅就是±0.25V差分摆幅±0.5V换算成功率为约0.4dBm。如果要提高输出功率可以把满量程电流调大或者增大负载电阻但要注意负载电阻太大输出共模电压可能超过DAC允许范围。AD9122的IOUT引脚共模电压大约0.5V负载电阻上的直流压降会改变引脚实际工作点一般建议差分负载等效值控制在25-50Ω区间。我实际用的方案是差分25Ω负载直接接在输出引脚上后级接一个1:2的传输线变压器把差分转为单端50Ω这样既能提升输出电平又能保持宽带阻抗平坦。变压器选型注意带宽要覆盖DC到至少3倍目标中频插入损耗在中频段尽量小于1dB。3.3 LVDS接口走线与数据对齐AD9122的数字接口是LVDS支持SDR和DDR两种模式。SDR模式下每个数据位在一个时钟沿采样接口速率是DAC更新率除以插值倍数再乘以通道数相关的系数。DDR模式下在时钟上下沿都采样数据速率是时钟频率的两倍。实际使用时多数人选择DDR因为可以把FPGA侧的IO时钟频率降一半。LVDS走线设计要点差分阻抗100Ω对内等长控制在±5密耳以内对间等长控制在±50密耳以内数据线相对DCI数据时钟指示的时序余量要留够。AD9122内部有数据延迟调整寄存器在调试时可以通过SPI微调数据采样时刻找到最佳对准点。这里强烈建议在FPGA侧实现一个简单的眼图扫描流程循环写延迟寄存器值同时读ADC监测输出信号质量自动找到最优延迟点。我后来把这套流程固化成了板上自检程序每次上电自动校准省了大量手动调试时间。另外还有一个经常被忽略的引脚FRAME同步信号。AD9122的数据流是按帧组织的FRAME信号需要与数据通道严格对齐。如果在示波器上看FPGA输出的FRAME和数据没问题但DAC输出完全不对大概率是FRAME的时序对不上。解决办法是让FPGA在生成FRAME时与数据使用同一个时钟寄存器输出并对FRAME走线做与数据完全一致的等长约束。4. 寄存器配置让DAC按你想要的方式工作4.1 SPI读写时序与基本配置流程AD9122的全部工作模式配置都是通过SPI接口完成的。SPI是标准的4线制SCLK、SDIO、CSB支持寄存器读写。初始化流程我一般按下面顺序来做第一步复位。拉低RESET引脚或者写软复位寄存器让芯片回到默认状态。上电后最好等待至少10ms再操作等内部电源稳定。第二步配置时钟路径。设置是否使用内部PLL倍频以及PLL分频比。如果不使用内部PLL直接给DACCLK引脚输入干净的DAC采样时钟。我通常选择外部时钟直入跳过片内PLL因为外部独立合成器的相噪指标更好控制。第三步配置数字数据路径。选择插值倍数1/2/4/8倍、选择是否使能反sinc滤波器、配置数据格式二进制补码还是偏移二进制以及LVDS接口模式SDR/DDR、单通道还是双通道。第四步配置DAC输出。设定满量程电流、输出模式差分/单端、共模电压、是否使能片内终端电阻等。第五步执行DAC校准。AD9122支持增益和失调校准通过SPI触发校准流程。校准结果会影响最终的SFDR性能建议每次上电都做一次。这里贴一段我当时在MCU里写的SPI初始化核心代码片段用伪C语言表述方便大家移植到自己的平台// 写AD9122寄存器函数寄存器地址为8位数据为8位 void ad9122_write(uint8_t reg_addr, uint8_t reg_val) { // 前8个时钟发送寄存器地址MSB为0表示写操作 // 后8个时钟发送寄存器数据 uint8_t i; CSB_LOW(); for (i 0; i 8; i) { SCLK_LOW(); SDIO_SET((reg_addr (7 - i)) 0x01); SCLK_HIGH(); } for (i 0; i 8; i) { SCLK_LOW(); SDIO_SET((reg_val (7 - i)) 0x01); SCLK_HIGH(); } CSB_HIGH(); } // 初始化序列示例 void ad9122_init(void) { // 1. 软复位 ad9122_write(0x00, 0x01); // SPI soft reset delay_ms(10); // 2. 配置数据路径使能LVDS、DDR模式 ad9122_write(0x10, 0x02); // 举例设置接口模式为DDR双通道 // 3. 配置插值倍数4x插值 ad9122_write(0x11, 0x02); // 4x interpolation inverse sinc on // 4. 配置DAC输出电流20mA ad9122_write(0x14, 0x80); // 满量程电流配置 // 5. 触发校准 ad9122_write(0x25, 0x01); // 启动DAC calibration delay_ms(5); }注意寄存器地址和具体位定义一定要以你拿到的AD9122数据手册版本为准不同版本手册对某些保留位可能有差异。上电初始化时所有未用到的寄存器也都建议按数据手册默认值写一遍避免芯片因为未知状态导致工作异常。4.2 插值滤波与数字上变频的正确打开方式AD9122最实用的功能之一就是片内的插值滤波器。假设FPGA以61.5 MHz的样点率送来基带I/Q数据经过4倍插值后DAC工作时钟变为246 MHz输出信号的所有镜像都搬到246MHz为中心的频带里模拟重构滤波器只需要在246MHz处提供足够的抑制就够了。相比不上插值重构滤波器的阶数可以从7阶降到3阶板子面积和成本省一大截。插值倍数不是越大越好。插值倍数高意味着FPGA侧数据率低接口时序压力小但片内数字滤波器会引入更多带外噪声同时在靠近DAC更新率的频段sin(x)/x滚降会更明显。通常在中频低于100MHz的场合选4倍插值就挺均衡。AD9122内置反sinc滤波器就是为了补偿sin(x)/x滚降的启用后能在通带内把幅度波动压到很小。我实际测试过在70MHz输出频率未启用反sinc时幅度比低频低约0.2dB启用后基本平直。数字上变频DUC功能适合需要直接产生载波信号的场景。AD9122的NCO能在数字域把基带搬到中频之后DAC直接输出中频信号。使用DUC时要注意NCO频率字设置精度问题频率字位宽有限算出来的输出频率跟目标频率有微小偏差对于小于100MHz的输出频率误差通常在几Hz级别大多数系统可接受。但如果系统要求输出频率精确到亚Hz级就要在FPGA侧自己处理频率补偿或者改用外部直接上变频的方案。4.3 PLL配置技巧与时钟树设计虽然我更推荐外部低抖动时钟直入但总有用到片内PLL的场景比如板上没有合适的高频晶振可用。AD9122片内PLL可以把低频参考时钟倍频到DAC所需的高频时钟。配置时关键是设好倍频和分频系数保证PLL输出频率落在DAC允许的时钟范围内。PLL环路滤波器配套元件要按数据手册推荐值选择偏差太大会导致锁定时间变长或者相噪恶化。调试PLL时最典型的故障是失锁。现象是DAC输出信号频率不对杂散特别重甚至完全没有信号。排查步骤先通过SPI读取PLL锁定状态位确认是否失锁再看参考时钟是否存在、频率是否与配置相符最后检查PLL电荷泵电流设置是否合适。有一次我遇到PLL频繁失锁查了半天发现是参考时钟信号幅度太大超出了PLL参考输入的正常范围加了一级衰减电阻就解决了。5. 调试实录那些示波器上看不见的问题5.1 输出杂散的排查思路高速DAC调试中频谱仪是最重要的伙伴。我这里分享一套系统性的杂散排查流程。先在零输入FPGA发全0或者全1数据或者关断DAC输出状态下看底噪。如果底噪偏高说明噪声源在DAC本身的电源、时钟或者参考上。这时用近场探头对着电源引脚扫描可以定位到具体的噪声辐射点。如果底噪正常再输入单音信号观察频谱。单音测试时杂散出现的频点位置很有讲究。如果是时钟频率的谐波附近出现杂散多半是时钟信号在PCB上耦合到了输出通路。如果是数据率的整数倍位置出现杂散多半是数字接口的串扰或者地回流问题。如果杂散与输出信号频率的间距固定且随着输出频率移动而移动则可能是DAC内部的镜像或者交调产物。信号源相关的杂散还有一种常见的误解工程师把镜像当成杂散去削结果怎么都没用。AD9122在上插值倍数的情况下DAC输出频谱上会同时存在基波和镜像分量。镜像出现在f_DAC_clock - f_out位置也就是以奈奎斯特频率为对称轴的位置。消除镜像要靠重构滤波器而不是靠调DAC内部寄存器。5.2 数据对齐与LVDS时序调试LVDS数据接口最容易出的问题就是数据采样错位。AD9122内部有专门的延迟调整机制通过寄存器控制采样时钟相对数据的相位。调试时可以在FPGA侧输出一个特定测试码型比如递增数据0x0000到0xFFFF循环观察DAC输出模拟正弦波。如果数据通道有位错位输出波形会出现明显的跳跃或噪声。严谨的做法是用码型回读来验证。AD9122支持通过SPI读回内部数据路径上的数据快照可以在FPGA发送固定码型后从DAC读回实际接收到的数据与发送值比对就能精确定位到是哪个bit出错。LVDS接口还需要检查端接电阻。AD9122的LVDS输入内部没有端接需要在差分对末端加100Ω电阻。有些工程师图省事省略这个电阻短距离下也许能工作但信号完整性和抗干扰能力大打折扣强烈不建议省。5.3 高速DAC调试常见问题速查表现象可能原因排查方向DAC完全无输出时钟未到/SPI配置错误/输出未使能检查DACCLK是否有时钟用示波器确认读寄存器确认配置输出波形杂乱无章LVDS数据对齐错误/FRAME信号错误检查FPGA数据时序微调延迟寄存器验证FRAME对齐输出频谱底噪偏高电源去耦不足/时钟抖动大近场探头找噪声源检查时钟源相噪加强去耦固定频点杂散时钟耦合/电源纹波/LVDS串扰定位杂散频率与时钟/数据率关系再针对优化输出幅度低于预期满量程电流设置偏小/负载电阻偏小检查寄存器设置计算输出功率高频段信号幅度滚降sin(x)/x固有滚降启用反sinc滤波器或在系统级做均衡PLL失锁参考时钟异常/环路参数不对读锁定位检查参考信号幅度与频率这套速查表是我个人经验的浓缩覆盖了高速DAC调试中九成以上的常见问题。遇到问题时别慌着改硬件先按表格顺序做逻辑排查很多时候问题就出在一个寄存器位没配置正确。写在最后的一点体会AD9122用下来最大的感触是高速DAC设计七分硬件、二分软件、一分运气。硬件上把时钟、电源、PCB这三个基础打牢剩下的寄存器配置和调试就都是水到渠成的事。反过来说如果原理图上来就埋了地回路、去耦和阻抗匹配的雷后面再怎么调软件都是白搭。另外要提一句AD9122的官方数据手册和评估板资料非常详尽甚至评估板的PCB走线图都值得逐层研究那是我见过最实用的学习材料之一。如果你正在做第一块高速DAC板卡照着评估板抄一遍布局成功率会高很多。先跑通再谈优化这个顺序从来没让我失望过。