在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 217929|回复: 768

[资料] 自己写的一些非常好用的skill脚本

[复制链接]
发表于 2020-4-24 09:38:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 chinarml 于 2020-5-3 09:27 编辑

最初开始学习时在这里下载了很多脚本用于学习,现在能自己写脚本了,把感觉很有用的几个脚本分享出来给大家。

我现在用的脚本有部分是其他同事编写的,就不做分享了,这里只分享我自己写的。

后续会陆续增加,因为脚本是在linux中编写和调试的,而上传到eetop上的是在windows上手打的,并没有再经过测试。
可能会有漏掉字母,漏掉括号的,有问题的脚本请指出,我再更正。

我以前使用的是laker,除了十字标尺就没有脚本。但当时认为单纯画图的话,laker的效率能吊打virtuoso。
后面由于工作原因,改用virtuoso时各种不适应。但后来接触了脚本才发现,当很多复杂操作改用脚本一键完成时,
virtuoso的效率更高(laker应该是用的tcl脚本,我不会)


我的手速并不快,但通过我大量的脚本堆积,我的画图效率很高。本人用的脚本非常多,大概十几个,绝大部分是我自己写的。


如果你是新手,可以使用这些脚本将效率提升。如果你是老手,并且喜欢尝试提高效率的,也可以试一下。





eetop在编辑的时候看不到上传的附件吗?我在这里添加每个脚本的说明:
1)MagicCopy的脚本是用来复制底层的polygon的。使用方法是在layout界面左侧LSW中选中要copy的layer,按下快捷键 5 ,鼠标处出现box拉框。框选中的layer会被copy到当前层。
脚本中有一个foreach循环现在是用;屏蔽的,这个循环是把copy上来的layer转换成path,个人习惯用path拉线,所以加了这一行。
2)changeVia的脚本我在另一个帖子里分享过,这里开了一个新帖,陆续把我自己写的脚本都分享出来。
这个脚本用法是,选中via,鼠标滚轮控制via的行数,shift +滚轮是控制via列数。
3)MagicCopy_for_via脚本,顾名思义,是用来copy底层via的脚本。由MagicCopy的思路,修改算法编写的。
使用方法是LSW选中目标via,然后按下快捷键shift+5,可以copy框选中的所有目标via。
4)CopyPinToCurrentWindow作用是将选中的block中的pin上浮到当前层。
用法是选中目标block,按下快捷键F10(F10比较远,主要是因为我的快捷键太多了,排到F10了,你们可以自己修改)



补充内容 (2020-5-7 08:16):
AddMosM1这个脚本代码有错误,对于array的mos现在的脚本并不好用。我在调试时用的2x2的array,错误没有体现出来。现在脚本已经修改,但是这里的不能...

补充内容 (2020-5-9 08:19):
经过这些天贴友的反馈,部分脚本被发现有打错字母或遗漏字母的情况。请大家下载一楼的脚本前,将我后面置顶的楼层看一下,错脚本已重新上传

changeVia.il.rar

334 Bytes, 下载次数: 1613 , 下载积分: 资产 -2 信元, 下载支出 2 信元

MagicCopy.il.rar

611 Bytes, 下载次数: 1112 , 下载积分: 资产 -2 信元, 下载支出 2 信元

MagicCopy_for_via.il.rar

804 Bytes, 下载次数: 715 , 下载积分: 资产 -2 信元, 下载支出 2 信元

CopyPinToCurrentWindow.il.rar

497 Bytes, 下载次数: 1321 , 下载积分: 资产 -2 信元, 下载支出 2 信元

AreaDensity.il.rar

465 Bytes, 下载次数: 1157 , 下载积分: 资产 -2 信元, 下载支出 2 信元

ChoicePinLayer.il.rar

320 Bytes, 下载次数: 761 , 下载积分: 资产 -2 信元, 下载支出 2 信元

QuickAlign.il.rar

384 Bytes, 下载次数: 1443 , 下载积分: 资产 -2 信元, 下载支出 2 信元

