比较器失调的仿真用到了蒙特卡罗分析:
首先是蒙特卡罗分析窗口的一些设置,如下图所示,在此不再赘述。
其中 Analysis Variation:Process 是指 device mismatch on two different dies(die to die)。
Mismatch 是指 device mismatch on the same die。
记得要把“Save Data Between Runs to Allow Family Plots”勾选,通过 Calculator 可以获
取 output 的表达式。
比较器失调仿真的整体仿真图如图 1 所示:(其中包含有①单端到差分的转换(xfmr),
输入的共模电平值由 VCM 确定,②理想的采保电路 sah_ideal,其属性设置如图 2 所示。
③比较器)
本实例中的比较器是由预放大器与锁存器组成,锁存器由时钟控制,当时钟的上升沿到
来后,比较器产生比较结果,当时钟变为低电平后,比较器的输出复位到 Vdd。
图 1
输入源 vpwl 的设置如图 3 所示:
图 2
仿真后得到 Comp 的 VP 和 VN 的输入分别如图 4 所示。对于每一个输入值 Xi,在时钟
的上升沿到来后,比较器都有一个确定的输出值。由于对称性,我们只选取 16.4ns 之前的
41 组 Xdata 数据:
图 3
图 4
在理想的情况下,当 Xi>Xth 时,比较器输出为高电平;当 XiXth 时,比较器输出可能为低电平;同时 XiXoff)=ni/N=zi,其中 N 是蒙特卡罗分析的总次
数,ni 是某个 Xi 下输出为 1 的次数。这个函数是 Xoff 的概率密度函数的积分,从而得到比较
器失调的统计特性。拟合出 Zi 和 Xi 的关系曲线,z=p1*X+p2。
代码部分
导出 cadence 仿真数据到 matlab 处理的 ocean 脚本程序:
openResults("/home/music/simulation/SIM_pre_amp1/spectre/schematic/psf")
selectResult('tran)
ocnPrint(?output
"/home/music/simulation/SIM_pre_amp1/spectre/schematic/psf/comp.txt" ?precision
2 ?numberNotation `none ?from 0.1e-6 ?to 16.1e-6 ?step 0.4e-6 v("/OUTP"))
offset 仿真的第一段 matlab 代码:
xdata=-20:1:20;
x=load('J:\comp.txt');
ydata=[]; %ydata原来为空
x(:,1)=[]; %删除x中的第一列,为时间
x1=x; %将新的x记作x1
for i=1:41
y=sum(x1(i,:))/(1.8*50); %输出为1的概率(本实例进行了50次蒙特卡罗仿真)
ydata=[ydata y]; %每次存入新的y
end
plot (xdata,ydata);
axis([-20 20 0 1.05]);
offset仿真的第二段matlab代码:
v=sqrt(2)*erfinv(ydata(1:41)*2-1);
i=find(v>-3&v<3); %3sigma原则
[p,s]=polyfit(xdata(i), v(i),1); %对离散点进行拟合,1表示直线拟合
sigma=1/p(1); %标准差
mu=-p(2)/p(1); %平均值
figure(2);
plot(xdata(i),v(i),'.k',xdata(i),polyval(p,xdata(i)),'r');
axis([-15 15 -3 3]);
text(-4,2,sprintf('sigma=%2.2f mV \n mu=%3.2f uV',sigma,mu*1000));
更详细的情况请参见文档《A Methodology for the offset Simulation of Comparators》。
---西安电子科技大学