18位Sigma-Delta DAC:128倍过采样与五阶噪声整形实践 简介这份资源是哈尔滨工业大学2014年微电子学与固体电子学专业硕士学位论文《18bits Sigma-Delta DAC的设计》面向具备电子工程基础、熟悉数模转换与Sigma-Delta技术的研发人员与研究生可用于音频处理、工业控制等高精度大带宽转换场景的原理学习与设计参考。论文从国内外研究现状入手系统梳理DAC工作原理选定一位量化五阶全前馈结构调制器与128倍过采样率配合三级数字FIR插值滤波器和六阶贝赛尔模拟低通滤波器并基于GF 0.35μm CMOS工艺完成逻辑综合、布局布线、模拟开关电容电路设计及手工版图最终仿真在-6dB输入下取得98.26dB信噪比。资源包共1个PDF文件约3.03MB便于按章节查阅系统指标、模块建模与仿真结论。目前已有108人学习适合作为Sigma-Delta DAC架构选型与MATLAB行为级建模的完整参考范本。1. 1 位输出凭什么标 18 位Sigma-Delta DAC 的反直觉起点先看一个矛盾一份设计文档标称 18 位分辨率、100kHz 信号带宽、98dB 以上信噪比但它末端的数模转换单元只有 1 位——输出线上永远只有两个电平。真正把精度做出来的不是那个 1 位 D/A而是它前面的 128 倍过采样、五阶噪声整形以及后面那个六阶模拟低通滤波器。换句话说精度是被“搬到带外再抹掉”的不是被“精密匹配”出来的。这套机制值得搞懂因为它解释了现代高精度数模转换为什么能把模拟电路的负担大规模转移到数字侧。2. 噪声整形被赶出信号带的那部分噪声去哪了量化误差常被当成随机噪声处理一个 N 位量化器步长 Δ误差均匀落在 ±Δ/2 之间总功率恒为 Δ²/12与输入信号无关。这个模型不完美但它指出一个关键事实——量化噪声的总量是固定的任何“提高精度”的手段本质上都不是减少噪声而是重新分配噪声在频域上的位置。Sigma-Delta 的两大支柱过采样负责摊薄噪声整形负责搬运。2.1 过采样换信噪比白噪声被摊到更宽的带宽上奈奎斯特采样下Δ²/12 这团噪声功率均匀铺在 0 到 fs/2 之间信号带宽内占多少取决于信号带宽占多大比例。一旦把采样率提到 2·fb·OSR同样的噪声总功率被摊到 OSR 倍宽的频带上落进 [0, fb] 的那部分按 1/OSR 缩小。换算成 dB过采样率每翻一倍带内信噪比提升约 3dB。128 倍过采样只值 21dB一位量化的理论峰值信噪比也只有 7.78dB两者相加不到 29dB离 98dB 差着整整 70dB。差额全部由噪声整形补上这也是为什么这类架构里调制器的阶数比过采样率更值得斟酌。注意把量化噪声当白噪声前提是输入足够“忙”。输入接近直流或者周期性极强时量化误差会和信号强相关白噪声假设失效带内就会冒出离散单音后面避坑章会专门讲这个。2.2 噪声传递函数一条塞在环路里的高通滤波器把调制器画成线性模型输入经前馈路径到量化器量化器输出经反馈路径回到积分器链的入口。对量化噪声而言它只看到从量化器输入到输出的那条通路对信号而言它看到的是另一条。于是同一个环路给出两个传递函数STF信号和 NTF噪声。五阶全前馈结构的 NTF 在形式上是一条高通NTF(z) (1 - z^-1)^5 / D(z)(1 - z^-1)^L在 z1直流处有 L 阶零点意味着带内噪声被压到极低在 z-1fs/2处增益最大噪声被推到高频。零点阶数决定整形斜率每增加一阶带内噪声随过采样率下降的速度就多 3dB/倍频。理想线性模型下L 阶整形在 OSR 翻倍时带内噪声降 3(2L1) dB——这个数字看起来过于美好因为它假设量化器是一个增益恒定的线性放大器而一位量化器根本不是。分母 D(z) 由反馈系数和前馈系数共同决定它要保证环路稳定。全前馈结构里信号从输入直接前馈到量化器输入端也前馈到每一级积分器的输出求和点而反馈只有一条从量化器输出回到第一级积分器的输入。这个拓扑带来一个非常实际的收益——信号不穿过积分器链只有量化噪声穿过。各级积分器的输出摆幅因此被压得很小运放的输出摆幅和线性度要求跟着放松这对模拟部分是实打实的省事。2.3 为什么是五阶、一位、单环全前馈结构选型上有三条正交的轴单环还是级联MASH、一位还是多位、前馈还是反馈。这份设计在三条轴上分别选了单环、一位、全前馈三个选择都有明确的代价。单环对级联级联结构把多个低阶调制器串起来用数字逻辑抵消前级的量化噪声理论上能用低阶环路拿到高阶整形且天然稳定。但级联结构的 STF 不平坦模拟实现中前级量化器的泄漏会直接污染抵消结果对元件匹配敏感。单环高阶的稳定性要靠系数设计来保证一旦设计成功它对模拟失配的容忍度更高。一位对多位多位量化能显著降低量化噪声还能改善环路稳定性代价是反馈路径上的 D/A 必须精确——多比特 D/A 的元件失配会直接引入非线性通常要用动态元素匹配之类的技术去修。一位量化把这个麻烦彻底消掉两个电平之间的比值是 1不存在匹配问题D/A 天生线性。代价是量化噪声极大必须靠高阶整形去压而高阶加一位恰好是稳定性最紧张的那一组组合。五阶是这条张力线上的落点。阶数再往上一位量化器的等效增益随输入幅度剧烈变化环路易进入大信号振荡稳定输入范围也就是允许的最大输入幅度迅速收窄。这份设计把输入幅度限制在 -6dBFS正是给稳定性留余量的直接体现。2.4 行为级先跑通再谈 RTL系统级阶段要做的事是在写任何一行 RTL 之前用浮点模型把阶数、系数、过采样率、输入幅度这四个量调到互相自洽。下面是这类调制器行为级模型的骨架结构上刻意贴近后面 RTL 的实现方式不引入 MATLAB 工具箱里的现成函数便于逐行对照。% 五阶全前馈一位量化调制器定点化之前的行为级验证 N 2^16; % 仿真点数取 2 的幂便于 FFT 对齐栅格 OSR 128; fs 25.6e6; % 100kHz 带宽 x 2 x 128 fbin 37 * fs / N; % 取质数倍频点避开 FFT 栅格泄漏 x 0.5 * sin(2*pi*fbin*(0:N-1)/fs); % 0.5 幅度约合 -6dBFS b [0.5 0.25 0.125 0.0625 0.03125]; % 前馈系数决定 NTF 零点分布 w zeros(1,5); % 五级积分器状态 y zeros(1,N); for n 1:N v x(n) b * w.; % 全前馈求和信号不穿积分器 y(n) sign(v); % 一位量化输出 1 / -1 % 只有第一级吃输入与反馈后级仅累加前级输出 w [w(1) x(n) - y(n), ... w(2) w(1), w(3) w(2), ... w(4) w(3), w(5) w(4)]; end % 带内信噪比把 FFT 结果里 [0, fb] 之外的 bin 全部丢掉再比b这组系数不是随便写的它的取值决定了 NTF 分母的极点位置进而决定环路的稳定裕度实际设计里通常用综合工具反解或者从巴特沃斯/切比雪夫原型映射过来再回到时域扫输入幅度找出不振荡的最大值。sign()那行是模型里最“假”的地方——真实量化器有比较器失调和亚稳态行为级看不出来只有到电路级才会暴露。仿真输出的频谱上会看到一条从低频往上爬的噪声曲线爬升斜率就是整形阶数噪声在 fs/2 附近达到峰值。这条曲线在带内的积分值除以信号功率就是 SNR。系数改动之后这条曲线的形状会变但要小心带内噪声降下去不代表设计变好了稳定性边界可能同时收窄了。3. 三级 FIR 级联插值128 倍是摊出来的不是一次乘出来的插值滤波器的任务是把采样率从 2·fb 抬到 2·fb·OSR也就是 200kSa/s 抬到 25.6MSa/s。数字域插值的方法是先在样点之间补零再用低通滤波器把补零引入的高频镜像压掉。补零本身不产生新信息它只是把原有频谱在频域上复制了 OSR 份滤波器负责只留基带那一份。3.1 镜像的位置决定了过渡带有多少余量补零后原始频谱在 0 到 fs_orig 之间有一份在 fs_orig 到 2·fs_orig 之间有一份镜像依此类推。低通滤波器的通带要做到 fb阻带起点要压在 fs_orig - fb 以下两者的比值就是过渡带的宽窄。一级完成 128 倍插值意味着滤波器要工作在 25.6MHz过渡带极窄抽头数会膨胀到不可接受——乘法和存储都在最高时钟域跑功耗和面积都不划算。分级的意义就在于此把一次难以实现的窄过渡带换成若干次宽松的宽过渡带。常见的做法是把倍数从大到小排列前级用结构极简的梳状滤波器CIC承担大倍数后级用半带滤波器做精修。每一级的过渡带相对宽松因为它们各自的采样率还不高归一化到自身采样率上指标就好做。3.2 半带滤波器一半系数为零带来的硬件红利半带滤波器是 2 倍插值场景的标准件。它的冲激响应除了中心抽头之外所有偶数位置的系数严格为零h[2k] 0, k ≠ 0补零之后做卷积时落在零系数位置上的乘加项可以直接跳过。再叠加线性相位 FIR 的系数对称性h[k] h[N-1-k]实际需要的乘法器数量大约是同阶通用 FIR 的四分之一。这个红利在半带级数多的时候非常可观也是三级级联方案在面积上能站得住脚的核心理由。// 半带滤波器两相分解插零后的卷积拆成偶/奇两条支路 // 偶相位除中心抽头外系数全零输出直接是延迟对齐后的输入 // 奇相位非零抽头全部落在这里对称预加后乘法量再减半 always (posedge clk or negedge rst_n) begin if (!rst_n) begin shift 0; phase 1b0; end else begin shift {shift[TAPS-2:0], x_in}; // 输入样点移位链 // 对称预加shift[k] shift[TAPS-1-k]共用同一个系数 pair_sum shift[0] shift[TAPS-1] shift[1] shift[TAPS-2]; // 实际按 TAPS/2 组展开 // 偶相位透传奇相位做乘加两相各跑一个时钟 y_out phase ? (pair_sum * h_odd) : shift[TAPS/2]; phase ~phase; end endshift[TAPS/2]是中心抽头对齐的位置偶相位直接把它送出去是半带滤波器最“白拿”的一步。pair_sum的位宽必须比输入宽因为预加会产生一位增长h_odd用 CSD 编码可以把常数乘法做成少量移位加进一步省掉乘法器。这里最容易被忽略的是位宽预加、乘加、累加三级各自有增益任何一级不预留足够的头寸综合出来的结果就会在特定输入下溢出翻转而溢出在频谱上表现为突然抬高的噪底很难和调制器不稳定区分开。3.3 位宽增长与舍入噪声的累积插值链每一级都会增加有效位宽滤波器系数的增益、多相分支的累加都会让数据字变宽。变宽的部分不能无限保留必须在级间截位而截位就是引入舍入噪声。这些噪声落在带内会直接吃掉系统信噪比。处理思路是把噪声预算当成一条链来分。假设整链允许的带内噪声功率对应 100dB 信噪比那么插值滤波器各级、调制器、D/A、模拟滤波器各自分到一份互不挤占。截位的位置越靠前噪声被后续增益放大的倍数越小但保留位宽的成本越高。这份设计把 18 位作为对外位数内部各级的实际数据通路宽度会明显大于 18 位多出来的部分就是给舍入噪声留的余量。级间位置主要噪声来源对带内信噪比的威胁插值第一级输出补零镜像残留镜像落回带内表现为固定杂散插值级间截位舍入噪声宽带抬底与级数正相关调制器输入前级量化误差被整形搬到带外威胁较小1 位 D/A 后时钟抖动、开关电荷注入直接落带内不可整形表格里最后一行是关键噪声整形只对调制器内部的量化噪声有效D/A 之后引入的任何误差都不再享受整形红利只能靠模拟滤波器的那点抑制。这也是模拟部分比数字部分更难做的原因。4. 模拟端开关电容、不交叠时钟与贝塞尔到了 1 位 D/A 这一步信号在形式上已经变成了一串高速脉冲它的平均值才对应原始波形。模拟部分要做两件事把这串脉冲变成有明确基准电平的模拟量再滤掉 fs 附近那一大片整形后的噪声。4.1 1 位 D/A 与单双端转换的配合1 位 D/A 的结构简单到几乎不能叫电路两个基准电平之间的一对开关由调制器输出控制。它的精度完全取决于基准的干净程度和开关的对称性——因为没有匹配问题所以也不需要校准。单双端转换紧接在后面。差分信号的价值在于抑制共模干扰和偶次谐波而 1 位 D/A 输出的仍是单端形式需要转成差分再送进开关电容滤波器。转换环节的失配会直接产生二次谐波这是差分链路里最典型的非线性来源靠版图对称和开关尺寸加倍来压。4.2 两相不交叠时钟为什么“不交叠”是硬约束开关电容电路靠电荷在电容之间转移来完成滤波转移的时机由两相时钟控制。采样相 φ1 把输入电荷采到电容上放大相 φ2 把电荷送到积分电容。如果 φ1 和 φ2 同时为高输入和输出就被直接短路电荷从输入一路冲到输出采样精度彻底失效。所以两相时钟必须保证φ1 下降之后经过一段死区时间φ2 才上升φ2 下降之后同样要等一段φ1 才上升。这段死区就是“不交叠时间”。阶段φ1φ2电路状态采样高低输入接到采样电容积分电容保持死区 1低低全部开关断开电荷暂存放大低高采样电容接到运放虚地电荷转移死区 2低低等待下一次采样死区时间不是越长越好。太短开关还没完全关断另一相就导通了出现直通输出上会看到台阶状的毛刺太长运放的建立时间被压缩电荷转移不完整等效于增益误差表现为滤波器频响偏离设计值。这个时间窗口通常要放在工艺角、温度、电源电压的联合扫描里取值而不是在典型条件下调好就收工。4.3 六阶贝塞尔放弃陡峭换群时延平坦模拟低通滤波器的选型有一个容易被忽视的维度不只是看幅频响应的滚降陡不陡还要看相频响应。巴特沃斯幅频最平坦切比雪夫滚降更陡但有通带波纹贝塞尔的最大特点则是群时延最平坦——通带内各频率的延迟基本一致。对 DAC 输出来说这一点很重要。整形后的噪声集中在 fs 附近理论上需要一个足够陡的滤波器把它们压下去但信号本身要保证波形不失真群时延不平坦会让方波边沿振铃、脉冲展宽这在工业控制和波形发生类应用里是硬伤。贝塞尔牺牲了滚降速度换来相位线性代价是必须把阶数提到六阶且对过采样率有依赖——只有 OSR 足够高噪声才被推得足够远缓滚降的滤波器才够用。这份设计把 OSR 定在 128、模拟滤波器定在六阶贝塞尔这两个参数是绑在一起决策的过采样率再降贝塞尔就压不住带外噪声阶数再降阻带衰减不够。反过来如果把模拟滤波器换成切比雪夫阶数可以降但群时延波动带来的波形失真无法用数字手段补偿。5. 避坑与排查混合信号链路最容易翻车的五个地方5.1 行为级信噪比漂亮定点 RTL 一跑掉好几个 dB现象浮点模型跑出 110dB 以上的带内信噪比换成定点位宽后 RTL 仿真只剩 95dB 上下频谱整体抬底没有明显杂散。原因MATLAB 里所有运算默认双精度系数量化和级间截位的误差完全不存在定点化之后前馈系数的有效位数不够会改变 NTF 零点位置积分器累加位宽不够会在特定输入下溢出两种效应都表现为宽带噪底抬高。解决做位宽扫描把每一级的数据位宽、系数位宽当成变量从宽到窄逐级收每收一次跑一遍带内信噪比找到拐点再留一到两位余量同时把行为级模型也改成定点实现两边逐点比对波形先保证 bit-true再谈指标。5.2 频谱上冒出离散杂散而不是平滑爬升的噪声曲线现象输出频谱里出现若干根孤立的尖峰幅度在 -40dBc 到 -60dBc 之间位置不随输入频率线性移动。原因调制器进入大信号振荡或者极限环。一位量化器在高阶环路里输入幅度超过稳定边界后会周期性饱和环路退化成低频振荡器另一种情况是系数缩放不当积分器在启动瞬间就冲到饱和之后再也回不到线性区。解决把输入幅度从 -6dBFS 继续往下退观察杂散是否消失确认是稳定边界问题在积分器输出加饱和检测仿真时打印各级峰值看哪一级先顶到电源轨必要时在量化器前注入小幅伪随机抖动打断极限环。5.3 零输入或极小信号时带内出现单音现象输入接零输出频谱在几千赫兹处有一根稳定的单音幅度不大但足以让空闲信道指标不合格。原因一位量化器在输入接近零时量化误差与信号强相关白噪声假设失效环路把这种相关性放大成周期性图案也就是常说的空闲音。这是 1 位量化的固有缺陷多位量化靠更多的电平数缓解一位只能靠抖动。解决在量化器输入注入幅度极小的抖动信号dither把相关性打散成随机噪声抖动的幅度要控制在不明显恶化带内信噪比的范围内通常取量化步长的几分之一。另一种做法是在系统层面接受这个单音用应用侧的静音检测规避。5.4 差分输出的偶次谐波偏高现象单端仿真时谐波指标正常接成差分之后二次谐波反而变差三次谐波没变化。原因单双端转换环节的两条支路失配或者 1 位 D/A 的两个开关电荷注入不对称。差分结构抑制的是偶次谐波前提是两条支路完全对称一旦失配原本被抵消的二次分量就漏出来了。解决开关尺寸加倍并加 dummy 开关吸收电荷注入采样开关改用下极板采样把电荷注入的影响从采样电容上移开版图上两条支路严格镜像对称走线长度、寄生电容尽量一致。5.5 时钟馈通导致噪底抬高现象整链仿真信噪比比预期低 3dB 左右频谱上没有明显杂散就是噪底整体偏高且随温度变化。原因两相不交叠时钟的死区时间不够开关在切换瞬间出现短暂直通电荷从输入直接漏到输出或者死区时间过长运放建立不完整等效于每次转移都留下残余电荷逐次累积成随机误差。解决把死区时间做成可配置参数在工艺角、温度、电压的联合扫描下扫一遍找到信噪比最优的窗口时钟驱动链上加缓冲保证两相时钟的边沿陡度一致避免边沿缓慢导致的“软交叠”。6. 取舍98.26dB 与 100dB 之间那 1.74dB设计指标写的是带内信噪比大于 100dB最终混合信号仿真在 -6dBFS 输入下给出 98.26dB。差 1.74dB不算失败但值得拆开看这 1.74dB 花在哪了。第一个来源是输入幅度。所有信噪比数字都必须带上输入条件-6dBFS 相比满量程本身就少了 6dB 信号功率这是为了让一位量化器远离稳定边界而主动付出的代价。第二个来源是运放的有限增益开关电容积分器在放大相并不能把电荷完全转移到积分电容残余比例与运放开环增益成反比这部分误差直接表现为增益误差和带内噪声。第三个来源是时钟抖动采样时钟的相位噪声在 1 位 D/A 输出上等效为随机的脉冲宽度变化落进带内就是白噪声而且没法被噪声整形抑制。这三个因素叠在一起量级恰好在一两个 dB 上下。想把它们压下去路径很明确把过采样率从 128 提到 256带内噪声立刻降 3dB 以上但时钟频率翻倍、数字功耗翻倍、模拟滤波器带宽要求跟着变把调制器阶数从五阶提到六阶理论上收益更大但一位量化下六阶环路的稳定输入范围会收窄到 -8dBFS 甚至更低信号动态范围反而被吃掉。所以停在 128 和五阶是一个保守但自洽的落点。真正决定这类设计成败的往往不是这些纸面上的指标而是验证顺序。先行为级确认结构和系数再定点确认位宽再 RTL 确认逻辑再电路级确认模拟非理想最后混合信号一起跑——每一步都有独立的观测手段每一步的偏差都能定位到具体模块。跳过任何一步后面就得靠猜。血泪经验是定点化的那一步最容易被当成走过场结果往往就是它把几个 dB 悄悄吃掉了。从那以后我每次做这类混合信号链路都强制先跑一遍行为级到定点的逐点比对波形对不上就不往下走哪怕信噪比数字看着还行。希望帮到你。本文还有配套的精品资源点击获取