3. ADC/DAC核心性能指标与仿真方法
ADC/DAC 的性能指标可以分成三类:静态精度(INL、DNL、失调、增益误差)、动态速度(采样率、建立时间、带宽)和频域纯度(SNR、SFDR、THD、SNDR、ENOB)。理解这些指标的关键,不只是记住定义,而是知道每个指标在 Virtuoso 中对应哪一类仿真、观察哪个波形、用什么公式从结果反推指标值。下面按“定义—仿真设置—结果判读”的顺序展开。
分辨率与采样率:最基础的两个约束
分辨率 N 表示量化台阶数 2^N,理想量化步长 LSB = VFS/2N。例如 12 位、满量程 1.2 V 的 ADC,LSB = 1.2/4096 ≈ 293 µV。分辨率决定量化噪声下限:理想 SNR = 6.02N + 1.76 dB,12 位对应约 74 dB。采样率 fs 决定奈奎斯特带宽 fs/2,也决定建立时间预算——对 SAR ADC,每位比较需要约 (N+2)·τ 的建立时间,因此 fs 与比较器速度、DAC 建立时间直接耦合。
在 Virtuoso 中,分辨率通过输入斜坡或正弦波后观察输出码的跳变点来验证;采样率则通过给 ADC 输入一个接近 fs/2 的高频正弦,检查输出是否出现混叠或码丢失。DAC 侧则用理想 ADC 或 VerilogA 比较器采样 DAC 输出,重建码流后与输入码比较。
SNR、SFDR、THD、SNDR 与 ENOB
给 ADC 输入一个相干采样正弦(频率 fin = M/N · fs,M 与 N 互质,N 为采样点数),对输出做 FFT 得到频谱。信号功率 Psig 位于 fin 处,噪声功率 Pnoise 为除直流和前若干次谐波外的所有 bin 之和,则:
- SNR = 10·log10(Psig/Pnoise),只计噪声,不计谐波;
- THD = 10·log10(Psig/ΣPharm),通常取前 5~7 次谐波;
- SNDR = 10·log10(Psig/(Pnoise+ΣPharm));
- SFDR = 10·log10(Psig/Pmax_spur),最大杂散可能是谐波,也可能是时钟馈通或电源耦合;
- ENOB = (SNDR − 1.76)/6.02,把实测 SNDR 折算回等效位数。
在 Virtuoso 中,常用 spectre 的 dft 函数或 Calculator 的 dft() 对瞬态输出做加窗 FFT。相干采样时用矩形窗即可;非相干时需加 Hann 窗并做功率修正。采样点数建议取 2k(如 4096、8192),并保证 M 为奇数,避免谐波折叠到信号 bin。
INL 与 DNL:静态线性度
DNL 是实际码宽与理想 LSB 之差,INL 是实际跳变点与理想跳变点之差的累积。对 ADC,输入慢速斜坡(远低于 fs),记录每个码的跳变电压 Vt(k),则:
DNL(k) = (V_t(k+1) - V_t(k))/LSB - 1
INL(k) = (V_t(k) - V_t_ideal(k))/LSB
理想情况下 DNL 应在 ±0.5 LSB 内,INL 在 ±1 LSB 内;若 DNL < −1 LSB 则出现失码。在 Virtuoso 中,可用 dc 扫描输入电压,用 cross() 函数提取输出码跳变点,再用 Calculator 或 Ocean 脚本计算 DNL/INL 曲线。DAC 侧则扫描数字码,测量输出模拟电压,同样计算。
仿真流程与结果判读
一个完整的 ADC 动态性能仿真通常包含:搭建 testbench(理想时钟、理想输入源、输出码采集)→ 设置瞬态仿真(stop 覆盖 N 个采样周期,maxstep ≤ 1/(20·fs))→ 导出输出码到文本或直接使用 dft() → 计算 SNR/SFDR/ENOB → 扫描输入频率和幅度,绘制性能曲线。判读时注意:若 SFDR 远低于 SNR,说明存在谐波或杂散;若 ENOB 比分辨率低 2 位以上,需检查时钟抖动、比较器失调或 DAC 建立不足。
实操要点与常见陷阱
在 Virtuoso 中做 FFT 时,最容易出错的是采样点数和窗函数选择。若 N 不是 2 的幂,dft() 会补零导致频谱泄漏;若 M 与 N 不互质,谐波会与信号 bin 重叠,SNR 被高估。建议先用 Ocean 脚本自动检查 M/N 互质性,再启动仿真。
另一个常见问题是输出码的量化方式。ADC 输出可能是二进制补码、偏移二进制或温度计码,做 FFT 前必须统一转换为有符号整数并减去直流分量,否则直流 bin 会污染低频噪声。DAC 仿真中,输出模拟电压需先经过理想低通滤波再采样,否则开关毛刺会直接进入频谱。
对于 INL/DNL,斜坡输入的步长应远小于 LSB(如 LSB/10),且每个码至少采集 10 个点,用 cross() 的 edge 参数提取跳变点。若 DNL 曲线在中间码出现周期性波动,通常指向 DAC 电流源失配或比较器失调;若 INL 呈弓形,则可能是参考电压梯度或增益误差。
指标之间的相互制约
这些指标并非独立:提高采样率会压缩建立时间,可能恶化 INL;增大输入幅度可提升 SNR,但会逼近满量程非线性区,使 SFDR 下降;时钟抖动对高频输入的影响远大于低频,因此 SNR 随 fin 升高而下降。在 Virtuoso 中做设计验证时,应扫描 fin 和幅度,绘制 SNR/SFDR/ENOB 对频率和幅度的曲线,而不是只测一个点。只有看到完整趋势,才能判断设计余量是否足够。
总结来说,静态指标靠 DC 扫描和跳变点提取,动态指标靠相干采样 FFT,两者结合才能完整描述 ADC/DAC 的真实性能。在 Virtuoso 中,建议把上述流程封装成参数化 Ocean 脚本,一次运行输出全部指标和曲线,既减少人为错误,也便于不同工艺角下的批量对比。