selectPolygon.il.rar

466 Bytes, 下载次数: 910 , 下载积分: 资产 -2 信元, 下载支出 2 信元

AddMosM1.il.rar

624 Bytes, 下载次数: 1270 , 下载积分: 资产 -2 信元, 下载支出 2 信元

 楼主| 发表于 2020-4-24 11:50:04 | 显示全部楼层
本帖最后由 chinarml 于 2020-4-24 11:58 编辑

单楼字数有上限的吗?
5)AreaDensity,用来测密度的。40nm以下对poly,AA,via,metal都有密度要求。在最初plan时,poly密度的问题尤为重要,很多人在plan时没考虑density问题,最后拉线完成了才发现poly density超了,此时再改对layout的影响就太大了。并且由于calibre drc的check规则,是从(0:0)开始画框check密度,很多时候底层drc没有报出density error,但上层整合时却出现了,此时再回头改底层,撑开空间,难如登天。
这个问题不止新人会犯,老人也会犯,有经验者会在plan时进行大致的计算,算出大致密度,拉开足够空间,但计算时总是会有误差。
使用这个脚本,可以精确算出框选的部分,你想要知道的任何layer的密度(可以是多个layer,比如poly和dummy poly总和)。
脚本使用方法:
LSW中将你要测的layer打开显示,其他层都不显示。鼠标在layout窗口按下快捷键F5,会出现框选的拉框,再点左键,确认拉框范围。
密度的结果在CIW窗口看,就是virtuoso软件的主体窗口。这里需要先打开返回信息的选项:
options -- LogFilter ,里面的选项全选。
刚刚操作完成之后,在CIW中会出现一行字符,其中最后一位的数字就是,比如0.4298031,这就是密度是42.98%

这个脚本最初是写成专用测poly density的,里面的list就只写了两个layer的lpp(poly和dummy poly),
但是后面做IO时,via的密度总是超,又没办法知道自己画的via的最大密度是多少,所以将脚本修改了一下,
变成可以测任意多个layer密度。

有一定动手能力的,又不测via和metal密度的,可以自行修改回去。那样其实使用起来更方便。
 楼主| 发表于 2020-4-24 14:48:30 | 显示全部楼层
6)ChoicePinLayer是CopyPinToCurrentWindow的前身,当时写这个主要用来一键选中所有pin,然后做yank和paste操作。之后有了CopyPinToCurrentWindow,这个脚本就很少用了。
也可以用来全选pin后check是否有多打pin和少打pin。
使用方法,在layout见面按下快捷键小键盘2(快捷键排满了,这种边缘脚本遭到无情排挤)
 楼主| 发表于 2020-4-24 15:35:17 | 显示全部楼层
7)QuickAlign这个快捷键是将virtuoso自带的QuickAlign功能拆分成两个,一个是spacing=0的一个是spacing=“数值”的。“Z”和“M”,Z是noSpacing,因为这个用的次数很频繁,所以设置在靠近左手的位置。M是指定数值的spacing。
这两个快捷键都具有强制性,即,按Z时,无论你上一次使用时spacing是否有数值,都会被强制变为0.
M相反,无论上次使用spacing是否为0,都会被强制改为你上一次设定的非0数值。

初次使用时需要做初始化操作:1)在layout界面,Edit--QuickAlign--F3--user spacing。(因为用脚本暗改form二级选项不能被激活,需要先手动激活)  2)在初次使用spacing不为0的选项时,先用Z--F3去设置一个非0数字。(此脚本工作原理是将非0的值写入一个隐藏文件,下次用M时读取此文件内数值。但需要先用Z输入非0数值去创建这个文件)  备注:#2只要执行一次,在你的根目录创建了文件之后就无需这步操作,#1需要在每次重新打开一个virtuoso时设置一次
 楼主| 发表于 2020-4-24 16:16:16 | 显示全部楼层
