简介这份PDF是一篇哈尔滨工业大学工学硕士学位论文聚焦18位Sigma-Delta DAC的完整设计流程适合具备电子工程或微电子基础、希望深入理解高精度大带宽数模转换的研发人员与高年级学生参考。全文围绕系统架构展开涵盖MATLAB行为级建模仿真、一位量化五阶全前馈Sigma-Delta调制器、128倍过采样、三级数字FIR插值滤波以及六阶贝赛尔模拟低通滤波器的选型与验证并基于GF 0.35μm CMOS工艺完成逻辑综合、自动布局布线、模拟电路设计与手动版图。压缩包仅含1个PDF文件大小约3.03MB便于集中阅读和检索关键设计参数。已有108人学习读者可从中获取从指标分解、模块建模到整体仿真的完整技术路径并了解-6dB输入下98.26dB信噪比等结果及工程实现细节。1. 从100kHz带宽到18位精度一个能把指标推到底的Sigma-Delta DAC设计链上个月帮一个做工业信号源的朋友排查一块DAC板子带宽要求100kHz、精度想往18位走翻遍手头的产品手册全是结论推导过程一个字都没有。最后他手里能用的是一份把18位Sigma-Delta DAC从系统指标一路推到CMOS版图的完整设计文档。高精度数模转换这件事窄带音频方向到处是成熟方案一旦把信号带宽拉到100kHz这个量级过采样技术和模拟低通滤波器怎么配就变成了玄学。这份文档值得读的点不在于它做了一个DAC而在于它把系统级、RTL级、电路级、版图级四层全部串起来走了一遍每个关键决策背后都有对应的仿真依据。下面按文档自身的思路拆一遍看它是怎么从带宽和精度指标倒推出结构、系数和电路参数的。2. 系统级设计128倍过采样率与四段式架构怎么定下来Sigma-Delta DAC的系统级设计本质上是把“带宽多少、精度多少”翻译成“过采样率多少、调制器几阶、滤波器几阶”这一组可执行的数字。文档的第二章基本就是在做这件事四条关键决策依次是过采样率、插值滤波器级数、调制器结构和模拟低通类型。串行数据从输入端进来先被插值滤波器从基带采样率抬到128倍再送进数字调制器做噪声整形一位量化输出交给低精度D/A变成模拟电平最后由六阶Bessel低通把高频噪声滤掉。整条链路里只有最后两级是模拟的前面全是数字逻辑这也是“almost”数字实现方式的核心思路——把精度压力放到数字域去换模拟器件的宽松度。2.1 128倍过采样率和25.6MHz时钟是怎么算出来的一位量化的Sigma-Delta调制器最终能达到的有效位数几乎全靠过采样把量化噪声压到带内再靠环路滤波器的噪声整形把剩下的噪声推到高频。文档里的结论是100kHz信号带宽、OSR取128对应时钟25.6MHz。这个数字不是拍的是从信噪比和稳定性的折中里扫出来的。先看时钟和带宽的关系。OSR定义成采样时钟相对于奈奎斯特频率的倍数输入带宽100kHz对应奈奎斯特频率200kHz乘上128就是25.6MHz的采样时钟。这一步几乎所有Sigma-Delta设计都一样真正要动脑的是OSR取多少。太低带内量化噪声压不住五阶前馈的噪声整形斜率再陡也补不回来太高数字插值滤波器和调制器的工作频率一起上去0.35μm工艺下的动态功耗和时序收敛都会变得难受。行为级里我一般会先用下面这样一段脚本把几组候选OSR和阶数的理论SNR算一遍再去跑完整的时域仿真验证稳定性% 一位量化 L 阶 Sigma-Delta 调制器理论 SNR 估算 L 5; % 环路阶数文档取五阶 OSR 128; % 过采样率 BW 100e3; % 信号带宽 fs 2*BW*OSR; % 采样时钟 25.6 MHz % 理想噪声整形下的带内 SNR 下限白噪声假设 snr_ideal 6.02*1 1.76 ... % 一位量化的理论极限 10*log10((2*L1)/pi^(2*L)) ... % 整形阶数带来的增益项 (2*L1)*10*log10(OSR); % 过采样带来的增益项 fprintf(OSR%d, L%d, 理论SNR上限 ≈ %.2f dB\n, OSR, L, snr_ideal);这段代码里6.02*1 1.76是一位量化的理论SNR底10*log10((2L1)/π^(2L))描述的是高阶整形把噪声往高频搬的增益最后一项(2L1)*10*log10(OSR)是过采样每翻倍带来的近似(2L1)*3dB的收益。五阶、128倍的组合理论上是够到18位所需的百dB量级但理论值永远偏乐观文档最终流片前的仿真出来是-6dB输入下98.26dB中间被电路非理想、运放有限增益、时钟抖动这些吃掉了不少。提示这段脚本只能用来做初筛别拿它当结论。真正定OSR要看完整的时域仿真里调制器会不会进入不稳定区五阶前馈结构对输入幅度很敏感。确定了OSR之后插值滤波器和调制器的时钟就都锁死在25.6MHz整个系统参数表在文档第三章开头列得很清楚输入带宽100kHz、过采样率128、时钟25.6MHz、一位量化输出。后面的电路参数——采样电容、开关尺寸、运放增益带宽——全部是围着这三个数反推的。2.2 三级FIR级联的插值预算128倍的插值如果做成单级滤波器的阶数和乘法器数量会失控尤其是通带边缘要压得足够平过渡带又要窄。文档用的方案是三级数字FIR滤波器级联把128拆成几段小的整数倍让每一级只承担一段插值比和一段过渡带要求。这是数字插值里非常成熟的拆分思路每一级承担不同的任务。常见的拆法是第一级做大的倍率但滤波器阶数低主要负责把镜像推到远端后两级倍率小但滤波特性更陡负责把带内纹波压下去。拆分比例直接影响三级的系数数量和总乘法器数量我一般会先把每级的通带、阻带、过渡带宽列成一张表再决定系数位宽级次插值倍率主要职责通带/阻带要求系数位宽倾向第一级大倍率粗插值、推镜像阻带起点最宽较窄第二级中倍率过渡带硬化阻带衰减要求高中等第三级小倍率精细补偿通带平坦度最高较宽这张表的核心是“每一级别干两级的活”。我见过不少人想把128一次搞定结果FIR系数长度上千综合出来的乘法器把数字面积吃掉了大半反而不如好好拆三级来得省。文档结论是三级级联实现高倍插值具体系数由MATLAB的滤波器设计工具生成后导出成定点再写进Verilog的系数ROM里。2.3 六阶Bessel模拟低通为什么不是Butterworth或Chebyshev模拟低通是整条链路上唯一一个需要真刀真枪做运放和电容的部分阶数和类型选错前面数字部分做得再好也会被它拖累。文档里对比了几种模拟滤波器传递函数的仿真结果最后落到六阶Bessel。这个选择的逻辑值得展开说。Butterworth的通带最平坦但阶跃响应有过冲Chebyshev通带边缘更陡、过渡带更窄代价是通带内有纹波群时延也难看。Sigma-Delta DAC的带外噪声是被整形推到高频的低通的任务是把它滤掉同时保住带内信号对相位失真和群时延一致性要求高。Bessel的最大特点是群时延最平坦阶跃响应几乎没有过冲通带虽然不如Chebyshev陡但对100kHz这个带宽来说够用。真正做实的时候六阶Bessel会被拆成三个二阶节用开关电容电路搭每一节的Q值和截止频率由电容比决定这也是后面4.4节要拆的电路重点。2.4 MATLAB行为级建模和SNR预算系统级设计最后一步是把所有模块的模型拼起来跑一遍完整的行为级仿真确认整链路的SNR预算够。文档的做法是先用MATLAB把调制器、插值滤波器、D/A、模拟低通各自建模输入端给一个接近满量程但留了-6dB裕量的正弦输出端做FFT算带内SNR。整个链路的行为级模型是后面Verilog和电路设计的参照基准任何一级在电路级掉链子都可以回来对这条曲线看是哪一段塌了。行为级这一步看起来只是“跑个仿真”实际上是在给整个项目立一个黑匣子基线。后面数字综合出来对不上、模拟滤波器频响偏了都要回来比这条基线。我一般会把行为级模型的输入输出都存成定点数据文件方便和后面RTL仿真、混合仿真逐点比对。3. 数字链路拆解三级FIR插值滤波器与五阶前馈调制器的Verilog实现数字部分是这份设计里工程量最大的地方也最能体现“almost”数字实现的思路——把精度压力全放到数字侧。文档第三章的数字子电路包括数字插值滤波器和数字Sigma-Delta调制器两块都用Verilog描述走0.35μm工艺的综合和自动布局布线。这部分拆开看插值滤波器是纯算术流水线调制器是反馈环路两个模块的时序收敛策略完全不同。3.1 插值滤波器的RTL结构三级FIR级联的插值滤波器在RTL层最典型的问题不是算法是资源。每一级FIR的乘加结构直接决定综合出来的乘法器数量和关键路径长度。0.35μm工艺没有现成的硬核乘法器全部要靠综合工具从通用逻辑搭系数位宽稍微宽一点面积和时序就一起爆。文档的插值滤波器采用多相分解的思路插值倍率为M的FIR可以拆成M个并行的子滤波器每个子滤波器只处理输入序列里隔M个取一个的点这样每个时钟周期只需要算一个子滤波器的输出乘法器数量降到原来的1/M。多相结构的具体实现是按输出相位轮流选子滤波器系数// 三级FIR级联中的一级多相分解插值滤波器结构示意 module fir_poly #( parameter TAPS 32, // 原型滤波器系数长度 parameter PHASE 4 // 本级插值倍率多相路数 )( input wire clk, input wire rst_n, input wire signed [17:0] din, // 18 位输入 output reg signed [23:0] dout // 24 位中间结果留给下一级 ); // 系数按相位分组成 PHASE 组每组 TAPS/PHASE 个 reg signed [15:0] coeff [0:PHASE-1][0:TAPS/PHASE-1]; // 输入移位寄存器按相位轮流取用 reg signed [17:0] shift [0:TAPS/PHASE-1]; integer i, j; reg signed [41:0] acc; always (posedge clk or negedge rst_n) begin if (!rst_n) begin for (i 0; i TAPS/PHASE; i i 1) shift[i] 0; dout 0; end else begin // 每个时钟把输入推进移位链只保留子滤波器需要的抽头 for (i TAPS/PHASE - 1; i 0; i i - 1) shift[i] shift[i-1]; shift[0] din; // 按当前相位选一组系数做乘加 acc 0; for (j 0; j TAPS/PHASE; j j 1) acc acc shift[j] * coeff[phase_cnt][j]; dout acc[41:18]; // 取合适位段防止溢出 phase_cnt (phase_cnt PHASE-1) ? 0 : phase_cnt 1; end end endmodule这段代码里几个关键点决定了综合后能不能收敛。TAPS是原型滤波器的总系数长度PHASE是这一级的插值倍率两者一除就是每个子滤波器实际要做乘加的抽头数直接决定了那个for循环里乘法器的数量。shift只保留子滤波器需要的抽头而不保留整条移位链是省寄存器的常规做法。dout acc[41:18]这一句是在做定点截断位段选窄了会溢出、选宽了下一级位宽又要跟着涨这里要和后面调制器的输入位宽对齐着定。注意多相结构的相位计数器phase_cnt在复位后一定要从0开始否则第一级输出的样本顺序会整体错位后面调制器一路算下去全是错的FFT出来的频谱看起来像噪声。3.2 五阶全前馈一位量化调制器调制器是整个系统的核心文档在对比了多种结构之后选了单环、一位量化、五阶、全前馈。这个组合的取舍是单环结构比级联结构省心不怕级间失配一位量化省掉了多位D/A的失配校准但代价是量化噪声大、对环路稳定性更敏感五阶是为了让噪声整形的斜率足够压住带内噪声全前馈则是把每一级积分器的输出都通过系数a_i直接送进求和点输入前馈支路的存在让每一级积分器只处理噪声而不处理信号摆幅大大减小动态范围更好。行为级里我一般会先扫一遍前馈系数确认环路在满量程输入下不会发散% 一位五阶全前馈 Sigma-Delta 调制器行为级模型结构示意 N 5; fs 25.6e6; ts 1/fs; Npts 2^16; % 前馈系数从稳定性与时域仿真中扫出的一组典型值 a [0.31 0.36 0.52 0.72 1.00]; x zeros(1, N); % 五级积分器状态 state zeros(1, N); for k 1:Npts u 0.5*sin(2*pi*5e3*k*ts); % 5kHz 测试音-6dB % 全前馈求和每级积分器输出按 a(i) 加权进求和点再叠加输入 v u - y_prev; for i 1:N v v a(i) * state(i); end % 五级积分器串联更新 for i 1:N in_i (i 1) ? v : state(i-1) - y_prev; state(i) state(i) in_i; end y_prev sign(v); % 一位量化输出 ±1 dout(k) y_prev; end这段模型里最关键的是a这组前馈系数。系数的整体缩放不改变稳定性真正影响的是它们之间的相对比例——前几级的系数太小前馈就形同虚设调制器退化成一个普通的高阶环路摆幅一大就发散系数太大求和点又容易溢出。文档里的系数是配合MATLAB仿真整定出来的实际做RTL的时候还要把它们量化成定点量化位宽和系数量化误差都会影响最终的噪声整形曲线这一步是行为级到RTL之间最容易翻车的地方。RTL层的调制器结构和行为级一一对应只是把浮点运算换成定点、把理想积分器换成带饱和的累加器。全前馈的求和点要在Verilog里显式展开成一个加法树// 一位量化五阶全前馈调制器结构示意 module sd_modulator #( parameter W 28 // 积分器位宽留够量化残差余量 )( input wire clk, input wire rst_n, input wire signed [17:0] din, // 来自插值滤波器的 18 位输入 output reg dout // 一位码流 ); reg signed [W-1:0] int1, int2, int3, int4, int5; reg signed [W-1:0] sum; reg signed [W-1:0] fb; integer k; // 前馈系数用移位和加法近似避免综合出通用乘法器 localparam signed [W-1:0] A1 10sd80; // 对应 0.31 附近的定点缩放 localparam signed [W-1:0] A2 10sd92; localparam signed [W-1:0] A3 10sd133; localparam signed [W-1:0] A4 10sd184; always (posedge clk or negedge rst_n) begin if (!rst_n) begin int1 0; int2 0; int3 0; int4 0; int5 0; dout 0; end else begin // 五位反馈由一位输出决定正负反馈量 fb (dout) ? - (1 (W-4)) : (1 (W-4)); // 全前馈求和 sum din - fb; sum sum ((int1 * A1) 8); sum sum ((int2 * A2) 8); sum sum ((int3 * A3) 8); sum sum ((int4 * A4) 8); // 五级积分器依次更新带饱和防止溢出 int1 sat(int1 sum); int2 sat(int2 int1); int3 sat(int3 int2); int4 sat(int4 int3); int5 sat(int5 int4); // 一位量化只有符号位有意义 dout (sum 0); end end endmodule几点说明。W28这个位宽是够不够用的下限五阶积分器串联起来中间状态的摆幅会越积越大位宽给窄了就会发生溢出一旦溢出整个环路就锁死不回来所以每级累加后都要走一遍饱和逻辑sat()宁可饱和也不能回绕。前馈系数用(int * A) 8这种移位加乘的形式近似是为了避免综合工具在0.35μm这种老工艺上硬搭多少位乘法器出来。最后的量化dout (sum 0)只取符号位这就是“一位量化”的字面含义。3.3 Verilog综合与自动布局布线的注意点数字部分走的是标准综合加自动布局布线流程工艺是0.35μm。这条流程本身不复杂坑主要在约束上。插值和调制两部分共用25.6MHz时钟时序约束里要把时钟周期、输入输出延迟、驱动强度都写清楚否则综合出来的网表要么面积虚高要么上布局布线后时序违例一大堆。我一般的做法是先给一个稍微紧一点的时钟约束让综合工具优先满足关键路径如果面积能接受就再加裕量。调制器那条反馈环路是最容易出现关键路径的因为一位输出的反馈要在同一个周期里参与下一级的求和组合逻辑一长就要插寄存器。一旦反馈环被打断调制器的行为就完全变了所以关键路径不能盲目流水化得和行为级对照着看。4. 模拟链路拆解开关电容滤波器、两相时钟、基准与运放的电路取舍数字输出这一位码流最终要变成一个能用的模拟电压全靠模拟这部分。文档里的模拟子模块有五个单双端转换电路、1位D/A、两相不交叠时钟、基准及偏置电路、运算放大器加上六阶Bessel低通的开关电容实现。这部分是手绘版图性能和匹配全靠设计师对电路的把控也是整个设计里最没法靠仿真兜底的地方。4.1 单双端转换与1位D/A调制器输出的一位码流是单端的数字电平模拟低通是差分输入的开关电容结构中间需要一个单端转双端的电路把一路信号拆成一对互补的差分信号。1位D/A本身很简单——把一位数字码流按正负参考电压映射成两路模拟电平难点在于开关本身的非理想导通电阻、电荷注入、时钟馈通这些效应会直接影响最终输出精度。1位D/A的好处也在于此一位量化的D/A只有两个输出电平不存在多位D/A那种元素失配问题只要基准电压准、两个电平对称线性度就没什么可担心的。代价是一位码流里带的高频噪声全要交给后面的模拟低通来处理低通的抑制能力直接决定了最终SNR。4.2 两相不交叠时钟的电路实现开关电容电路里开关的导通时序决定了电荷转移的精度时钟相位一交叠采样电容和积分电容之间就会形成直通路径电荷在图里乱跑。文档里有专门的两相不交叠时钟模块作用就是保证采样相和放大相之间有一个明确的不交叠区间让开关彻底关断之后另一个才打开。不交叠时间不是越短越好。太短开关还没完全关断另一相就打开了等于没做不交叠太长每次电荷转移的时间被压缩运放的建立时间不够输出摆不到最终值就进入下一相。这个时间的典型值在纳秒量级要靠反相器链的延时和几个与非门搭出来具体结构因工艺而异文档里给的是基于0.35μm门延时的取值。提示不交叠时钟的延时链一定要在工艺角下都扫一遍fast角下延时缩短可能不足以把开关完全关断slow角下延时拉长又可能影响运放建立两头都要留余量。4.3 带隙基准和偏置电路整个DAC的精度上限被基准电压锁死这个道理大家都懂但真正做的时候很容易把注意力全放在数字和低通上基准反而成了短板。文档里的基准及偏置电路要同时给1位D/A提供参考电平、给运放提供偏置电流这个模块的温漂和电源抑制比直接映射到DAC的输出精度上。带隙基准的常规结构是Brokaw或者Banba一类核心是用正温度系数和负温度系数两个量相互抵消抵消点附近的输出对温度不敏感。0.35μm工艺下电阻的温漂和运放的失调是主要误差源文档的做法是把运放的失调用大尺寸的输入对管和chopping压下去电阻比用大面积版图匹配。4.4 运算放大器和六阶Bessel开关电容低通模拟低通的实现方式是开关电容六阶Bessel被拆成三个二阶节每节含一个运放、两个采样电容和两个积分电容。电容比决定每一节的极点和Q值运放的增益带宽积和建立时间决定每一节能不能在时钟相内完成电荷转移。运放的设计要求和低通的阶数直接挂钩。六阶Bessel的群时延平坦但六个极点都压在带内就很考验运放的相位裕度每一节的Q值如果算错节间耦合会让整条频响偏离设计曲线。文档里运放的指标是围绕建立时间反推的采样相结束时输出要稳定到一个LSB对应的精度一个LSB对应18位等于要求建立误差小于2^-18从这一点倒推增益带宽积和相位裕度运放的设计空间就很明确了。六阶低通截止频率的选择也要配合128倍过采样。截止频率放在信号带宽稍上方既要保得住100kHz以内的平坦度又要在200kHz附近就开始明显衰减把调制器推到高处的量化噪声压下来。Bessel的通带边缘不陡所以截止频率不能贴得太近否则带内幅度就开始滚降影响信号。5. 版图与混合仿真排查从波形异常反推问题根源设计做完是一回事能不能跑出正确的波形是另一回事。文档第四章整章讲版图模拟部分手动绘制、数字部分综合后自动布局布线两个部分各自做完之后拼到一起做整体版图和混合信号仿真。这一段是整个项目里最容易出问题、也最需要靠排查经验顶着走的地方。5.1 数字后端的综合与自动布局布线数字部分包含插值滤波器和调制器先用0.35μm工艺库综合成门级网表再走自动布局布线。自动流程本身能跑通不难难的是综合出来的时序和面积都划算。插值滤波器的多相结构里乘法器多综合工具默认会优先满足时序面积容易虚高调制器是反馈环综合工具如果强行优化组合逻辑路径反而会把反馈需要的短路径拉长。我一般会分模块综合插值和调制各给一套约束插值部分偏时序、调制部分偏面积和环路完整最后顶层再拼。综合完的网表要先做静态时序分析和形式验证确认门级网表的功能和RTL一致再进布局布线这一步不然布局布线出来的版图有问题就无从查起。5.2 模拟版图的手工匹配与对称模拟版图手绘的核心是匹配特别是1位D/A、基准、运放输入对管、以及低通里的电容阵列。差分结构的两个分支在版图上必须严格对称不然寄生的失配会直接变成失调和偶次谐波。开关电容低通的电容阵列还要按质心对称排布电容值靠单元电容拼出比值比值精度就是滤波器极点的精度。寄生对模拟版图的影响也很容易翻车。走线的电阻和电容会改变开关的导通特性和运放的反馈系数尤其是时钟线寄生电容大了驱动能力不够不交叠时间就会被拉偏前面数字部分做得再好也白搭。所以模拟版图上时钟线一般要优先走粗、走短和其他敏感信号保持距离。5.3 混合信号仿真的流程和判读版图做完之后要做混合信号仿真数字部分直接从版图提取网表或者用门级网表模拟部分用晶体管级电路两者接在同一个仿真平台上跑同一段输入。这一步的目的是看数字和模拟拼在一起之后整条链路还能不能达到行为级那条SNR基线。混合仿真的输入一般选几个典型的频点和幅度-6dB满量程附近的低频正弦看SNR小信号看线性度接近满量程的看稳定性。文档最终报的98.26dB就是在-6dB输入下混仿出来的结果。混仿出来的波形先看时域上有没有明显的毛刺或者跳变再对整段输出做FFT看带内噪声底行为级、RTL级、电路级三条曲线往一起对差异大的地方就是问题所在。5.4 常见问题排查现象一ADC输出频谱里在50Hz及其倍数处出现明显毛刺。原因数字部分的时钟网络和模拟的基准、运放共用电源版图上没有做好电源分割和去耦时钟的谐波通过电源耦合进了模拟链路。解决数字和模拟用独立的电源网络在片内用大电容去耦时钟驱动器的电源单独走线并从片外单独供电混仿前先把电源网络的寄生提出来一起仿真。现象二-6dB输入时SNR是98.26dB回到-3dB输入时突然跌到80dB以下甚至出现频谱乱码。原因五阶调制器在大信号输入下进入了不稳定区状态积分器饱和后没有及时恢复反馈环锁在一个错误状态出不来了。解决在前馈系数整定的时候就要扫满量程附近的输入幅度把稳定输入范围往上留至少3dB余量RTL里的积分器饱和逻辑要和行为级模型的饱和行为对齐不能只对典型输入仿真。现象三行为级仿真SNR到110dB以上RTL仿真只有90dB出头电路级再降一截。原因前馈系数从浮点量化到定点时位宽不够或者积分器位宽W给小了中间状态溢出被饱和逻辑截掉。这种衰减一层一层叠下来最后就掉到了90dB的水平。解决先把RTL仿真的输入输出和MATLAB行为级逐点比对找出第一个出现差异的样本就能定位到是哪一级的量化或饱和出了问题。位宽宁宽勿窄多出来的位宽在综合时会被工具优化掉一部分但给小了没法补。现象四模拟低通频响在200kHz附近出现一个不该有的尖峰带内SNR被拖垮。原因六阶Bessel拆三个二阶节时节间耦合的Q值算错某一节的极点位置偏了节间相互作用把频响顶出一个峰。解决先把每一节的传递函数单独仿真对照理想Bessel曲线再逐节串起来仿真确认单节没问题再看节间版图上电容阵列的比值精度也要复查电容失配同样会把极点位置带偏。现象五混仿能跑通结果也对但版图后仿的建立时间比前仿长很多输出在采样相结束前没稳定。原因版图提取的寄生电容加在运放输出节点和开关电容之间把运放的负载加重了。解决前仿阶段就要按经验给运放输出挂一个估计的寄生电容做裕量仿真版图完成后先做寄生提取再混仿如果建立时间不够要么加运放的电流要么重排版图降低输出节点的寄生。6. 二次开发改带宽、提精度、换工艺的实操路线拿到这份设计文档想在上面改最常见的三个方向是换带宽、提精度、换工艺。三个方向动的东西不一样但都绕不开一个原则系统级、RTL级、电路级、版图级这四层必须一起动只改一层一定会在后面某一层翻车。改带宽是最直接的。带宽从100kHz提到200kHzOSR128对应的时钟就要从25.6MHz翻到51.2MHz插值滤波器和调制器的工作频率一起上0.35μm工艺下数字部分的时序收敛会立刻变紧综合出来的面积和功耗都得重新评估模拟低通的截止频率也要跟着上移六阶Bessel的三个二阶节电容比重算运放的增益带宽积要重新定。我一般的顺序是先在行为级把新的OSR和带宽跑通确认调制器在新时钟下仍然稳定再往下推RTL和电路。提精度比改带宽更麻烦。从18位往20位走要么加OSR、要么加调制器阶数、要么从一位量化换成多位量化三条路各有各的代价。加OSR受限于时钟频率和功耗加阶数受限于环路稳定性六阶、七阶前馈的系数整定会变得很敏感多位量化则要引入动态元素匹配或者数据加权平均这类校准电路模拟侧的1位D/A也要换成多位D/A。我一般先看OSR还有没有余量没有余量再动阶数多位量化是最后才考虑的因为它牵动的模拟电路太多。换工艺是另一类问题。0.35μm换成0.18μm或者更先进的节点数字部分综合会自动受益但模拟部分几乎全部要重做运放的增益带宽积、开关的导通电阻、电容的单位面积容值、基准的温漂全部随工艺变。开关电容低通的电容比值原则上可以保持但单位电容的面积要按新工艺重新算版图的匹配规则、寄生提取的模型也全要跟着换。下面这张表是我自己在做这类二次开发时会先填一遍的把每个改动方向牵扯到的模块列清楚避免改到一半发现漏了某个下游改动方向数字侧动作模拟侧动作主要风险点带宽翻倍时钟翻倍、插值系数重算低通截止频率上移、运放GBW重定0.35μm下数字时序收敛精度2位OSR或阶数增加、量化位宽检查1位D/A可能需要改多位高阶环路稳定性、多位失配校准换工艺节点综合库替换、时序约束重写运放/基准/电容比值全部重定模拟版图匹配规则变化、寄生模型更新最后验证方法上我的习惯是每一层改完都往回对一遍基线RTL改完先对行为级电路改完先对RTL版图改完先对电路三层都通过再走混合仿真。中间任何一层跳过对照直接看最终SNR出问题的时候根本分不清是哪一层掉的。这个项目我最早做的时候图省事改完RTL直接跑去混仿结果SNR掉了十几dB查了整整两天才定位到是前馈系数量化位宽给窄了——从那以后我每次改系数都强制先跑一遍RTL和行为级的逐点比对确认前一万个样本完全一致再往下走。希望这些踩过的坑能帮到你。本文还有配套的精品资源点击获取