10bit 20MHZ SAR ADC 设计,smic180nm,有设计文档原理解读 有工艺库,直接导入自己的cadence就能运行,有效位数ENOB为9.8,适合入门SAR ADC 结构: 常用栅压自举开关Bootstrap Vcm_Based开关时序 上级板采样差分CDAC阵列 两级动态比较器 比较器高速异步时钟 动态sar逻辑 10位DFF输出 10位理想DAC还原做DFT。 包括详细仿真文档,原理介绍,完整电路图,仿真参数已设好,可直接使用,在自己的电脑上就可以运行仿真。 适合入门SAR ADC的拿来练手
SAR ADC这玩意儿说难不难,但真要让新手快速上手还是得有个靠谱的工程案例。最近在smic180nm工艺上搭了个10bit 20MHz的ADC,实测ENOB 9.8,算是入门级选手的好教具。整个设计文档里最实用的就是那些开袋即吃的仿真设置——直接导入Cadence就能跑起来,这对新人太友好了。
先看这个自举开关电路,典型Bootstrap结构但做了点小优化。核心代码段长这样:
sw_ctrl bs_sw ( .clk(phi1), .vin(vip), .vout(vop) ); // 栅压维持模块 always @(negedge phi1) begin boot_cap <= vdd - vin; end这个always块控制着自举电容的充电时机,确保在采样相位切换时栅压稳定。实测发现,当输入信号超过0.8VDD时,开关的导通电阻变化不超过3Ω,这对保持线性度很关键。
差分CDAC阵列用了上级板采样结构,代码里有个有趣的细节:
parameter real C_unit = 20e-15; genvar i; generate for(i=0; i<10; i=i+1) begin : cap_array capacitor #(.C(C_unit*(2**i))) C_top (top_plate, switch_node); end endgenerate这里用生成语句批量创建二进制加权电容,注意电容值指数增长的写法(2i)。实际版图要做dummy电容平衡边缘效应,不过仿真模型里已经内置了寄生参数。
两级动态比较器的速度直接决定转换速率。异步时钟生成模块里有段骚操作:
always @(posedge cmp_out) begin clk_dly <= #100ps ~clk_dly; end这个100ps延迟是工艺库里的典型门延迟,用实际器件模型替代理想延迟单元后,比较器响应时间从1.2ns降到了850ps。注意时序仿真时要跑蒙特卡洛分析,避免亚稳态。
动态SAR逻辑部分用verilogA建模比实际电路快得多:
always @(negedge clk) begin sar_reg <= {sar_reg[8:0], cmp_out}; end但实际电路是用传输门搭建的移位寄存器,仿真库里的DFF模型已经包含时钟馈通补偿。有个坑要注意:当ENOB接近10bit时,必须把比较器失调电压调到LSB的1/4以下。
最后上电实测,拿理想DAC做回环测试的脚本挺实用:
import matplotlib.pyplot as plt fft_result = np.fft.fft(adc_output) enob = (np.max(fft_result) - 1.76) / 6.02 print(f"实测ENOB: {enob:.2f} bits")这个Python脚本直接读取Cadence的仿真数据,算出的ENOB和virtuoso里的计算结果误差在0.05bit以内。整套流程跑下来,从网表导入到出结果不超过15分钟,对新手确实友好。
建议拿到工程后先改改电容匹配参数试试,比如把单位电容从20fF改成15fF,立马能看到SFDR掉3dB——这种即时反馈对理解ADC工作原理特别有帮助。电源噪声灵敏度测试也别跳过,smic180的衬底耦合效应比想象中猛,1mV电源纹波就能让INL恶化0.2LSB。