☰
SAR ADC电容阵列单调性约束:最小单位电容取值下限的失配推导与仿真验证
2026/10/27 18:07:38 网站建设 项目流程

做一版12位SAR ADC的时候,我曾在单位电容取值上栽过跟头。当时为了压低切换功耗,把最小单位电容Cu压到2fF附近,前仿一切正常,后仿加失配一跑,某些码字直接出现缺失码,SAR收敛像抽风一样来回跳。查到最后才意识到,问题出在电容阵列切换的单调性被破坏了。单调性用一句话概括:数字码增大的时候,电容DAC输出的模拟电平不能出现反向跳变。这听起来像常识,却是实打实会卡死最小单位电容取值下限的硬约束——你不可能为了面积和功耗把Cu无限缩小,一旦失配越过阈值,最先崩掉的就是单调性。这篇文章就围绕这条约束,把失效现象、失配模型、数值推演到仿真验证完整捋一遍,给正在做SAR ADC或准备做CDAC选型的工程师一个可复用的判断框架。

1. 单调性失效的现场:后仿里那些“跳来跳去”的码

1.1 单调性在SAR CDAC里到底指什么

先明确概念。对一个理想的N位二进制加权电容阵列,数字码从D增大到D+1时,比较器输入端看到的电压应该严格增加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是工艺相关的失配系数,单位是%·μm,A是电容面积。意思是,面积越大,单位电容的相对失配越小。比如某工艺的MIM电容AC约1%·μm,1μm²电容的相对失配就是1%,4μm²就是0.5%。

不同电容类型的失配系数差不少。我接触过的工艺里,MIM电容一般在0.5%~1%·μm,MOM电容大概在1%~2%·μm,poly-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位,Ctot=4096×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最小值估算(AC=1%·μm,ρ=2fF/μm²)
8约2.2%约0.4fF
10约1.1%约1.7fF
12约0.37%约14.6fF
14约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~100fF
0.13μmMIM / MOM2~4fF/μm²0.8%~1.5%·μm10~50fF
65nmMOM / MIM5~7fF/μm²1%~2%·μm5~30fF
40nmMOM7~10fF/μm²1.5%~3%·μm3~15fF

先进工艺的MOM电容密度更高,但失配系数不一定更好,因为金属厚度和间距控制波动比例更大。所以很多先进工艺的SAR ADC反而会用MIM层来做关键高位,MOM只做低位或辅助。

5.2 面积和功耗代价到底有多大

单位电容下限提高之后,代价是实打实的。面积方面,Cdac总电容等于2^N×Cu,Cu翻倍,阵列面积就翻倍。功耗方面,每次切换消耗的电荷量约等于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整体性能的地基。与其在流片后痛苦地找缺失码、调权重,不如在设计初期老老实实按失配模型把最小单位电容算清楚,再留足裕量。电容阵列大一点,后仿好一点,这个交换在大多数项目里都值得。

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

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

立即咨询