1. 项目概述
去年用SMIC18mmRF工艺完成了一款8bit 40M采样率的异步SAR ADC流片,今天把整个设计过程整理成文档分享给大家。这个项目从电路设计到最终流片测试历时半年,期间踩了不少坑,也积累了不少实战经验。整个设计包含完整的原理图、版图、仿真文件和测试电路,DRC/LVS/ANT全部通过验证,前仿ENOB达到7.94bit,后仿ENOB为7.377bit,性能完全满足入门级SAR ADC的需求。
这个项目特别适合想要学习SAR ADC设计的新手,因为:
- 提供了完整的Cadence工程文件,包含所有模块的原理图和版图
- 仿真参数已经预设好,可以直接运行
- 配套详细的设计文档和仿真步骤说明
- 包含了从电路设计到版图实现的完整流程
2. 核心模块设计解析
2.1 栅压自举开关设计
在SAR ADC中,采样开关的性能直接影响整个系统的线性度。最初我尝试使用普通的CMOS传输门作为采样开关,仿真发现THD高达10%以上。经过分析发现,普通CMOS开关的导通电阻会随输入信号电压变化,导致采样电荷分配不均匀。
解决方案是采用栅压自举开关电路,其核心原理是通过自举电容将开关管的栅源电压固定,使导通电阻保持恒定。具体实现要点:
- 自举电容值选择:通过AC仿真优化,最终选择100fF的MIM电容
- 开关管尺寸:W/L=10u/0.18u,在40M采样率下提供足够低的导通电阻
- 时钟馈通补偿:添加dummy管抵消时钟馈通效应
我编写了自动化的AC仿真脚本,可以快速评估栅压自举开关的性能:
skill复制;; 栅压自举开关AC仿真脚本
procedure(bootstrap_switch_ac_check()
set_analysis("ac")
ac_param("start_freq" 10 "stop_freq" 1e9 "num_points" 1000 "scale" "logarithmic")
set_component_value("input_dc" 0.9) ; 输入共模电压
set_component_value("vin_diff" 0.1) ; 差分输入电压
run_analysis()
plot_analysis("ac_analysis" "mag(V(gate)/V(input))")
message("AC仿真完成,检查栅极增益是否接近1")
)
2.2 Vcm-Based开关时序设计
传统SAR ADC的开关时序由时钟边沿触发,容易引入时钟馈通噪声。本项目采用基于共模电压(Vcm)的开关时序方案,具有以下优势:
- 自动抵消共模噪声
- 减少时钟馈通影响
- 降低对时钟精度的要求
关键时序参数:
- 采样周期:25ns(40MHz)
- 采样窗口:时钟上升沿前2ns
- 比较器使能延迟:3ns
时序生成Verilog代码:
verilog复制// 异步SAR ADC采样时序激励
reg clk_adc;
reg rst_n;
reg [7:0] dac_out;
initial begin
rst_n = 0;
clk_adc = 0;
#100 rst_n = 1;
forever #12.5 clk_adc = ~clk_adc; // 40M采样,周期25ns
end
2.3 差分CDAC阵列设计
采用上极板采样的差分CDAC阵列结构,主要设计考虑:
- 单位电容选择:1fF MIM电容
- 最高位电容:128fF(8bit二进制加权)
- 匹配策略:共质心布局减小工艺偏差
为简化设计流程,我开发了自动生成CDAC阵列的Skill脚本:
skill复制;; 差分CDAC阵列生成脚本
procedure(create_diff_cdac(unit_cap_val)
local( cap_p cap_n )
cap_p = create_instance("CAP_MIM" "cap_p" list(0 0) list(128*unit_cap_val))
cap_n = create_instance("CAP_MIM" "cap_n" list(0 0) list(128*unit_cap_val))
connect_net(cap_p "top" "VIN_P")
connect_net(cap_n "top" "VIN_N")
message("差分CDAC阵列生成完成!")
)
2.4 两级动态比较器设计
为满足40M采样率要求,比较器延迟必须控制在5ns以内。单级动态比较器难以满足要求,因此采用两级动态比较器结构:
第一级:
- 预放大器增益:约20dB
- 带宽:500MHz
- 功耗:50uA
第二级:
- 锁存器再生时间:<2ns
- 失调电压:<2mV
- 功耗:30uA
比较器性能验证脚本:
skill复制;; 比较器瞬态仿真脚本
procedure(comp_delay_check()
set_analysis("transient")
tran_param("stop_time" 100n "num_points" 10000)
set_component_value("vin_diff" 0.005) ; 5mV差分输入
run_analysis()
plot_analysis("tran_analysis" "V(comp_out)")
message("检查比较器输出翻转时间")
)
2.5 异步SAR逻辑设计
异步SAR逻辑相比同步方案具有速度优势,核心设计要点:
- 采用动态DFF降低功耗
- 比较器输出直接触发逐次逼近
- 内置8位寄存器存储转换结果
Verilog实现代码:
verilog复制module async_sar_logic(
input wire rst_n,
input wire comp_out,
input wire sample_en,
output reg [7:0] dac_code,
output reg sample_done
);
reg [2:0] dac_cnt;
always @(posedge comp_out or negedge rst_n) begin
if(!rst_n) begin
dac_code <= 8'h00;
dac_cnt <= 3'h0;
sample_done <= 1'b0;
end else begin
if(sample_en && !sample_done) begin
dac_code[dac_cnt] <= comp_out ? 1'b1 : 1'b0;
dac_cnt <= dac_cnt + 1'b1;
sample_done <= (dac_cnt == 3'h7) ? 1'b1 : 1'b0;
end
end
end
endmodule
3. 仿真与验证
3.1 前仿结果
使用Cadence ADE进行仿真,关键性能指标:
| 参数 | 值 | 备注 |
|---|---|---|
| 采样率 | 40MHz | 设计目标 |
| ENOB | 7.94bit | 新版ADE优化后 |
| SNDR | 49.2dB | 输入频率1MHz |
| SFDR | 55.6dB | 输入频率1MHz |
| 功耗 | 3.2mW | 1.8V电源 |
3.2 后仿结果
考虑版图寄生参数后的仿真结果:
| 参数 | 值 | 变化 |
|---|---|---|
| ENOB | 7.377bit | 下降7.1% |
| SNDR | 45.8dB | 下降3.4dB |
| SFDR | 51.3dB | 下降4.3dB |
| 功耗 | 3.5mW | 增加9.4% |
3.3 版图设计要点
- 匹配布局:CDAC阵列采用共质心结构
- 电源规划:双层金属供电网络
- 屏蔽措施:敏感信号线添加guard ring
- 去耦电容:在电源网络关键节点添加
4. 常见问题与解决方案
4.1 采样线性度不佳
现象:THD指标不达标
原因:
- 采样开关导通电阻变化
- 时钟馈通效应
- 电荷注入不均
解决方案:
- 采用栅压自举开关
- 添加dummy开关管
- 优化采样时序
4.2 比较器速度不足
现象:转换时间超过5ns
原因:
- 偏置电流太小
- 负载电容过大
- 输入级增益不足
解决方案:
- 调整偏置电流至10uA
- 优化晶体管尺寸
- 采用两级动态结构
4.3 电源噪声敏感
现象:后仿ENOB下降明显
原因:
- 电源去耦不足
- 地弹噪声
- 寄生参数影响
解决方案:
- 增加去耦电容
- 优化电源网络
- 采用差分结构抑制共模噪声
5. 工程文件说明
提供的完整工程包包含以下内容:
-
电路设计文件
- 完整原理图(Schematic)
- 各模块symbol
-
版图文件
- 各模块layout
- 顶层floorplan
-
仿真文件
- 前仿设置
- 后仿设置
- 各种仿真脚本
-
验证报告
- DRC结果
- LVS结果
- ANT结果
-
设计文档
- 模块设计说明
- 仿真步骤指南
- 性能测试方法
6. 使用指南
-
环境准备:
- Cadence IC617或以上版本
- SMIC18mmRF PDK
- 足够的内存和磁盘空间
-
工程导入:
- 解压工程包
- 在Cadence中打开library manager
- 导入提供的库文件
-
运行仿真:
- 打开ADE环境
- 加载预设仿真状态
- 执行仿真
-
结果查看:
- 波形浏览器查看信号
- 计算器进行指标评估
- 生成报告
7. 设计经验分享
在实际设计过程中,有几个特别值得注意的经验:
-
仿真精度设置:
- 瞬态仿真步长建议设为100ps
- 蒙特卡洛仿真样本数至少100次
- 工艺角覆盖tt/ff/ss等典型情况
-
版图设计技巧:
- 敏感模拟信号走顶层金属
- 数字控制信号与模拟信号隔离
- 添加足够的测试点
-
功耗优化:
- 动态电路比静态电路更省电
- 非关键路径可降低驱动强度
- 电源关断技术适用于低频场景
这个项目的设计过程让我深刻体会到,一个好的SAR ADC设计需要在速度、精度和功耗之间找到平衡点。通过这个项目,我总结出了一套高效的ADC设计流程,也积累了不少实用的Skill脚本和仿真技巧。希望这个分享能帮助到正在学习ADC设计的朋友们。