8)SelectPolygon这个脚本就是用来框选metal的,比如一把bus线你需要全部选中做修改,用快捷键9去框选,选多了可以用快捷键8去减选。
里面有一个metal的list,现在list中写入的是“M1”“M2”这些,如果你的工艺中metal不叫这个名字,你可以修改
 楼主| 发表于 2020-4-29 08:21:18 | 显示全部楼层


13728688465 发表于 2020-4-27 17:46
用了MagicCopy.il的脚本,但第一个procedure出现了too few arguments的错误,时间可以帮忙看一下出错在哪里 ...


我傻了,手打的时候定义函数的开头,忘记把函数名打上了。。。首页已经更新,或者有动手能力的可以自己打开脚本文件,在第一行
procedure(    的后面加上MagicCopy()  ,保存退出就行了。


 楼主| 发表于 2020-5-3 09:48:24 | 显示全部楼层
本帖最后由 chinarml 于 2020-5-3 10:11 编辑

9)AddMosM1这个脚本,最初始的版本是我在刚刚开始学习skill时在eetop上下载的第一个脚本。功能是在mos的S/D/G上加盖一层metal1,并且加宽。这个脚本我更新过不下10次,因为是我的第一个脚本,总想着各种优化,各种修改。最初的算法是识别mos的原点,然后根据mos的length去计算metal1的位置,然后画path。前几天在eetop上看到另一个帖子写的相同功能的脚本,算法是获取mos的所有shapes,然后获取其中的metal1,然后将这层metal1复制了放进一个新建的cell内,再调用进来盖在mos上面,再打散。这种算法给了我新的思路。结合我的MagicCopy的思路,我更新了现在这版脚本。
使用方法:选中mos,按下快捷键7
脚本中第三行是M1_width = 0.1 这个可以自行调整。我以前迭代的版本中有一版是做了个form弹窗,可以手动输入这个width值,但后面我就取消了,对于一个case来说,mos上的metal1的width只要定下来一个值就不用再改了。如果每次使用都弹出form反而会降低效率。

这里我说一下这个脚本为什么有的人喜欢用,并且即使没有脚本也要手动去加宽mos上的metal1。我敢断言,会这么做的,一定是经验丰富的版图工程师,并且对版图的质量有严格的要求,俗称,版图的艺术。因为版图完成后是要后仿迭代的,和版图工程师相关的就是EMIR和RC,其中IR问题经常遇到,就是power的电压下降,因为从PAD到你mos的metal1这条通路会经过很多层metal,很多层via,如果这条通路不够强,R太大,就会使IR太大,这样电压在到达mos时已经降低了很多。这在后仿时是有相关要求的,比如1.8V的power在底层block的IR要小于15mV,IP的IR要小于40mV。回归主题,mos上的metal1打宽一些,可以降低metal1的R,如果是小制程的,via可以打成长孔的,加宽metal1之后可以打一个横向的via,增加mos上via的过流能力,减小R。这里说明一下,via的电阻相对于metal来说是非常大的,一个方孔可能会有2 ohm,所以对于power 、gnd的plan,metal要尽量宽,via要尽量多。
上面说的基本和脚本无关,是成为一个好的版图工程师的基本素养。愿意听的就借鉴一下。对版图很随意的,可以弃之如蔽履。

这里老王卖瓜自卖自夸一波,我的版图,后仿EMIR很多时候是没有需要修的地方的,偶尔有需要改的地方也只是IR差了一点点,稍稍修一修就OK了。这是好的版图习惯所形成的实力。有些人画的版图不止看着丑,而且EMIR跑出来一片红,要花费大量时间去修改加强。
 楼主| 发表于 2020-5-5 08:30:07 | 显示全部楼层
本帖最后由 chinarml 于 2020-5-5 16:39 编辑

一楼不能编辑了,后续增加的脚本将通过回复置顶来实现。
10)此脚本时功能性脚本,不是用来画图的。virtuoso XL出来的device上默认不带label。
这个脚本就是在XL出来之后用的,label现在是用的"TXT" "ttxt" 层打的,这是smic的text layer。其他工艺的请自行修改。另外这个脚本里面我增加了leAttachFig()函数,打出来的label会attach在deivce上面。
有不需要这个功能的可以在这个函数前面加“;”屏蔽掉,或者直接删除。
使用方法:在刚刚XL出来的layout界面按下快捷键  小键盘3



