加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]比较器失调仿真方法(Monte Carlo仿真 & matlab处理)

(2012-12-15 00:58:55)
标签:

转载

本文主要参考Achim Graupner-《A Methodology for the Offset-Simulation of Comparator》,这篇文章可以从Designer-Guide.org 上获取,这里主要是写下具体步骤,也便于自己做个备份。


为什么需要用Monte Carlo仿真?
在研究比较器失调(offset)时,我们需要考虑各个工艺角(corner)对比较器失调的影响,但是通过用Monte Carlo仿真,我们可以加入器件之间mismatch的影响(特别是同类型的器件)。当然,此时器件的参数随正态分布变化,而不是固定在一个确定的Corner。 有些工艺应该可以只仿process variation或者mismatch的单个情况, 我用的工艺只能对两者一起仿真。

(1)比较器输入激励信号,这里我们输入一个如图1的三角波形(由analogLib里Vpwl的信号,通过ahdlLib里理想的采样保持模块(sah_ideal)产生,注意定义模块里的vtans_clk变量。一般设计的比较器都是差分输入,所以我再接一个单端转双端的变压器,同时在这里定义输入共模,如图2,这里我的Vth=0,当然也可以看作已经减去比较电平的输入。

(2)我用的是Cadence的IC61,所以直接运行ADE XL里的Monte Carlo Sampling,设置仿真次数,当然是越大越好(咱电脑不是啥高档机器,所以受仿真时间限制),不过几百个点应该够了吧。
Tips: 要记着选择save data to allow family plots。 图3是N次Voutp输出结果,当然这里只显示了几次而已。



图1 Stimuli for offset-simulation from 《A Methodology...》
http://s15/middle/77855bbb4a2d3b336652e&690Carlo仿真 matlab处理)" TITLE="[转载]比较器失调仿真方法(Monte Carlo仿真 matlab处理)" />
输入三角曲线递增/递减幅度为1mv,这里我设置的为-50mv:50mv:-50mv,(vth为0,或者设置为Vr-50mv:Vr+50:Vr-50,从而可以自己调整比较电平Vr),时间范围根据比较器周期来确定

图2 输入共模这里由vcm确定,它的值也直接影响到了offset
http://s7/bmiddle/77855bbb4a2d426280236&690Carlo仿真 matlab处理)" TITLE="[转载]比较器失调仿真方法(Monte Carlo仿真 matlab处理)" />

图3 输出Voutp,可以看到由于offset的变化,voutp为1的数目的变化
http://s14/middle/77855bbb4a2d57394401d&690Carlo仿真 matlab处理)" TITLE="[转载]比较器失调仿真方法(Monte Carlo仿真 matlab处理)" />

对于指定的一个输入信号,如V1,在进行N次仿真后,输出voutp为1的个数为n1,则其概率可以表示为P(Yv1=1)=n1/N,从而我们可以得到失调的统计特性。

(3)数据处理
我们从N次仿真后的voutp的数据中可以提取出:(这里需要对直接提取出的数据做些适当处理)
xdata数据: -50mv:50mv:-50mv, 大小1x200
ydata数据: 每个输入点的N次仿真结果,大小Nx200,注意取值时的坐标点哦。

数据准好了,用《A Methodology for the Offset-Simulation of Comparator》文中的程序处理数据:
p.s. 根据自己需要,我做了些的修改。


%Revised by akon in 20110427
% it is assumed that the simulation results are provided
% in the matrix "ydata" and the array "xdata"
% (1) ni/N, Figure 2
Vdd=input('Input Vdd:');
Xth=input('Input Threshold Voltage for Comparison:');
y = sum(ydata)/(Vdd*length(ydata(:,1)));
figure(1)
plot(xdata, y)
% (2) inverse erf for rising slope only
% y(1:21) is this case contains the data
% for the rising slope
v = sqrt(2)*erfinv(y(1:200)*2-1);
% select values within −2.5 ... 2.5 sigma
i=find(v>-2.5 & v<2.5);
% fit line through selected values
% Figure 5
[p,s]=polyfit(xdata(i), v(i), 1);
figure(2)
plot(xdata(i), v(i), xdata(i), polyval(p,xdata(i)))
% (4) compute mu and sigma
sigma = 1/p(1)
mu = -p(2)/p(1)-Xth


好了,这了我得到累积概率曲线(图4),正态概率曲线(图5)和失调的均值&标准差

图4 由于没有设置vth,因此这里明显可以看到offset在0v左右。X轴为输入,Y轴为累积的概率
http://s13/middle/77855bbb4a2d5b75b544c&690Carlo仿真 matlab处理)" TITLE="[转载]比较器失调仿真方法(Monte Carlo仿真 matlab处理)" />

图5 正态概率曲线(拟合&实际)
http://s3/bmiddle/77855bbb4a2d5b7a95b32&690Carlo仿真 matlab处理)" TITLE="[转载]比较器失调仿真方法(Monte Carlo仿真 matlab处理)" />

对比测试一下:
这里做测试的是一个全动态比较器,设置的mismatch为整个比较器电路,仅仅测试下增加输入管宽度对于offset的影响:
(1)差分输入管宽度:4um
mu=226uv sigma=8.2mv
(2)差分输入管宽度:6um
mu=166uv sigma=6.4mv
基本还是符合预期猜测的。当然具体的分析,如Random Offset受哪些管子参数影响较大,还得参考下TCAS1-2009《Analysis of Static and Dynamic Random Offset Voltages in Dynamic Comparators》,有空补上读书笔记。

首篇新浪博客,如有写得不对的地方,欢迎拍砖哈~





0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有