1. 项目概述:在SMIC 0.18μm工艺上挑战12bit SAR ADC
去年备赛期间,我在SMIC 0.18μm这个已经不算先进的工艺节点上,完成了一个让自己颇为自豪的设计——有效位数(ENOB)达到11.85bit的12bit逐次逼近型(SAR)ADC。这个全差分结构的ADC工作在3.3V供电下,输入范围覆盖-3.3V至+3.3V,采样率达到200KS/s,而功耗仅416μW。对于采用传统工艺的中精度ADC设计来说,这些指标已经相当不错。
SAR ADC因其结构简单、功耗低的优势,一直是中精度(8-14bit)应用的主流选择。但在实际设计中,从10bit提升到12bit绝非简单的位数扩展,而是面临着电容失配、比较器噪声、开关非线性等一系列挑战。特别是在较老的工艺节点上,这些非理想效应会被放大,需要精心设计和大量调试才能达到目标精度。
2. 电容阵列设计与匹配优化
2.1 分段式电容阵列结构选择
在12bit SAR ADC中,电容阵列的设计是决定精度的最关键因素。纯二进制权重电容阵列虽然结构简单,但对于12bit分辨率来说,最大与最小电容比值达到2048:1,这会带来严重的面积和匹配性问题。经过多次仿真比较,我最终选择了5+7的分段式结构——高5位采用二进制权重,低7位采用温度计码。
这种混合结构的优势很明显:
- 面积效率:相比纯二进制结构节省约38%的面积
- 匹配性:温度计码部分的DNL性能更好
- 线性度:蒙特卡洛仿真显示DNL可控制在±0.5LSB以内
单位电容(Cu)的选择也经过仔细权衡。1.2fF的取值平衡了kT/C噪声和匹配性要求,在SMIC 0.18μm工艺下也能获得较好的匹配特性。
2.2 版图匹配技巧
电容阵列的版图实现同样关键。我采用了以下方法来保证匹配性:
- 对称叉指结构:所有电容的顶板走线采用对称叉指布局,确保寄生参数匹配
- 共质心排列:底板走线采用共质心结构,进一步降低梯度误差影响
- 虚拟电容:阵列周围放置虚拟电容(dummy),减少边缘效应
- 屏蔽保护:敏感节点周围添加屏蔽层,防止噪声耦合
实测数据显示,这些措施使得电容阵列的3σ失配控制在0.05%以内,完全满足12bit精度的要求。
3. 动态比较器设计与噪声优化
3.1 比较器架构选择
动态比较器采用rail-to-rail输入结构,能够在全输入范围内保持良好的性能。这种结构在复位相位将输出清零,在比较相位根据输入差值决定输出状态,具有功耗低、速度快的优点。
比较器的关键参数包括:
- 输入失调电压:<100μV
- 噪声:<10μV RMS
- 延迟时间:<5ns
3.2 噪声抑制技巧
在噪声优化方面,我采用了几个有效的措施:
- 滞回电压设置:在VerilogA模型中设置10μV的滞回电压,略高于实测的8μV峰峰值噪声,有效避免了噪声引起的误触发
- 退化电阻:在预放大级串联200Ω的退化电阻(degeneration),虽然牺牲了约5%的速度,但带来了30%的噪声抑制效果
- 电源隔离:比较器部分采用独立的电源走线,防止数字噪声耦合
这些措施的综合效果使得比较器噪声不再是限制ADC精度的瓶颈。
4. 采样开关的非线性补偿
4.1 传统自举开关的问题
在高压(3.3V)应用中,传统的自举开关(bootstrapped switch)存在栅氧可靠性问题,可能导致漏电甚至器件损坏。此外,电荷注入和时钟馈通效应也会引入非线性误差。
4.2 分段栅压控制技术
我采用了一种改进的分段栅压控制技术来优化采样开关性能:
- 采样阶段:施加足够高的栅压确保低导通电阻
- 保持阶段:采用互补栅压抵消注入电荷
- 过渡阶段:精细控制栅压变化斜率,减小瞬态效应
这种技术的实现依赖于精确的开关模型参数设置,特别是PHI参数对电荷抵消效果影响很大。实测显示,该技术使SFDR提升了6dB,高频输入时的THD从-78dBc改善到-84dBc。
5. 仿真与调试经验分享
5.1 解决瞬态仿真收敛问题
在初期仿真中,经常遇到瞬态仿真不收敛的问题。经过分析发现,主要原因是DAC切换时产生的glitch导致数值计算困难。通过调整Spectre仿真器选项解决了这个问题:
spectre复制options captab=1 reltol=1e-6
+ gmin=1e-15 gmindc=1e-14
这些设置提高了仿真精度,特别是captab选项能更好地处理开关电容网络的电荷守恒。
5.2 高效的蒙特卡洛仿真方法
完整的蒙特卡洛仿真一次需要12小时以上,严重拖慢设计迭代速度。我开发了一种分段仿真方法:
- 对高8位进行完整的蒙特卡洛仿真
- 对低4位直接添加高斯分布噪声
- 综合两部分结果进行统计分析
这种方法将仿真时间缩短到2小时以内,而引入的误差控制在0.02LSB以内,大大提高了设计效率。
6. 测试方法与结果分析
6.1 自动化测试流程
为了全面评估ADC性能,我编写了Python自动化测试脚本,主要功能包括:
- 自动扫频测试
- FFT分析计算ENOB
- INL/DNL测量
- 噪声分析
核心测试代码如下:
python复制for freq in np.logspace(3,5,20):
adc.capture(1024)
fft_result = np.fft.fft(samples)
enob = (np.square(fft_result).sum() - 1)/(2*np.var(noise))
print(f"{freq/1e3:.1f}kHz ENOB:{enob:.2f}bit")
6.2 实测性能指标
最终测试结果显示:
- ENOB:11.85bit @200kS/s
- DNL:±0.4LSB
- INL:±1.2LSB
- SFDR:84dB
- 功耗:416μW
这些指标完全达到了12bit ADC的设计要求,特别是在较老的SMIC 0.18μm工艺上实现,更显得难能可贵。
7. 设计经验与教训总结
经过这个项目,我深刻体会到高精度SAR ADC设计中的几个关键点:
- 系统规划很重要:在开始设计前,必须明确各模块的噪声和精度预算,留出足够的设计余量
- 版图匹配是基础:再好的电路设计,如果版图匹配不好,最终性能也会大打折扣
- 仿真要讲究方法:合理的仿真策略可以大幅提高设计效率
- 测试要全面:不能只看静态指标,动态性能同样重要
这个项目让我对模拟电路设计有了更深的理解,那些熬夜调试的日子、抓狂的仿真不收敛问题、诡异的谐波现象,最终都化作了宝贵的经验。在SMIC 0.18μm工艺上实现11.85bit的ENOB,证明即使在不太先进的工艺节点上,通过精心设计和不断优化,也能做出不错的性能。
