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

查看: 263760|回复: 794

[资料]

自己写的一些非常好用的skill脚本

[复制链接]

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

电梯直达

1#

发表于 2020-4-24 09:38:48

|

只看该作者

|倒序浏览

|阅读模式

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

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

×

本帖最后由 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

2020-4-27 14:08 上传

点击文件名下载附件

下载积分:

资产 -2 信元, 下载支出 2 信元

334 Bytes, 下载次数: 1747

, 下载积分:

资产 -2 信元, 下载支出 2 信元

MagicCopy.il.rar

2020-4-29 08:22 上传

点击文件名下载附件

下载积分:

资产 -2 信元, 下载支出 2 信元

611 Bytes, 下载次数: 1217

, 下载积分:

资产 -2 信元, 下载支出 2 信元

MagicCopy_for_via.il.rar

2020-4-24 10:38 上传

点击文件名下载附件

下载积分:

资产 -2 信元, 下载支出 2 信元

804 Bytes, 下载次数: 781

, 下载积分:

资产 -2 信元, 下载支出 2 信元

CopyPinToCurrentWindow.il.rar

2020-4-24 11:17 上传

点击文件名下载附件

下载积分:

资产 -2 信元, 下载支出 2 信元

497 Bytes, 下载次数: 1439

, 下载积分:

资产 -2 信元, 下载支出 2 信元

AreaDensity.il.rar

2020-4-24 11:37 上传

点击文件名下载附件

下载积分:

资产 -2 信元, 下载支出 2 信元

465 Bytes, 下载次数: 1254

, 下载积分:

资产 -2 信元, 下载支出 2 信元

ChoicePinLayer.il.rar

2020-4-24 14:50 上传

点击文件名下载附件

下载积分:

资产 -2 信元, 下载支出 2 信元

320 Bytes, 下载次数: 822

, 下载积分:

资产 -2 信元, 下载支出 2 信元

QuickAlign.il.rar

2020-4-24 15:15 上传

点击文件名下载附件

下载积分:

资产 -2 信元, 下载支出 2 信元

384 Bytes, 下载次数: 1585

, 下载积分:

资产 -2 信元, 下载支出 2 信元

selectPolygon.il.rar

2020-4-24 16:12 上传

点击文件名下载附件

下载积分:

资产 -2 信元, 下载支出 2 信元

466 Bytes, 下载次数: 970

, 下载积分:

资产 -2 信元, 下载支出 2 信元

AddMosM1.il.rar

2020-5-3 09:27 上传

点击文件名下载附件

下载积分:

资产 -2 信元, 下载支出 2 信元

624 Bytes, 下载次数: 1410

, 下载积分:

资产 -2 信元, 下载支出 2 信元

收藏942

转播

分享3

淘帖0

支持123

反对0

回复

使用道具

举报

提升卡

沉默卡

喧嚣卡

变色卡

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

顶 来自 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密度的,可以自行修改回去。那样其实使用起来更方便。

EETOP创芯人才网职位发布入口

回复

支持 5

反对 0

使用道具

举报

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

顶 来自 3#

楼主|

发表于 2020-4-24 14:48:30

|

只看该作者

6)ChoicePinLayer是CopyPinToCurrentWindow的前身,当时写这个主要用来一键选中所有pin,然后做yank和paste操作。之后有了CopyPinToCurrentWindow,这个脚本就很少用了。

也可以用来全选pin后check是否有多打pin和少打pin。

使用方法,在layout见面按下快捷键小键盘2(快捷键排满了,这种边缘脚本遭到无情排挤)

回复

支持 0

反对 2

使用道具

举报

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

顶 来自 4#

楼主|

发表于 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时设置一次

回复

支持 5

反对 0

使用道具

举报

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

顶 来自 5#

楼主|

发表于 2020-4-24 16:16:16

|

只看该作者

8)SelectPolygon这个脚本就是用来框选metal的,比如一把bus线你需要全部选中做修改,用快捷键9去框选,选多了可以用快捷键8去减选。

里面有一个metal的list,现在list中写入的是“M1”“M2”这些,如果你的工艺中metal不叫这个名字,你可以修改

EETOP创芯人才网简历投递入口

回复

支持

反对

使用道具

举报

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

顶 来自 #

楼主|

发表于 2020-4-29 08:21:18

|

只看该作者

13728688465 发表于 2020-4-27 17:46

用了MagicCopy.il的脚本,但第一个procedure出现了too few arguments的错误,时间可以帮忙看一下出错在哪里 ...

我傻了,手打的时候定义函数的开头,忘记把函数名打上了。。。首页已经更新,或者有动手能力的可以自己打开脚本文件,在第一行

