Riching的个人空间 https://blog.eetop.cn/1789212 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

比较器offset测算的三种方法

热度 1已有 327 次阅读| 2024-3-26 11:01 |个人分类:比较器|系统分类:芯片设计| 比较器, offset, 仿真

一、offset测算的三种方法的参考

1.方法一:输入斜坡信号失调仿真 https://zhuanlan.zhihu.com/p/659558175

2.方法二:码密度法 A Methodology for the Offset-Simulation of Comparators》、模拟\比较器\学习资料\eetop.cn_蒙特卡洛分析比较器的输入误差

2.方法二:环路仿真失调 比较器 offset 的精确仿真方法基于Verilog-A Cadence-up主南城花再开《 A Simulation Method for Accurately Determining DC and Dynamic Offsets

in Comparators》

ref:https://bbs.eetop.cn/thread-662987-1-1.html

最终使用下来还是最传统的斜坡好用,方法三可以作为方法一的快速验证。


二、方法一:常规失调仿真

给比较器差分输入端一个缓慢变化(远慢于比较器时钟周期,保证在一个比较周期里输入改变的量很小,测出来才准)的斜坡信号,另一端输入Vcm,检测比较器输出发生改变的那个比较周期内在比较一开始时的输入斜坡信号与VCM的差值。

仿真电路:设置Vin2=Vcm,Vin1为叠加在共模上的缓慢斜坡信号(也可以Vin1和VIN2是相反方向的斜坡,找输出结果改变时Vin1和VIn2之差)

image.png

Vin1设置如下:因为比较周期为2ns,只要在1/2Tck=1ns内vin变化很小就好。设置输入变化率为15uV/ns,扫描从-30mV~+30mV,那么下面Time2=4u(通常offset是mV级,vin的uV变化影响很小)。斜坡时长可以是几百个甚至上千个时钟周期,本次仿真斜坡时长是2000个时钟周期。

image.png

SRlatch输出接一个DFF用于寄存输出值(每个参数都要设置值),DFF输出变化会滞后一个时钟周期。

image.png

设置输出值:因为DFF输出变化会滞后一个时钟周期,所以当DFF输出变化到1/2VDD的时刻减去一个时钟周期,此时为输出变化的上一个周期一开始比较的时间,value此时的斜坡值。

image.png

image.png

设置好MC工艺角和MC仿真,为了保存时域图像可以勾选红框内容

image.png

image.png

希望被分析失配的管子换成mac,这里将主要失配贡献的输入对管进行替换。可以通过分别替换mac的方式来看管子对offset的贡献,或者全替换后逐个勾选 mismatch effect。

image.png

image.png

尝试了两种找vin的方式:第一种是直接根据Vo1输出变化时间减去1/2Tck;第二种是当DFF输出变化到1/2VDD的时刻减去一个时钟周期。后者应该是更加准确,因为选择vin的时间更接近于比较一开始的时间。

image.png

跑了500次,标准差两种取值方法差不多。从图中3sigma可以看出,mean+3sigma为13.8mV。

image.png

看看将所有管子替换成mac的再测失配,3sigma值为14mV。说明对管的影响很显著。

image.png

三、方法二:码密度法

没有看懂原理,参考资料也写的有点莫名其妙,仅记录我所理解的仿真过程。

测试原理图如下:

image.png

输入为一个缓慢的三角波:

image.png

 

三角波通过被sah_ideal在CLK上升沿进行采样得到一个三角阶梯波形:

image.png

 

xfmr将输入转为差分信号:

image.png

 

输入各波形如下所示:因为时钟周期为2ns,所以Vin1和Vin2为每个周期变化20μV

image.png

 

设置trans仿真,时长和三角一样

image.png

 

设置500MC仿真,查看VO1的情况

image.png

 

将所有VO1的数据以2ns为间隔,结束时间为一半三角波的时间导出:

image.png

 