补充内容 (2020-5-21 13:22):
里面有一行代码写错了,cv = geGetSelSet() 请改为 cv = geGetEditCellView()

CreateLabelXL.il.rar

343 Bytes, 下载次数: 808 , 下载积分: 资产 -2 信元, 下载支出 2 信元

 楼主| 发表于 2020-5-7 08:20:22 | 显示全部楼层
AddMosM1这个脚本在一楼那个算法有错误,单颗mos没问题。array的mos会有问题。因为当时调试时用的2x2的array,这种情况下没有把问题暴露出来。
昨天在我自己用时才发现。现在已经更正,但是一楼的帖子已经不能编辑了。一楼那个大家不要下载了。下载这个帖子里的脚本。

AddMosM1.il.rar

644 Bytes, 下载次数: 1392 , 下载积分: 资产 -2 信元, 下载支出 2 信元

 楼主| 发表于 2020-5-7 12:06:41 | 显示全部楼层
本帖最后由 chinarml 于 2020-5-8 07:57 编辑

11)我看群里有人要方括号和尖括号转换的脚本,我抽时间写了一个。使用方法:在layout界面,按下快捷键:
小键盘4  方括号变尖括号  
小键盘5  尖括号变方括号

备注:只能应用到当前层,底层的label并不能被修改
@前十个下载的,脚本漏打了字符。应该是运行不了的。现在已经更新。

convertBrackets.il.rar

396 Bytes, 下载次数: 826 , 下载积分: 资产 -2 信元, 下载支出 2 信元

 楼主| 发表于 2020-5-8 08:03:46 | 显示全部楼层


wangzhongyan 发表于 2020-5-7 15:52
load "/home/CopyPinToCurrentWindow.il"
function CopyPinToCurrentWindow redefined
t


楼下正解,sorry,因为我自己没有电脑,没办法把手打的脚本再测试一次。导致经常有打错字母或遗漏字母的情况发生。

这个CopyPinToCurrentWindow的脚本里面有一个dbGetObj函数,这个是打错了,脚本不能运行。
应该是ddGetObj。我这里重新上传一下(一楼的附件不能修改了)。有已经下载的,可以直接自己打开脚本修改。


CopyPinToCurrentWindow.il.rar

527 Bytes, 下载次数: 788 , 下载积分: 资产 -2 信元, 下载支出 2 信元

 楼主| 发表于 2020-5-8 12:36:12 | 显示全部楼层


w2313190 发表于 2020-5-8 10:01
大神,我在使用changevia.il 脚本是只能row方向能增加或减少数量另一个方向不行啊,会报错。报can't handle ...


这个脚本中有一个获取via的row和column属性的语句。一楼的脚本中,这两个属性名称分别是  cutRows 和 cutCols
这个属性名称和technology file的定义有关。当时我应该是用的T22的写的脚本并做的测试。

刚刚看了一下,smic的属性名称不是这个,是cutRows 和 cutColumns

如果有下载一楼的额脚本不能用的,请自行将脚本中的三个cutCols改成cutColumns

也可以下载下面的更新的脚本,这里面我已经改好了。

changeVia.il.rar

333 Bytes, 下载次数: 673 , 下载积分: 资产 -2 信元, 下载支出 2 信元

 楼主| 发表于 2020-5-16 12:41:05 | 显示全部楼层


dongyang5180 发表于 2020-5-15 16:14
大神好,skill小菜鸟,最近在拜读你的skill,第一个脚本MagicCopy.il有两个问题,一xCoord(Box)少了r,之前 ...


刚刚逐字逐句检查了一下,MagicCopy脚本里有三处错误。除了你说的两个xCood应改为xCoord以外,倒数第13行的 。。。list FlatList。。。应改为。。。listNew FlatList。。。