procedure( 的后面加上MagicCopy() ,保存退出就行了。

EETOP创芯人才网职位发布入口

回复

支持 1

反对 0

使用道具

举报

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

顶 来自 #

楼主|

发表于 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跑出来一片红,要花费大量时间去修改加强。

EETOP创芯人才网简历投递入口

回复

支持 18

反对 0

使用道具

举报

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

顶 来自 #

楼主|

发表于 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

2020-5-5 16:39 上传

点击文件名下载附件

下载积分:

资产 -2 信元, 下载支出 2 信元

343 Bytes, 下载次数: 864

, 下载积分:

资产 -2 信元, 下载支出 2 信元

EETOP创芯人才网职位发布入口

回复

支持 1

反对 0

使用道具

举报

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

顶 来自 #

楼主|

发表于 2020-5-7 08:20:22

|

只看该作者

AddMosM1这个脚本在一楼那个算法有错误,单颗mos没问题。array的mos会有问题。因为当时调试时用的2x2的array,这种情况下没有把问题暴露出来。

昨天在我自己用时才发现。现在已经更正,但是一楼的帖子已经不能编辑了。一楼那个大家不要下载了。下载这个帖子里的脚本。

AddMosM1.il.rar

2020-5-7 08:20 上传

点击文件名下载附件

下载积分:

资产 -2 信元, 下载支出 2 信元

644 Bytes, 下载次数: 1506

, 下载积分:

资产 -2 信元, 下载支出 2 信元

EETOP创芯人才网简历投递入口

回复

支持 5

反对 0

使用道具

举报

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

顶 来自 #

楼主|

发表于 2020-5-7 12:06:41

|

只看该作者

本帖最后由 chinarml 于 2020-5-8 07:57 编辑

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

小键盘4 方括号变尖括号

小键盘5 尖括号变方括号

备注:只能应用到当前层,底层的label并不能被修改

@前十个下载的,脚本漏打了字符。应该是运行不了的。现在已经更新。

convertBrackets.il.rar

2020-5-8 07:55 上传

点击文件名下载附件

下载积分:

资产 -2 信元, 下载支出 2 信元

396 Bytes, 下载次数: 886

, 下载积分:

资产 -2 信元, 下载支出 2 信元

回复

支持 1

反对 3

使用道具

举报

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

顶 来自 #

楼主|

发表于 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

2020-5-8 08:03 上传

点击文件名下载附件

下载积分:

资产 -2 信元, 下载支出 2 信元

527 Bytes, 下载次数: 841

, 下载积分:

资产 -2 信元, 下载支出 2 信元

回复

支持 1

反对 0

使用道具

举报

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

顶 来自 #

楼主|

发表于 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

2020-5-8 12:35 上传

点击文件名下载附件

下载积分:

资产 -2 信元, 下载支出 2 信元

333 Bytes, 下载次数: 722

, 下载积分:

资产 -2 信元, 下载支出 2 信元

回复

支持 2

反对 0

使用道具

举报

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

顶 来自 #

楼主|

发表于 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 , 下载次数:

645 )

2020-5-16 12:40 上传

点击文件名下载附件

回复

支持

反对

使用道具

举报

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

顶 来自 #

楼主|

发表于 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”请改为“shift5”

2,代码中间部分遗漏了一行:

orient = nth(1 cadr(obj))

objVia = car(obj)

viaName = objVia~>viaHeader~>viaDefName

请将红色字体的这行加上。

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

MagicCopy_for_via.il.rar

2020-5-18 20:14 上传

点击文件名下载附件

下载积分:

资产 -2 信元, 下载支出 2 信元

817 Bytes, 下载次数: 497

, 下载积分:

资产 -2 信元, 下载支出 2 信元

回复

支持 2

反对 0

使用道具

举报

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

顶 来自 #

楼主|

发表于 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 , 下载次数:

542 )

2020-5-21 13:24 上传

点击文件名下载附件

回复

支持

反对

使用道具

举报

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

顶 来自 #

楼主|

发表于 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)

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

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

点评

dongyang5180

大神,神奇的magiccopy,可以了

发表于 2020-6-10 20:17

回复

支持 1

反对 0

使用道具

举报

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

顶 来自 #

楼主|

发表于 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

2020-6-6 17:56 上传

点击文件名下载附件

下载积分:

资产 -2 信元, 下载支出 2 信元

380 Bytes, 下载次数: 312

, 下载积分:

资产 -2 信元, 下载支出 2 信元

convertPolygon2Path.il.rar

2020-6-6 17:56 上传

点击文件名下载附件

下载积分:

资产 -2 信元, 下载支出 2 信元

500 Bytes, 下载次数: 325

, 下载积分:

资产 -2 信元, 下载支出 2 信元

点评

dongyang5180

请教下跟AddMosM1怎么结合起来,先load 一个,再load 一个,还是两个procedure,还是一个procedure放一个procedure

发表于 2020-6-10 21:22

回复

支持

反对

使用道具

举报

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