所导出的数据为每次MC的截取时间+电压值(不知道为何第二次MC仿真的数据会被移到最后两列

image.png

image.png

 

接着到Matlab里统计出每一个输入电压下对应的VO1为1的概率,即将csv数据中VO1的值数字化为1和0后按行相加再除以MC次数,然后通过统计函数计算sigma和均值,这里的统计处理不清楚原理:

clc

clear

VDD = 1.8;

cycle = 500; %MC仿真次数

VO1_tmp=csvread('mc_VO1.csv',2,0);

VO1_tmp1 = NaN * ones(size(VO1_tmp,1),size(VO1_tmp,2)/2);

VO1_digi = VO1_tmp1;

for i = 1 : size(VO1_tmp,2)/2 %取出数据中VO1的电压数据,删除时间数据

    VO1_tmp1(:,i) = VO1_tmp(:,i*2);

end

 

for i = 1 : size(VO1_tmp1,1) %将VO1的电压数据数字化为1和0

    for j = 1 : size(VO1_tmp1,2)

        VO1_digi(i,j) = round(abs(VO1_tmp1(i,j))/VDD);

    end

end

 

Ydata=[];

for i = 1 : size(VO1_digi,1) %计算每一个输入电压下1的占比

    Y = sum(VO1_digi(i,:)) /cycle;

    Ydata=[Ydata Y];

end

 

Xdata = -20:0.02:(-20 + 0.02 * (size(VO1_digi,1)-1)); %取决于你的 ramp 的范围和步长,取前一半时间的斜坡

figure(1)

plot(Xdata,Ydata); %得到概率随输入电压变化曲线

v = sqrt(2) * erfinv(Ydata * 2 - 1); %估计在 Ydata 概率出的标准正态分布的 x 取值

i = find(v > -3 & v < 3); %3sigma 准则

[p,s]=polyfit(Xdata(i),v(i),1); %用一阶 Xdata 去拟合 v 从而得出 Xdata 的方差和均值

figure(2)

plot(Xdata(i), v(i), Xdata(i), polyval(p,Xdata(i))) %展示拟合效果

Sigma = 1 / p(1)

Mu = -p(2) / p(1)

程序得到的1的占比随输入电压变化曲线

image.png

展示拟合效果

image.png

最终得到的均值mu和sigma,和方法一结果有些差别,不确定过程的正确性。

image.png



四、方法三:环路仿真失调

4.1 测试原理:

理想比较器在VP=VN时输出0和1概率对半,但由于offset存在使得VP=VN时输出概率不对等。只有当|VP-Vn|=offset时输出0和1才对半开。所以在下图中,通过环路的无限DC增益使得vod平均为0,所以比较器输出0和1的概率相等。那么此时的Vref-Vfb的均值就是比较器阈值的偏移量即offset

image.png

 

各点波形如下,VFB的峰值应小于DOTB所希望的分辨率,VFB的峰峰值越小,精度越高。峰值取决于积分器增益和时钟周期。

image.png

 

gearshift技术:在达到平衡后,降低积分器的增益,使vFB的峰值非常小。vFB的峰间变化越小,准确性就越高。“gearshift”可以设置为在特定时间开始,例如下图中通过后期S2断开来减小环路增益以降低Vfb峰值提高offset测量精度。

image.png

 

image.png


 


4.2测试实例

其中积分器和运放是VerilogA的。

image.png

代码如下:

module   integrator_VA(vout,vip,vin);

input   vip,vin;

output   vout;

electrical   vout,vin,vip;

electrical   vid;

parameter   real RC_val = 0.001 from(0:inf);

 

parameter   real gnd = 0;

real pole;

analog   begin

@(initial_step)

pole =   1/RC_val;

V(vid)   <+ (V(vip)-V(vin));

V(vout)   <+ pole*idt(V(vid),gnd);

//$bound_step   (1e-7);

end

 

endmodule

module   comparator_offset_VA(sigin,sigref,clk,sigout);

input   sigin,sigref,clk;

output   sigout;

electrical   sigin,sigref,clk,sigout;

parameter   real sigout_high = 1.8;

parameter   real sigout_low = 0;

parameter   real latch = 0.9;

parameter   real sigin_offset=0 from[-0.5:0.5];// in V

parameter   real comp_slope = 1000;

parameter   real trise =20p from (0:inf);

parameter   real tfall =10p from (0:inf);

parameter   real tdel = 0 from [0:inf);

real   out_val;

 

analog   begin

@(initial_step)begin

if   (sigout_high <= sigout_low)begin

$display("RAange   spes error");

 

out_val =   0;

end

end

 

@(cross(V(clk)-latch,+1))begin

if(V(sigin)-V(sigref)+sigin_offset   > 0)

out_val=sigout_high;

else

out_val=sigout_low;

end

 

V(sigout)   <+ transition(out_val,tdel,trise,tfall);

end

endmodule

仿真时需要根据Vfb的波形来调整运放增益和积分器的RC使得Vfb围绕Vref波动

image.png

image.png

设置好MC仿真后,设置观察的输出为VfbVref之差在Vfb稳定波动时一段时间的平均值:average(clip((VT("/Vfb") - VT("/Vref")) 2e-06 4e-06))

image.png

仿真看到offset的3sigma为-34.5u±3*4.8m,和方法一结果差不多。

对该方法的感受:由于不使用缓慢输入信号,测试更快;在MC仿真的时域波形中会看到有些情况下Vfb整体在Vref上方或下方波动,而没有围绕,可能会影响结果;Vfb的峰峰值反映测量精度的关系不太明确。

个人觉得该方法可以作为方法一结果的快速验证。


1

点赞

刚表态过的朋友 (1 人)

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 1

    周排名
  • 1

    月排名
  • 0

    总排名
  • 2

    关注
  • 8

    粉丝
  • 0

    好友
  • 25

    获赞
  • 2

    评论
  • 35

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-28 02:09 , Processed in 0.020767 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部