☰
AD9122高速DAC设计实战:从选型到PCB布局的关键要点
2026/10/5 8:20:14 网站建设 项目流程

做高速板卡这些年,正经被我拿来当主力DAC用过的芯片不算少,但AD9122是值得单独写一篇的。16位精度、最高1.23 GSPS的更新率、内置2/4/8倍插值滤波器和数字上变频,在中频信号生成和宽带通信系统里属于那种"参数看着不夸张、用起来很顺手"的稳定选手。这篇文章就围绕AD9122展开,从芯片选型逻辑到时钟/电源/PCB三大关键点,再到寄存器配置和实际调试中踩过的坑,尽量把能直接抄作业的部分都写清楚,适合正在做高速数模混合电路的硬件工程师、FPGA工程师,以及刚接触高速DAC想系统了解设计思路的朋友。

1. 高速DAC选型:为什么最终锁定了AD9122

1.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插值、DUC+NCO宽带通信、信号源
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的电源域大致分三类:模拟电源AVDD(3.3V)、数字电源DVDD(1.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板卡,照着评估板抄一遍布局,成功率会高很多。先跑通,再谈优化,这个顺序从来没让我失望过。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询