顶 来自 #

楼主|

发表于 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

2020-6-22 15:41 上传

点击文件名下载附件

下载积分:

资产 -2 信元, 下载支出 2 信元

608 Bytes, 下载次数: 667

, 下载积分:

资产 -2 信元, 下载支出 2 信元

回复

支持

反对

使用道具

举报

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

顶 来自 #

楼主|

发表于 2020-6-18 10:40:39

|

只看该作者

本帖最后由 chinarml 于 2020-6-18 11:39 编辑

AutoCutBus这个脚本很好用,一直想分享,但因为我一直用的这个脚本是已有的(不属于我),我不能分享出去。

最近我独立写了一个,整体思路类似,但不相同。(单从脚本内容来看,除了冒泡排序的部分,其他完全不同)

简单说就是先一通面目全非脚,然后再一套还我漂漂拳

功能:两把bus线,一横一竖放置,全部选中,按下快捷键,自动切断到两两对接,组成L型。

使用方法:

选中目标metal

按下快捷键:小键盘4 、 小键盘5 (分别是正切和反切,具体样子试一下就知道了)

AutoCutBus.il.rar

2020-6-18 10:40 上传

点击文件名下载附件

下载积分:

资产 -2 信元, 下载支出 2 信元

1.31 KB, 下载次数: 1569

, 下载积分:

资产 -2 信元, 下载支出 2 信元

回复

支持 7

反对 0

使用道具

举报

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

顶 来自 #

楼主|

发表于 2020-6-23 17:31:12

|

只看该作者

这里更新一版AddMOSM1脚本,有贴友反应说自己的cadence没有polygon转path的那个函数,或者函数无效的。

我写了一个专门将rect转成path的独立的脚本。这个脚本可以独立运行,但不能直接嵌入。

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

AddMosM1_Custom.il.rar

2020-6-23 17:30 上传

点击文件名下载附件

下载积分:

资产 -2 信元, 下载支出 2 信元

883 Bytes, 下载次数: 774

, 下载积分:

资产 -2 信元, 下载支出 2 信元

回复

支持 4

反对 0

使用道具

举报

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

顶 来自 #

楼主|

发表于 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

2020-7-8 11:06 上传

点击文件名下载附件

下载积分:

资产 -2 信元, 下载支出 2 信元

241 Bytes, 下载次数: 598

, 下载积分:

资产 -2 信元, 下载支出 2 信元

回复

支持 4

反对 0

使用道具

举报

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

顶 来自 #

楼主|

发表于 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线操作

回复

支持

反对

使用道具

举报

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

顶 来自 #

楼主|

发表于 2020-7-21 08:35:06

|

只看该作者

zsen 发表于 2020-7-20 12:04

把代码14行的“Box”改成“BOX”就可以了

这个脚本我电脑存的备份现在是正确的,没有Box这个变量。这个问题好像之前有人遇到过,我做了修改但我没更新脚本到置顶楼层。

这里再上传一次吧,避免太多人遇到这个问题无法使用。

AreaDensity.il.rar

2020-7-21 08:34 上传

点击文件名下载附件

下载积分:

资产 -2 信元, 下载支出 2 信元

461 Bytes, 下载次数: 633

, 下载积分:

资产 -2 信元, 下载支出 2 信元

回复

支持

反对

使用道具

举报

chinarml

chinarml

当前离线

积分40380

IP卡

狗仔卡

顶 来自 #

楼主|

发表于 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

2020-10-21 19:40 上传

点击文件名下载附件

下载积分:

资产 -2 信元, 下载支出 2 信元

1.58 KB, 下载次数: 483

, 下载积分:

资产 -2 信元, 下载支出 2 信元

回复

支持 3

反对 0

使用道具

举报

suochuan121

suochuan121

当前离线

积分13818

IP卡

狗仔卡

6#

发表于 2020-4-24 11:01:13

|

只看该作者

好东西,谢谢分享

回复

支持

反对

使用道具

举报

cxa

cxa

当前离线

积分10579

IP卡

狗仔卡

7#

发表于 2020-4-24 11:28:06

|

只看该作者

好东西,谢谢分享

回复

支持 1

反对 0

使用道具

举报

hccaiwh

hccaiwh

当前离线

积分45211

IP卡

狗仔卡

8#

发表于 2020-4-24 18:55:23

|

只看该作者

大佬 牛啊!

回复

支持

反对

使用道具

举报

student321

student321

当前离线

积分368719

IP卡

狗仔卡

9#

发表于 2020-4-24 19:54:09

|

只看该作者

xue xi

回复

支持

反对

使用道具

举报

joeyang

joeyang

当前离线

积分2210

IP卡

狗仔卡

10#

发表于 2020-4-24 23:58:42

来自手机

|

只看该作者

谢谢分享

回复

支持 0

反对 1

使用道具

举报