动态比较器蒙特卡洛(mente carlo)仿真失调电压
如何仿真动态比较器的offset
提示:最近想往ADC方向学,到处找资料,结果emmmm发现大部分CDAC用的都是mom电容,我是真的麻了,我这库没得mom电容,多少有点悲伤,干脆还是继续用mim电容继续搞一个出来再说,后面再去找找有没得其他可以用的库,先写个博客记录下动态比较器mente carlo仿真的方法,提升提升我的动力,最近实在是有点懒,动力不足。
Latch再生的时间常数
这里还是主要参考了Allen的推导
V o 1 = R 1 C 1 s R 1 C 1 + 1 V o 1 ′ − g m 1 R 1 s R 1 C 1 + 1 V o 2 = τ 1 s τ 1 + 1 V o 1 ′ − g m 1 R 1 s τ 1 + 1 V o 2 V o 2 = R 2 C 2 s R 2 C 2 + 1 V o 2 ′ − g m 2 R 2 s R 2 C 2 + 1 V o 1 = τ 2 s τ 2 + 1 V o 2 ′ − g m 2 R 2 s τ 2 + 1 V o 1 \begin{aligned} &V_{o 1}=\frac{R_1 C_1}{s R_1 C_1+1} V_{o 1}^{\prime}-\frac{g_{m 1} R_1}{s R_1 C_1+1} V_{o 2}=\frac{\tau_1}{s \tau_1+1} V_{o 1}^{\prime}-\frac{g_{m 1} R_1}{s \tau_1+1} V_{o 2} \\ &V_{o 2}=\frac{R_2 C_2}{s R_2 C_2+1} V_{o 2}^{\prime}-\frac{g_{m 2} R_2}{s R_2 C_2+1} V_{o 1}=\frac{\tau_2}{s \tau_2+1} V_{o 2}^{\prime}-\frac{g_{m 2} R_2}{s \tau_2+1} V_{o 1} \end{aligned} Vo1=sR1C1+1R1C1Vo1′−sR1C1+1gm1R1Vo2=sτ1+1τ1Vo1′−sτ1+1gm1R1Vo2Vo2=sR2C2+1R2C2Vo2′−sR2C2+1gm2R2Vo1=sτ2+1τ2Vo2′−sτ2+1gm2R2Vo1
这里假设gm1=gm2=gm,R1=R2=R,C=C1=C2, τ = τ 1 = τ 2 = R i C i \tau=\tau_1=\tau_2=R_iC_i τ=τ1=τ2=RiCi, Δ V o = V o 2 − V o 1 \Delta V_o=V_{o 2}-V_{o 1} ΔVo=Vo2−Vo1, Δ V i = V o 2 ′ − V o 1 ′ \Delta V_i=V_{o 2}^{\prime}-V_{o 1}^{\prime} ΔVi=Vo2′−Vo1′
V o 2 ′ V_{o 2}^{\prime} Vo2′和 V o 1 ′ V_{o 1}^{\prime} Vo1′是输出节点的初始电压,等效模型里面用到了戴维宁定理,把输出节点的电压等效成了电容和电压源的串联
Δ V o = V o 2 − V o 1 = τ s τ + 1 − Δ V i + g m R s τ + 1 Δ V o Δ V o = τ Δ V i s τ + ( 1 − g m R ) = τ Δ V i 1 − g m R s τ 1 − g m R + 1 = τ ′ Δ V i s τ ′ + 1 τ ′ = τ 1 − g m R \begin{gathered} \Delta V_o=V_{o 2}-V_{o 1}=\frac{\tau}{s \tau+1}-\Delta V_i+\frac{g_m R}{s \tau+1} \Delta V_o \\ \Delta V_o=\frac{\tau \Delta V_i}{s \tau+\left(1-g_m R\right)}=\frac{\frac{\tau \Delta V_i}{1-g_m R}}{\frac{s \tau}{1-g_m R}+1}=\frac{\tau^{\prime} \Delta V_i}{s \tau^{\prime}+1} \\ \tau^{\prime}=\frac{\tau}{1-g_m R} \end{gathered} ΔVo=Vo2−Vo1=sτ+1τ−ΔVi+sτ+1gmRΔVoΔVo=sτ+(1−gmR)τΔVi=1−gmRsτ+11−gmRτΔVi=sτ′+1τ′ΔViτ′=1−gmRτ
可以得到输出的节点两个电压的差值的时域响应为:
Δ v o ( t ) = Δ V i ′ e − t / τ ′ = Δ V i e − t ( 1 − g m R ) / τ ≈ e g m R t / τ Δ V i \Delta v_o(t)=\Delta V_i^{\prime} e^{-t / \tau^{\prime}}=\Delta V_i e^{-t\left(1-g_m R\right) / \tau} \approx e^{g_m R t / \tau} \Delta V_i Δvo(t)=ΔVi′e−t/τ′=ΔVie−t(1−gmR)/τ≈egmRt/τΔVi
这里可以看到输出差值是一个指数上升的过程而且还和这个初始电压差值有关,而一般的放大器(假设只有一个极点)其响应是 ( 1 − e − t / τ ) (1-e^{-t / \tau}) (1−e−t/τ),所以高速放大器一般会加上几级前置放大器来使得Latch上的初始电压差值更大,使得整个比较器工作速度更快。
Latch时间常数为:
τ L ≈ τ g m R = C g m \tau_L \approx \frac{\tau}{g_m R}=\frac{C}{g_m} τL≈gmRτ=gmC
搭了一个动态比较器(无Pre-Amp)
参数基本就凭感觉选的,电路图如下(CC Liu那篇单调开关切换策略里面的,不过我把偏置尾电流管子给去了)(工艺是.18的):
测试电路如下
负载电容我随便取的500f,后面电路是数字电路应该是没得这么大的负载的,先不管了
时钟给的2M,仿真时间100u,比较器差分输入从-20m到+20m变化(最先给的10M,我也是打算做个10M的ADC,结果100u时间有点难得仿蒙卡),关于为啥我是搞10M的ADC,emmmm我那个采样开关设计的有效位数在10M的时候才有12.8Bit的ENOB(本来最先也是按着CC liu那片论文定50M的,奈何我水平有限,采样开关50M的时候有效位数过于低了,所以降采样频率吧,倒是有查到论文讲囊个把Bootstrap开关的时钟馈通和电荷注入减小的论文,后面再搞)。
先跑个tran仿真出来看看波形
问题不大,能正常工作(10M的时候也行)
跑跑失配
打开计算器,用cross函数(这个函数可以查找上升沿还有下降沿的时间),我找的是上图的最下面那个信号,由于开始的时候有个脉冲,所以需要找第二个下降沿,然后在上面的表达式中减去中间值,并且乘上输入电压差值同时间的比例(我这里跑了100u,最后的输入电压差值为20m,所以系数为20m/50u=400)。
然后按照蒙特卡洛仿真的要求设置,最后跑出结果(如何设置蒙特卡洛仿真B站上又很多视频教程了,可以自己查,这里不写了)
跑了400次,最终结果如下,输入电压差值还不太够,有些点都接近了20m了。(看了CC Liu的论文后又仿了仿,那个尾电流管子还是必须的,不然共模电压低了基本就不正常工作了,还能减小这个失配随共模电压变化)
参考到的资料
eetop上都可查到(中间论文我其实一篇都还没看,基本上是参考的第一个和最后一个文档):
- 蒙特卡洛分析比较器的输入误差
- A Simulation Method for Accurately Determining DC and Dynamic Offsets in Comparators
- Closed-loop Simulation Method for Evaluation of Static Offset in Discrete-Time Comparators
- A Simple and Accurate Method to Predict Offset Voltage in Dynamic Comparators
- A Methodology for the OffsetSimulation of Comparator
- CML比较器失调仿真总结
更多推荐
所有评论(0)