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

本文主要参考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...》

a4c26d1e5885305701be709a3d33442f.png

输入三角曲线递增/递减幅度为1mv,这里我设置的为-50mv:50mv:-50mv,(vth为0,或者设置为Vr-50mv:Vr+50:Vr-50,从而可以自己调整比较电平Vr),时间范围根据比较器周期来确定

图2 输入共模这里由vcm确定,它的值也直接影响到了offset

a4c26d1e5885305701be709a3d33442f.png

图3 输出Voutp,可以看到由于offset的变化,voutp为1的数目的变化

a4c26d1e5885305701be709a3d33442f.png

对于指定的一个输入信号,如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轴为累积的概率

a4c26d1e5885305701be709a3d33442f.png

图5 正态概率曲线(拟合&实际)

a4c26d1e5885305701be709a3d33442f.png

对比测试一下:

这里做测试的是一个全动态比较器,设置的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
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值