SAR ADC电容阵列单调性约束:最小单位电容取值下限的失配推导与仿真验证
发布时间:2026/10/27 18:07:43 锦皓数字建站

做一版12位SAR ADC的时候我曾在单位电容取值上栽过跟头。当时为了压低切换功耗把最小单位电容Cu压到2fF附近前仿一切正常后仿加失配一跑某些码字直接出现缺失码SAR收敛像抽风一样来回跳。查到最后才意识到问题出在电容阵列切换的单调性被破坏了。单调性用一句话概括数字码增大的时候电容DAC输出的模拟电平不能出现反向跳变。这听起来像常识却是实打实会卡死最小单位电容取值下限的硬约束——你不可能为了面积和功耗把Cu无限缩小一旦失配越过阈值最先崩掉的就是单调性。这篇文章就围绕这条约束把失效现象、失配模型、数值推演到仿真验证完整捋一遍给正在做SAR ADC或准备做CDAC选型的工程师一个可复用的判断框架。1. 单调性失效的现场后仿里那些“跳来跳去”的码1.1 单调性在SAR CDAC里到底指什么先明确概念。对一个理想的N位二进制加权电容阵列数字码从D增大到D1时比较器输入端看到的电压应该严格增加1个LSB对应的量整个传递曲线是一条单调上升的楼梯。单调性要求就是不允许出现“某一个台阶倒挂”或“台阶消失”的情况。这个要求看起来稀松平常但在实际电路里非常脆弱。电容阵列不是理想器件每个单位电容都有随机失配制造出来之后二进制权重的比例关系会偏离理想值。偏离不大时码字之间只是间隔不均匀线性度变差偏离到一定程度某个码对应的台阶会比相邻台阶还小甚至反向这时候传递曲线就不是单调的了。说得再直白一点理想情况下码值增加意味着输入阈值增加比较器能可靠判定“输入信号落在哪一个区间”。如果某个台阶倒挂输入信号可能同时属于两个相邻区间的判断SAR逻辑就糊涂了。1.2 非单调切换的典型表现缺失码、DNL尖峰与频谱杂散我在后仿里看到的第一个现象是缺失码。跑完一个斜坡输入之后把输出码统计出来发现码值256附近直接少了两个码码值512附近又出现一个尖峰。看DNL曲线更明显某些码的DNL超过1.2LSB这已经踩过“无缺失码”的红线了。要知道DNL超过1LSB不一定必然缺失码但超过0.5LSB已经足以让整个系统的有效位数明显下降。再观察FFT频谱SFDR掉了差不多12dB因为非单调点本质上是一种强烈的非线性失真会在输出频谱里形成很高的谐波和杂散。做系统的人看到这个结果第一反应往往是怀疑比较器噪声或者参考源不稳很容易把真正的问题——电容阵列切换单调性——漏过去。1.3 为什么SAR算法比流水线更怕非单调SAR的逐次逼近本质是一个二分搜索过程先比较最高位根据结果确定输入落在上半还是下半然后在这个区间里继续二分。这个过程的每一步都假设比较器能正确判断“目标值在当前区间的哪一半”。如果电容阵列在某个切换点出现非单调就相当于二分搜索时拿到一个相反的“大了/小了”的答案。更麻烦的是这种错误不是一次性的它会污染后续所有位的判断最终得到的码值可能偏离真实值很多。SAR没有像流水线那样靠冗余级和数字校正来修复一旦某一位的判决被非单调带偏后面再怎么试都回不到正确路径。可以这么比喻猜数字游戏里你问对方“是大了还是小了”对方偶尔答反了一次你接下来所有的猜测都会偏向错误方向而且你完全不知道是哪一步错的。SAR算法对单调性的依赖就是这么强所以设计CDAC时单调性必须被当作一个预先保证的硬指标而不是侥幸指望它在仿真里碰巧成立。2. 失配模型是这条约束的出发点2.1 单位电容越小失配越“狰狞”理解单调性约束得先回到失配本身。制造过程中光刻的尺寸波动、介质层厚度的起伏、刻蚀的负载效应都会让电容的实际值偏离设计值。关键点在于这些偏差里很大一部分是随机涨落没办法通过版图上的系统匹配完全消除只能靠增大面积来“平均”掉。单位电容的面积越小随机涨落相对于电容本身的占比就越高。举个例子一个1fF的电容边缘刻蚀偏差可能改变它几个百分点一个100fF的电容同样几纳米的边缘偏差只改变千分之几。所以直观结论是想让失配小就得把单位电容做大。但做大的代价是面积和功耗都涨设计就成了拔河。另外还有一个容易被忽略的效应边缘效应在小电容里占比高电容值不再严格等于面积乘密度周围走线、邻近金属、dummy摆放都会明显影响它。这也解释了为什么很多工艺里小尺寸电容的失配实测数据比理想平方根模型还差一些。2.2 Pelgrom模型的工程用法对付随机失配工程上最常用的是Pelgrom模型。它的核心形式很简单两个相同器件的差值标准差与器件面积的平方根成反比。对电容来说可以写成[ \sigma(\Delta C/C) \frac{A_C}{\sqrt{A}} ]其中AC是工艺相关的失配系数单位是%·μmA是电容面积。意思是面积越大单位电容的相对失配越小。比如某工艺的MIM电容AC约1%·μm1μm²电容的相对失配就是1%4μm²就是0.5%。不同电容类型的失配系数差不少。我接触过的工艺里MIM电容一般在0.5%~1%·μmMOM电容大概在1%~2%·μmpoly-poly电容有机会做到0.5%·μm以下。具体数值一定要以PDK提供的mismatch模型为准不要照抄别人的参数。很多PDK会在statistics block里直接给出mismatch模型仿真时开Monte Carlo就能用。2.3 失配到跳变的传递路径有了单位电容的失配标准差下一步要算出“切换一个位时输出跳变到底会偏多少”。假设单位电容设计值为Cu标准差为σC。M个相同的单位电容并联成一个权重电容这个组合电容的标准差就是√M乘以σC因为独立随机变量求和方差是线性累加的。例如MSB权重是2048个Cu并联它的失配标准差就是√2048倍的单电容标准差。CDAC切换某个位时输出端产生的电压变化量近似等于切换电容的权重除以总电容再乘以参考电压。权重电容的失配会直接变成跳变误差。最坏情况往往不是切换一个小权重位而是切换一个接近半阵列的权重——这时有大量单位电容同时参与变化绝对误差最大而理想跳变幅度本身又在变小因为权重接近一半时下一位能覆盖的范围很小。换句话说半阵列翻转附近是最容易踩穿单调性红线的地方。3. 从单调性要求反推最小单位电容3.1 DNL约束与“单调性约束”的关系严格讲传递曲线无缺失码的条件是DNL小于1LSB。但工程上很少卡在这个极限值因为DNL达到0.8LSB时温度漂一下、电源纹波来一下设计余量就没了。我习惯把目标定在DNL小于0.5LSB这个量级下传递曲线基本可以认为是严格单调的SAR算法的收敛也有保障。所以单调性验证等效为在所有码转换点实测的DNL都不超过0.5LSB。那怎么从失配模型推出单位电容下限方法就是把最坏情况的失配误差表达式写出来让它小于0.5LSB。3.2 12位SAR的推导实例设一个N位全二进制加权CDAC总电容Ctot 2^N × Cu。最危险的切换点是半阵列翻转比如从011...111切到100...000。这次切换涉及的权重电容从“约半阵列减去一个Cu”变成“约半阵列”可以近似看成有Ctot/2个单位电容一起改变。这个组合电容的失配标准差是[ \sigma_{half} \sqrt{C_{tot}/2} \times \sigma_C ]它造成的输出跳变误差换算成LSB单位的话分母是单个Cu对应的电压增量表达式为[ \sigma_{DNL} \frac{\sqrt{C_{tot}/2} \times \sigma_C}{C_{tot}/2 \times C_u} ]用3σ作为最坏偏差要求它小于0.5可以得到化简后的约束[ 3 \times \sqrt{C_{tot}/2} \times \sigma_C \le 0.5 \times C_u ]代入12位Ctot4096×Cu则√(Ctot/2)√2048≈45.25。于是[ \sigma_C / C_u \le \frac{0.5}{3 \times 45.25} \approx 0.37% ]也就是说单位电容的相对失配标准差必须压到0.37%以下12位SAR的DNL才有把握控制在0.5LSB内。如果工艺的AC是1%·μm那单位电容面积至少需要(1/0.37)²≈7.3μm²假设电容密度是2fF/μm²最小单位电容就是14.6fF左右。我实际设计时这个数还会再往上乘。按不同位数做一个简单估算趋势非常直观位数NσC/Cu上限3σ约束Cu最小值估算AC1%·μmρ2fF/μm²8约2.2%约0.4fF10约1.1%约1.7fF12约0.37%约14.6fF14约0.19%约55fF位数越高单位电容下限涨得飞快。这也是为什么12位以上的SAR面积大头往往就是电容阵列。3.3 裕量该留多少温度、老化与应力上面的推导建立在“室温、刚出厂、无应力”的理想前提下实际产品不能这么算。温度变化会引起介电常数和边缘场变化封装应力会通过衬底和金属层传递到电容阵列老化会让氧化层界面态漂移。这些效应都会让失配比模型预测的略差。所以我在计算值上至少再留一倍裕量也就是按0.25LSB来约束DNL。还是12位那个例子σC/Cu上限会从0.37%降到约0.185%单位电容下限变成60fF左右。如果是消费电子这类对面积敏感的芯片可以适当放松到1.5倍裕量但再怎么省也别低于无余量的理论值。芯片不差那几百平方微米后仿崩一次流片费用就全回来了。4. 仿真验证流程别等流片才知道单调性崩了4.1 Monte Carlo仿真怎么配置才有效很多设计跑完前仿就直接往后端走这很危险。电容失配是随机量必须用Monte Carlo仿真去覆盖统计分布。配置的时候注意三个点。第一要确保PDK的mismatch模型被包含进来。通常在Cadence ADE里选statistics模型文件里需要include mismatch相关的section而不是只跑process corners。只跑tt/ff/ss是看不到失配的。第二样本数量要够。我见过很多人只跑30个样本跑完看到一条DNL曲线合格就觉得没事。失配分布的尾巴往往在50次之外才出现30个样本根本覆盖不到。我的习惯是至少跑200次关键的MSB权重组合至少跑500次。第三仿真要带实际逻辑闭环。最稳妥的方式是跑完整的SAR转换流程比较器用带失调和噪声的模型逐次逼近逻辑真实执行然后导出每一步的CDAC输出。这样验证的是“整个系统在失配下的行为”而不是单纯看静态传递曲线。4.2 提取切换跳变的两个实用办法第一个办法是静态提取DNL/INL。给CDAC输入一个慢速斜坡让比较器加SAR逻辑正常转换最后统计每个码出现的次数画出传递曲线直接看有没有缺失码、DNL有没有超过0.5LSB。这个方法实现简单问题在于如果某些码出现概率极低单次斜坡不一定能覆盖到需要多跑几次或加抖动。第二个办法更直接单独提取每一个bit切换时刻的输出跳变。写一个脚本在SAR转换进行到第k位时记录比较器输入端的电压变化量和理想值对比。把所有位的跳变误差按3σ画出来一眼就能看出哪个位接近红线。这个方法对定位“到底哪一位在破坏单调性”特别有用我在定位后仿缺失码时就是靠它找出的问题。4.3 仿真中最容易犯的错先说最常见的一个前仿用理想电容后仿不加失配等于没验证。这属于流程问题但确实很多人会漏。再一个是寄生提取之后电容阵列的比例全变了。半阵列翻转的切换误差在加了RC寄生之后可能明显变大尤其是桥接电容的寄生经常把高位权重拉低。比较器失调和噪声也会吃掉单调性余量。如果比较器的失调有5mV而LSB对应的电压只有4mV等效于直接给DNL加了几个LSB的偏移。所以比较器的预算一定要在CDAC设计之初就留好否则回头调电容阵列也没用。5. 单位电容选型的现实博弈5.1 各工艺节点的单位电容参数经验值不同工艺节点适合的单位电容范围差异很大。我整理一个基于经验值的粗略参考具体还是要看PDK。工艺节点常用电容类型电容密度失配系数参考典型单位电容范围0.18μmMIM / poly-poly1~2fF/μm²0.5%~1%·μm20~100fF0.13μmMIM / MOM2~4fF/μm²0.8%~1.5%·μm10~50fF65nmMOM / MIM5~7fF/μm²1%~2%·μm5~30fF40nmMOM7~10fF/μm²1.5%~3%·μm3~15fF先进工艺的MOM电容密度更高但失配系数不一定更好因为金属厚度和间距控制波动比例更大。所以很多先进工艺的SAR ADC反而会用MIM层来做关键高位MOM只做低位或辅助。5.2 面积和功耗代价到底有多大单位电容下限提高之后代价是实打实的。面积方面Cdac总电容等于2^N×CuCu翻倍阵列面积就翻倍。功耗方面每次切换消耗的电荷量约等于Ctot×Vref²12位SAR的Cu从15fF提到60fF理论上切换功耗也涨到四倍。对电池供电的IoT芯片切换功耗往往是ADC功耗的大头所以单位电容不是越大越好而是“刚好够用再留一点余量”。这需要设计师在项目早期就把系统功耗预算和面积预算摆出来不然做到后端再发现电容阵列太大改版代价非常高。5.3 不想妥协时的替代方案如果计算出来的最小单位电容太大芯片面积和功耗都撑不住有几个工程手段可以缓解但每个都有代价。冗余电容是最常用的一招。把二进制权重改成非二进制权重比如12位数据加1位冗余权重序列变成1、1、2、4……这种结构可以让SAR搜索范围多出冗余区间能吸收相当于1个LSB的失配和比较器误差。等效地单位电容下限可以放松2倍左右代价是转换周期变长码字需要额外的映射逻辑。高位拆分也有效。把MSB电容拆成两个独立的半权重电容切换时分两步进行可以避免一次翻转半阵列时出现最坏DNL。虽然不能完全绕过失配但能把最危险点的误差摊开。还有一个方向是校准。前台校准可以在上电时测出权重误差并存在寄存器里后台校准则持续修正。但注意校准能修正增益和线性误差却救不了严重非单调的传递曲线。如果失配已经让某个台阶反向数字校准只能把它识别为一个大错误无法恢复单调搜索。所以哪怕有校准单位电容的最小值约束依旧存在只是可以放宽一些。6. 我留过的几个后手提升单调性裕量的工程技巧6.1 版图对称和dummy的“边际收益”计算值满足后版图还会把结果拉回去。电容阵列最好用common-centroid布局保证每个bit的电容对整个阵列中心对称走线尽量等长不要跨过其他敏感模块。还有一个细节是dummy。每一条边至少要加一排dummy电容有些工艺蚀刻负载影响大加两排才稳。别小看这排dummy它能显著抑制边缘电容偏差几乎免费提升匹配精度。我见过一个项目单位电容不变只是把dummy从一排加到两排DNL最大值就降了0.2LSB。6.2 高位权重拆分刚才提到的高位拆分我再展开一点。把MSB拆成两个半位切换顺序上可以先让第一个半位动作再让第二个半位动作这样单次切换涉及的电容数量减半峰值误差相应降低。代价是SAR逻辑多一个周期转换速率略降。如果想更快也可以在低位加一个小尺寸的“辅助LSB”专门用来补偿高位切换时的余量。这个方法本质上是用额外的冗余来换取单位电容下限的放松比较灵活。6.3 冗余电容与码字映射的真实定位加了冗余电容之后整体权重不再是严格的2^N进制输出码和输入阈值之间不是一一对应的需要做码字映射。很多工程师把这个当成纯数字问题其实数字逻辑本身不复杂复杂的是冗余位引入了额外的比较周期可能拖慢转换速率。还有一个容易忽略的点冗余区间不能设计得太小要覆盖失配的3σ误差否则冗余就白加了。同时建立时间要留够因为冗余位切换时比较器还要在半个周期内稳定判断。我的做法是先按第3章的公式算单位电容下限再根据冗余范围反推能放宽多少然后回到Monte Carlo里验证最坏样本。6.4 最后再分享一个小技巧实际项目里我选单位电容的时候习惯先跑一个简单的mismatch预仿真只建模电容阵列的失配不跑完整SAR逻辑。这个仿真非常快十几分钟就能把理论公式估算出来的Cu范围验证一遍。确认这个范围后再做完整Monte Carlo闭环验证。这样能省掉很多来回调参的时间。个人最深的一点体会是单调性这个指标看着简单实则是SAR ADC整体性能的地基。与其在流片后痛苦地找缺失码、调权重不如在设计初期老老实实按失配模型把最小单位电容算清楚再留足裕量。电容阵列大一点后仿好一点这个交换在大多数项目里都值得。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。