已经下载的可以自行修改,这里再重新上传一份修改过的。
MagicCopy.il.rar (609 Bytes, 下载次数: 584 )




 楼主| 发表于 2020-5-18 20:12:53 | 显示全部楼层
本帖最后由 chinarml 于 2020-5-18 20:15 编辑


iamcathy 发表于 2020-5-18 11:33
MagicCopy_for_via脚本也没有实验成功,除了key“5”写到括号外面的问题,框选报错如附件所示。请过目。 ...


感谢贴友的回复,MagicCopy_for_via这个脚本有一个错误一个遗漏:
1,最后一行,定义快捷键的“shift<Key5>”请改为“shift<Key>5”
2,代码中间部分遗漏了一行:
orient = nth(1 cadr(obj))
objVia = car(obj)
viaName = objVia~>viaHeader~>viaDefName
请将红色字体的这行加上。

这里贴一个修改后的。自己能动手改的就不用下这个了。

MagicCopy_for_via.il.rar

817 Bytes, 下载次数: 465 , 下载积分: 资产 -2 信元, 下载支出 2 信元

 楼主| 发表于 2020-5-21 13:25:22 | 显示全部楼层


yzzhong 发表于 2020-5-20 15:53
大佬,我试了一下,load这个脚本后需要选中device然后按快捷键才会执行,但是会报下面的error
*Error*dbCr ...


感谢贴友回复,刚刚才发现,里面有一行代码写错了。cv = geGetSelSet() 应该改为 cv = geGetEditCellView()

已经下载的自己改一下,这里重新上传一份。使用方法不变,不需要选中device,直接在layout界面按快捷键小键盘3就行了。
CreateLabelXL.il.rar (350 Bytes, 下载次数: 504 )




 楼主| 发表于 2020-6-6 17:52:02 | 显示全部楼层


