MonteCarlo参数的理解
statistics{
process{ vary sigma dist=gauss std=1/3
}
}
statistics{
mismatch{ vary vth_mis dist=gauss std=1/1
vary tox_mis dist=gauss std=1/1
vary dl_mis dist=gauss std=1/1
vary dw_mis dist=gauss std=1/1
}
}
...
...
std=1/3,std=1/1有何不同?具体有啥含义,为何process取的是std=1/3而mismatch是std=1/1?
求指点!多谢
按照smic提供的mismatch数据写好后,用spectre放了一下,最后的标准偏差除以平均值才20%多一点,上头的博士说这个值偏的太小,然后就让我解释std=1/3,std=1/1含义,各种挠头
die to die process variation 一般相对较小,mismatch要大一些。
按照你的意思。process中std=1/3,意味着变化的区间或者说变化的相对值要比std=1/1要小,可以这么理解吗?
关键是std=1/3是怎么个意思哎
std是不是标准差的意思? 我没跑过smic的MC,不知道。不过好像是smic没有MC啊,要自己写MC文件吧
恩,是我自己写的。受你的回复启发,我大概已经知道什么意思了
process 为不同die之间偏差,mismatch为一个die中不同器件偏差,所以同样参数当然是process偏差大于mismatch。
dist为分布方式,gauss为高斯分布,还有正态分布和平均分布。
std为standard deviation就是偏差数值,1/3我觉得就是0.3333,一般都是一个数,我没看过写成1/3的。
如 std=30 precent=yes 就是偏差30%,否则就是绝对数值。
高斯分布不就是正态分布?我看过TSMC和SMIC的都是写1/3好吧
的确,我写错了,是指数分布。
有的模型是1/3这么写的,有的是一个数。这个要找个人问问了,不理解1/3这样写法的好处是什么。
这个我也是那么一猜。不过我认为啊,一般工艺process和mismatch是分开的,process偏差相对要小,mismatch要大些。实际中应该是这两者综合的结果,也就是你说的die to die 的process偏差。
你说的很有道理,std=1/3是一个数
我觉得呢,上述的process:dist=gauss,std=1/3,描述了一个N(0,(1/3)^2)的正太分布。
同理,dist=gauss,std=1/1描述了一个N(0,1)的标准正太分布
这两个分布都是归一化的,就面积积分等于1.而在需要修改的model中,这两个分布要乘以一个固定值
关于为什么一个取1/1,一个取1/3,是由于:关于mismatch,SMIC的文件中给出的是标准偏差sigma,即上面说的固定值是1倍的sigma,
而在process中,是由于给出的是ff和ss之间的最大偏差,也就是3倍的sigma,所以要除以3,就std=1/3
不知道说明了没
应该是process的变化更大,不过process的ss和ff分别是处于+3sigma和-3sigma之间
所以std=1/3
spectre文档这么写的
A statistics blockmay contain one or more process blocks (which represents
batch-to-batch type variations), and/or one or more mismatch blocks (which represents on chip or device mismatch variations), in which the distributions for parameters are specified.
看你怎么理解了。
你看看spectre文档,guess分布不是N(0,(1/3)^2)正态分布,而是N(均值,std)正态分布。文档105页
关于sigma的我没有看懂。
既然讨论这么深入,我要找个明白人问问,找到答案告诉你吧。
嗯,这个估计要看具体工艺说明吧。不过我前段时间仿MC,确实是只加process的比只加迷失match的小一些,TSMC18工艺
好的,多谢了
你说的3 sigma是对的,1 sigma就是1/1,3 sigma 就是1/3。为什么写成这样的方式呢?还是因为spectre的monte carlo模型是从spice模型中转变过来的,一般foundry还是先有spice模型然后转化为spectre模型的。
spice模型你可以看到 param=AGAUSS(0,1,1)转换成spectre就是 param dist=gauss std 1/1 。 如果是param=AGAUSS(0,1,3)转换成spectre就是 param dist=gauss std 1/3 。这个1或者3就是3 sigma了,数学关系我也不怎么理解。
process中的参数每次MC迭代都是同样的数,而mismatch中参数在每次MC迭代中不同的器件是不一样的参数。这可能就是你看到process小的原因。
不知道楼上的哪位会在spectre仿真model里面加入mc与mismatch model,一般代工厂提供的仿真模型只有工艺角的,现在需要仿mismatch 与mc的,求指教,急!多谢了
我也想知道smic0.18工艺的mismatch的model
一般的Corner中(如FFG之类的),其Global Variation 已经在3-sigma了,而且是固定值,直接由.param定义。此时仿Monte Carlo时,Local Mismatch 是服从高斯分布的 AGAUSS(0,1,1)或AGAUSS(0,1,1/3)或其它,这里都是以0为中位值,只有标准差不同而已,看上去对你的Sample会有影响,其实由于不同工艺中这些高斯分布前边定义的系数含义不太一样,所以有视觉差别而已 (N(0,1)和3*N(0,sq[1/3])的方差是一样的)。这里不必太纠结,一般从FFG 和TTG之间的差别可以看出是否用AGAUSS(0,1,1)还是其它。
此外,如果在意Wafer间的变化的话,还可以仿 Full MC。在lib中一般都会有这个corner的。比如tsmc 的GlobalMC_LocalMC, Samsung的 Full_MC。不过意义不大。为什么?因为(如FSG)这些Corner仿出来的裕量更大一点: Full MC仿出来的标准差是 sqr(g_sigma^2+l_sigma^2), 而FSG这些Corner仿出来的标准差是g_sigma+l_sigma,显然后者的sigma更大一点。而sigma越大说明越不达标,需要的裕量越多,所以一般仿G Corners即可。
仅供参考。
受教了
学习了
看一下
who is right ?