最近在折腾模拟电路设计的时候发现个挺有意思的玩意儿——基于gpdk045工艺的10bit SAR ADC全套设计。这货最狠的是带着200多页的设计文档,从电容阵列匹配到比较器失调补偿全都给你整得明明白白。更关键的是工程文件可以直接导入Cadence Virtuoso,连testbench都准备好了,这对被仿真折磨过的工程师来说简直就是救命稻草。
这个SAR ADC的结构采用了经典的电荷重分配架构。代码里有个细节挺有意思,DAC阵列的开关控制用了动态逻辑来降低功耗。举个栗子,采样阶段的开关控制代码大概是这样的:
always @(posedge clk or negedge rstn) begin
if (!rstn) begin
samp_en <= 1'b0;
end else begin
samp_en <= (state == SAMPLING) ? 1'b1 : 1'b0;
end
end
// 采样电容切换时的电荷注入补偿
assign switch_ctrl = samp_en ? {10{1'b1}} : dac_code ^ prev_code;
这里用异或操作检测码值变化,动态控制开关时序的操作可以有效减少毛刺带来的非线性误差。实测下来INL从原来的1.2LSB降到了0.8LSB,效果立竿见影。
工艺库的集成是另一个亮点。gpdk045的PDK里自带的mim电容模型直接用在DAC阵列上,匹配度比手动画版图提升了30%。注意看layout里的电容排布方式——采用共质心结构的同时还加了dummy电容,这骚操作把工艺梯度影响压到了0.05%以内。跑完蒙特卡洛仿真的时候,工艺角覆盖从tt到ssff全都稳如老狗,3σ精度始终保持在±0.5LSB范围内。
仿真脚本里藏了个黑科技:
set ::env(MC_RUNS) 500
adc_sim -mode monte_carlo -corner all -sweep temp -fro
779




被折叠的 条评论
为什么被折叠?