maomao198477 发表于 2020-6-6 10:34
procedure(MagicCopy()
let((cv objs Box transList objList objTransList newObj)
cv=geGetEditCellView() ...


objTransList==mapcar('list objs transList)  多了一个等号,应该是objTransList=mapcar('list objs transList)

眼神不好,看过好几次都没发现。

你改了再试试,如果可以了回复一下,我再更新一版。

点评

大神,神奇的magiccopy,可以了  发表于 2020-6-10 20:17
 楼主| 发表于 2020-6-6 17:56:53 | 显示全部楼层
有回复说在使用AddMosM1脚本时,因为用的是616,copy上来的metal1转换成path的函数在616没有。
我这里写了两个脚本,一个是path转polygon的,一个是rect转path的。
注意,这里是rect转path,不是polygon转path。rect就是矩形,这个脚本简单,完全可以用来修复AddMOSM1这个脚本在616中的使用。
我另外写了一个polygon+rect转path的,那个很长,有机会我再写了上传。

用法:都是选中metal,按下快捷键,一个是小键盘4,一个是小键盘5.

convertPath2Polygon.il.rar

380 Bytes, 下载次数: 288 , 下载积分: 资产 -2 信元, 下载支出 2 信元

convertPolygon2Path.il.rar

500 Bytes, 下载次数: 298 , 下载积分: 资产 -2 信元, 下载支出 2 信元

点评

请教下跟AddMosM1怎么结合起来,先load 一个,再load 一个,还是两个procedure,还是一个procedure放一个procedure  发表于 2020-6-10 21:22
 楼主| 发表于 2020-6-17 19:44:14 | 显示全部楼层
本帖最后由 chinarml 于 2020-6-22 15:45 编辑


chinarml 发表于 2020-6-6 17:52
objTransList==mapcar('list objs transList)  多了一个等号,应该是objTransList=mapcar('list objs tra ...


传最后一版,贴友测试ok的。
这版与13楼的脚本,区别只在有一处 “==” 改为“=

是我错了,还有一处,其中一个函数leConvertPolygonToPath是把copy上来的metal变成path。
之前没人打开这个设置,所以没人提出这个函数有错。前面的两版脚本中这个函数都错写成leConvertPolyToPath


这里最后更新一下



MagicCopy.il.rar

608 Bytes, 下载次数: 606 , 下载积分: 资产 -2 信元, 下载支出 2 信元

 楼主| 发表于 2020-6-18 10:40:39 | 显示全部楼层
本帖最后由 chinarml 于 2020-6-18 11:39 编辑

AutoCutBus这个脚本很好用,一直想分享,但因为我一直用的这个脚本是已有的(不属于我),我不能分享出去。
最近我独立写了一个,整体思路类似,但不相同。(单从脚本内容来看,除了冒泡排序的部分,其他完全不同)
简单说就是先一通面目全非脚,然后再一套还我漂漂拳

功能:两把bus线,一横一竖放置,全部选中,按下快捷键,自动切断到两两对接,组成L型。
使用方法:
选中目标metal
按下快捷键:小键盘4 、 小键盘5 (分别是正切和反切,具体样子试一下就知道了)


AutoCutBus.il.rar

1.31 KB, 下载次数: 1443 , 下载积分: 资产 -2 信元, 下载支出 2 信元

 楼主| 发表于 2020-6-23 17:31:12 | 显示全部楼层
这里更新一版AddMOSM1脚本,有贴友反应说自己的cadence没有polygon转path的那个函数,或者函数无效的。
我写了一个专门将rect转成path的独立的脚本。这个脚本可以独立运行,但不能直接嵌入。

现在我将这个rect转path的脚本嵌入到AddMOSM1里面去(因为要嵌入进去,需要稍作修改)。


AddMosM1_Custom.il.rar

883 Bytes, 下载次数: 717 , 下载积分: 资产 -2 信元, 下载支出 2 信元

 楼主| 发表于 2020-7-8 11:06:28 | 显示全部楼层
本帖最后由 chinarml 于 2020-7-14 20:04 编辑

NOTICE!!!
NOTICE!!!
NOTICE!!!
刚刚发现我的所有脚本都能在read only模式下进行操作,并且在自己电脑可以看到修改后的结果。
但此修改实际上并没有保存进库里面,其他人刷新后是看不到我的修改的。只有我重新进入我修改的cell,拿取edit权限时,会弹出“数据已经修改,是否保存”的提示,此时提示的修改就是之前用脚本做的修改,点击保存才会把之前的修改存住。然后其他人再刷新就可以看到你改动的内容了。


因为实际操作时经常从顶层进入,顶层没拿权限的话,底层默认没有edit权限,所以用我的脚本时有很大风险(改了,但没存上)


就此问题我写了一个插件脚本,testEditMode.il,此脚本独立存在,需要单独load。然后在我所有脚本的第三行(let函数设置变量的下一行)加上一行:testEditMode()  然后保存退出。
举例:增加红色字体的一行,用于检测是否为Edit权限,如果是,脚本继续,如果不是,脚本终止,并弹出提示。
procedure(xxxxx()
let((cv objs ....)
testEditMode()   
cv = geGetEditCellView()
);let
);proc




这样再使用脚本时,如果cellView是readOnly的,脚本会终止运行,并且layout中弹出一个简易提示框:
ReadOnly!!!
ReadOnly!!!
ReadOnly!!!
此时随便点一下鼠标或者按ESC就可以去掉这个小对话提示框。然后拿取Edit权限后再使用操作



testEditMode.il.rar

241 Bytes, 下载次数: 539 , 下载积分: 资产 -2 信元, 下载支出 2 信元

 楼主| 发表于 2020-7-13 08:24:42 | 显示全部楼层
本帖最后由 chinarml 于 2020-7-14 11:32 编辑


jincanc 发表于 2020-7-10 14:44
大佬我这提示*Error* eval: undefined function - leConvertPolygonToPath 怎么办啊
用的你Cutbus那个脚本 ...


看置顶楼层,最后几个里面有一个是AddMosM1_custom.il那个,AddMosM1.il里面也用了leConvertPolygonToPath这个函数,有人和你一样,说没有这个函数。
我写了替代的自定义函数,然后整合到AddMosM1.il里面去了,就是AddMosM1_custom.il。里面多了一段procedure开头的自定义函数,然后把此函数的函数名替换leConvertPolygonToPath就行了。

注意,我这个自定义函数只适用于一条直线。如果原始的线有弯折是不生效的。

你在用的时候如果bus线有打弯的,你可以先全部切断,用完了之后再对接上。


另外此函数用到leConvertPolygonToPath的部分是用来判断线是否为polygon和pathSeg类型的线,如果是就转换成path,如果不是就不做修改。
所以如果你的线本身就是path,那么实际上是不需要这段判断句的,完全可以屏蔽掉。
;****************************************************************
;convert pathSeg to path
objs = setof(x objs x~>objType == "path" || x~>objType == "pathSeg")
Hlist = list()
Vlist = list()
foreach(obj objs
case(obj ~> objType
("rect" temp0 = leConvertPolygonToPath(obj) geSelectObject(temp0))
("pathSeg" temp0 = leConvertPolygonToPath(leConvertShapeToPolygon(obj)) dbDelectObject(obj) geSelectObject(temp0))
("path" temp0 = obj)
);case
objs_new = append1(objs_new temp0)
);foreach
;****************************************************************
把上面这一段改成:首位加红色分号是屏蔽一行,红色字体是新增加的一行,注意,不是全部都屏蔽掉的。
;****************************************************************
;convert pathSeg to path
; objs = setof(x objs x~>objType == "path" || x~>objType == "pathSeg")

objs_new = setof(x objs x~>objType == "path")
Hlist = list()
Vlist = list()
; foreach(obj objs
;  case(obj ~> objType
;  ("rect" temp0 = leConvertPolygonToPath(obj) geSelectObject(temp0))
;  ("pathSeg" temp0 = leConvertPolygonToPath(leConvertShapeToPolygon(obj)) dbDelectObject(obj) geSelectObject(temp0))
;  ("path" temp0 = obj)
;  );case
; objs_new = append1(objs_new temp0)
; );foreach
;****************************************************************

修改完成后保存退出。

上面说了两种方式处理脚本:
1,增加我的自定义函数,方法参照AddMosM1_custom.il
优点:保持原始脚本功能性不变,可以对polygon和pathSeg类型的线进行操作。
缺点:如果目标线中有polygon和pathSeg类型的线,那么只能处理矩形的线,对于弯折的线不能操作
2,直接跳过判断句,修改方法如上面贴的代码:
优点:修改简单
缺点:不能对polygon和pathSeg线操作
 楼主| 发表于 2020-7-21 08:35:06 | 显示全部楼层


zsen 发表于 2020-7-20 12:04
把代码14行的“Box”改成“BOX”就可以了


这个脚本我电脑存的备份现在是正确的,没有Box这个变量。这个问题好像之前有人遇到过,我做了修改但我没更新脚本到置顶楼层。
这里再上传一次吧,避免太多人遇到这个问题无法使用。

AreaDensity.il.rar

461 Bytes, 下载次数: 587 , 下载积分: 资产 -2 信元, 下载支出 2 信元

 楼主| 发表于 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的脚本,思路和这个差不多,单因为要单独设置快捷键,所以没整合到这个脚本里面。
等后面有空了再抄写下来上传吧。这种脚本太长了,手打的容易出错,错一个字母就不能用。



CreateStackPath_for_s28.il.rar

1.58 KB, 下载次数: 447 , 下载积分: 资产 -2 信元, 下载支出 2 信元

发表于 2020-4-24 11:01:13 | 显示全部楼层
好东西,谢谢分享
发表于 2020-4-24 11:28:06 | 显示全部楼层

好东西,谢谢分享
发表于 2020-4-24 18:55:23 | 显示全部楼层
大佬 牛啊!
发表于 2020-4-24 19:54:09 | 显示全部楼层
xue xi
发表于 2020-4-24 23:58:42 来自手机 | 显示全部楼层
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-22 15:30 , Processed in 0.047399 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表