section_mc的代码如下:
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???
A1: std为standard deviation就是偏差数值,1/3我觉得就是0.3333,一般都是一个数,我没看过写成1/3的。
如 std=30 precent=yes 就是偏差30%,否则就是绝对数值。
A2: 你说的很有道理,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
A3: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了,数学关系我也不怎么理解。
A4:我前段时间仿MC,确实是只加process的比只加迷失match的小一些,TSMC18工艺 ---process中的参数每次MC迭代都是同样的数,而mismatch中参数在每次MC迭代中不同的器件是不一样的参数。这可能就是你看到process小的原因。
A5:一般的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即可。
仅供参考。
reference: 1. http://bbs.eetop.cn/thread-332745-1-1.html