|
楼主 |
发表于 2020-10-21 19:40:58
|
显示全部楼层
再发一个脚本,画stack path和gardring的。
原理是利用virtuoso自带的multipath功能,用form和脚本算法去自行产生符合自己要求的multipath设置,然后调用系统的multipath函数。
如果没用过multipath的建议先用用,
使用方法:
1,左侧LSW中选中multipath的sub layer,按下快捷键G
2,这个脚本是stackpath和gardring两种功能整合在一起的,LSW中选择"AA" ,按下快捷键则出现画gardring的form,选择metal,则出现画stack path的form
3,此脚本为专门针对smic28nm定制的。内部的layer name为SMIC28的,如果是其他工艺,需要自己改一下。
比如SMIC的"AA"对应TSMC的"OD"等等。
4,里面有几个计算公式,比如计算multipath打孔的排数和孔的位置,这些公式中用到的数值都是SMIC28的rule,要做成common的需要增加一些语句再调试,
我先麻烦,反正对于一种工艺的,调一次数值就行了,对我来说so easy。但公式中每个数值代表的是什么只有我知道。。。
5,下面我截取几个公式解释一下吧:
①下面这种是指的metal和via在LSW中显示的name,你的不是这样那就改一下
metal_List = list("M1" "M2" "M3" "M4" "M5" "M6" "M7")
via_list = list("V1" "V2" "V3" "V4" "V5" "V6")
②viaNam这个公式在脚本中用过几次,要改的话记得全部都改一遍
int()是取整的函数,width是指sub layer的宽度,这是计算via的排数的公式。
width减去两个数值,一个是via的width,我的是0.05um。另一个是方孔被metal 包围的值的两倍,我这里取的是O调用一个方孔,metal四边包围via各0.025um,
所以第二个数值时0.025*2=0.05。至于0.13,这是via的width+spacing的值,我这里是0.05+0.08=0.13
viaNum = 1+int((width-0.05-0.05)/0.13)
③这是计算multipath的孔的相对位置的计算公式,其中的0.13还是via的width+spacing
if(evenp(i) then sep = 0.0+int(i/2)*0.13 else sep = -0.13-int(i/2)*0.13);if
④这句是设定multipath的配置环境的语句,其中的两个0.05指的是via的width和length,0.08只via spacing,两个-0.04指的是multipath的头和尾超出第一颗via的大小
Vias = list(list(one "darwing") 0.05 0.05 t sep "center" 0.08 -0.04 -0.04 "distribute")
⑤下面这个和第三个是一样的,0.13还是width+spacing,而0.065是0.13的一半,注意公式里面的负号别给改没了
if(evenp(i) then sep = 0.065+int(i/2)*0.13 else sep = -0.065-int(i/2)*0.13);if
有兴趣的可以把这些不确定值改成局部变量,就是放在开头的let后面的括号里面,然后在公式中用变量替换,在最开头给变量赋值。
只是我在开始没这么写,写完了又懒得再改了。
后面还有个同样利用multipath内核写的画shielding的脚本,思路和这个差不多,单因为要单独设置快捷键,所以没整合到这个脚本里面。
等后面有空了再抄写下来上传吧。这种脚本太长了,手打的容易出错,错一个字母就不能用。
|
|