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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 13238|回复: 30

[原创] 脚本分享-skill练手-提取pcell中MOS管的金属层

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

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

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

x
本脚本编写目标
1. 提取PCELL中的金属1信息,在顶层生成一致的金属1图层,暂时只考虑金属层图形为举矩形;
2. 同时处理多个选中的instance
3. 能处理各种旋转角度

编写过程:
1. 先考虑一个instance的情况,本步骤只考虑“R0”情况
鼠标选中一个instance,skill获取这个instance的id,相关语句如下:
tdid=car(geGetSelSet())
;geGetSelSet(),该函数用于获取当前选中的列表
; car,用于获取目标列表中的第一个元素

定义金属1的变量值:
td_mt=“M1”
下一步要获取PCELL实例中所有金属1的形状,实现办法是先获取所有形状
tdshapelist=tdid~>master~>shapes
;master是pcell在数据库中虚拟化的一个视图,与一般instance的区别是,该视图的相关信息与原视图并不一致,而是与相关的参数有关,比如宽长不同器件的各个图层都会有所不同。而一般器件还有一个办法是可以打开对应的layout视图来获取shapes信息,而pcell必须用master。

现在遍历所有shape,如果shape的layerName与金属1名称一致,那么就生成相应的图层。
采用以下结构进行处理
foreach(tdshapeid tdshapelist
  when(tdshapeid~>layerName==td_mt
    执行生成矩形图层的语句

)

)
对于一个矩形图层,其坐标信息与bBox一致,因此我采用bBox作为该矩形图形的坐标信息,利用bBox的左下角和右上角的信息左右矩形参数
相关语句如下
tdbB=tdshapeid~>bBox
;获取bBox坐标信息
tdx1=car(car(tdbB))
tdx2=car(car(cdr(tdbB)))
tdy1=car(cdr(car(tdbB)))
tdy2=car(cdr(car(cdr(tdbB))))
;获取矩形左下角和右上角的xy坐标。
;cdr,用户获取目标List中的最后一个元素,与car不同的是,它获取的还是一个List,因此对于不能使用list的情况,还需要用一个car真正获取最后一个元素。

需要坐标的是,上述获取的坐标信息只是底层master中的坐标信息,而不是当前视图下的坐标信息,需要根据当前instance的坐标信息来做更新
tdx=car(tdid~>xy)
tdy=car(cdr(tdid~>xy))
tdx1=car(car(tdbB))+tdx
tdx2=car(car(cdr(tdbB)))+tdx
tdy1=car(cdr(car(tdbB)))+tdy
tdy2=car(cdr(car(cdr(tdbB))))+tdy
;tdx和tdy是当前instance的xy坐标值
最后一个就是生成矩形图形
tdmout=dbCreateRect(tdid~>cellView td_mt list(tdx1:tdy1 tdx2:tdy2))

;dbCreateRect(),该函数用于生成一个矩形图形,函数格式dbCreateRect(cellView_id LayerName 坐标列表)
1.png 2.png
2. 下面分析以下旋转角度的问题
旋转角度总共有八种,最简单的思路是可以分别对待处理,比如用when语句来分别处理坐标信息
when(tdid~>orient=="R0"
执行获取坐标语句

)
…………
when(tdid~>orient=="MXR90"
执行获取坐标语句

)
上述办法虽然可行,但有些繁琐。这里我们采用新建一个单元来生成图形,然后调入这个单元并打散来规避繁琐的旋转角度问题。
首先定义个临时cell的名字,我这里是采用一个固定名称“zcell_tempcellformt”
td_tgn="zcell_tempcellformt"
td_tgcv=dbOpenCellViewByType(tdid~>cellView~>libName td_tgn "layout" "maskLayout" "w")
;在当前lib下打开一个zell_tempcellformt单元的layout视图,以覆盖方式打开。
需要注意的是,上一个步骤中生成坐标时考虑了所选instance的坐标信息,但是这里我们只需要提取shape中的坐标信息就可以了,所选器件的坐标可以在调入新生成单元的过程中定义。
tdbB=tdshapeid~>bBox
tdx1=car(car(tdbB))
tdx2=car(car(cdr(tdbB)))
tdy1=car(cdr(car(tdbB)))
tdy2=car(cdr(car(cdr(tdbB))))

tdmout=dbCreateRect(td_tgcv td_mt list(tdx1:tdy1 tdx2:tdy2))
;上述语句是定义坐标参数和生成图形的语句,需要注意的除了坐标运算有所改变外,还需要注意的是dbCreateRect中对应的单元视图id跟之前不同。
完成shape遍历后,保存新建的单元
dbSave(td_tgcv)
在操作单元中调入上述新建的单元,旋转方向与所选单元一致,坐标也一致。
td_inst_add=dbCreateInst(tdid~>cellView td_tgcv td_tgn tdid~>xy tdid~>orient)
关闭新建单元的id
dbClose(td_tgcv)
打散新调入的Instance
td_slt=dbFlattenInst(td_inst_add 1)
3.png 4.png
3. 上面解决了旋转角度的问题,下面解决多个器件的问题,在此假定所有的pcell都是instance类型,并且存在同一个工艺库中,并且当前视图中不存在group。希望实现的功能是ctrl+a全选后,脚本运行后在所有Pcell上提取金属1的图形。
思路如下,遍历所有选中的内容,如果是instance并且是目标工艺库中的单元的话,则执行金属1的提取
tdidlist=geGetSelSet()
;获取所有的已选对象列表
foreach(tdid tdidlist
when(tdid~>objType=="inst" && tdid~>libName=="process_library"
  金属1提取语句




;遍历所有已选对象
;when语句中判断对象是不是inst类型并且在工艺库中。
5.png 6.png
完整脚本总共24行,load执行之前需要更改第二行td_mt后面的金属1名称,默认是“M1”,第三行libName后面的工艺库名称,默认是“process_library”。
本脚本在IC6.1.8-64吧。500.4环境下编写,估计IC6系列应该都可以运行。

每一个脚本都有更好的方案,欢迎大神们指导。

pcell_m1_gr.rar (469 Bytes, 下载次数: 268 )

 楼主| 发表于 2020-4-11 10:10:32 | 显示全部楼层
有很多笔误,大家勉强看看吧,多多指导。
发表于 2020-4-11 23:36:36 | 显示全部楼层
本帖最后由 yangqi666 于 2020-4-11 23:41 编辑

dbOpenCellViewByType可以用草稿模式去打开,这样就不用在库里新建一个多余cell 了。
然后Flatten完筛选出metal1直接copy过来不就可以了吗?

还有想请教一下,什么场景需要去提取下层的layer上来呢?看到好几帖发类似功能的脚本,不理解具体刚需。


 楼主| 发表于 2020-4-13 08:29:26 | 显示全部楼层


yangqi666 发表于 2020-4-11 23:36
dbOpenCellViewByType可以用草稿模式去打开,这样就不用在库里新建一个多余cell 了。
然后Flatten完筛选出m ...


谢谢您的提醒,用草稿确实更好。
我也看到有些帖子里在讨论这个,不过我也不是特别清楚。
我个人是以前用xl布线时,发现只能走到定义了pin的图形,手工打的话一般只做一个rect,我之前实验写个一个脚本提取一个terminal对应的所有金属层,便于xl布线时就近布线。不过后来也没什么大用处。用来熟悉一些函数倒是不错的。


发表于 2020-4-13 11:45:52 | 显示全部楼层
学习学习
发表于 2020-4-20 20:37:58 | 显示全部楼层
很好 !可以考虑下把下层的pin 给抽出来呢
发表于 2020-4-22 10:10:29 | 显示全部楼层
有另一篇帖子也是在mos上打metal1,但思路和你的完全不同。我学习skill后第一个抄的脚本就是那个。
至于是否刚需,看个人画图习惯,对我来说就是刚需。因为我习惯加宽mos上的metal1以此减小电阻,增加打孔数量(增加孔数量是由增大metal1宽度后,可以横向打下一个rect型的via1,rect型的via在大制程中是没有的),后期做迭代时EMIR更好。
发表于 2020-5-14 22:39:23 | 显示全部楼层
很好 !可以考虑下把下层的pin 给抽出来呢
发表于 2020-5-26 23:28:22 | 显示全部楼层
very useful
发表于 2020-5-28 13:38:17 | 显示全部楼层
可以以文档的形式发一下吗 或者是截图可以  这个形式打不开啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-5-1 16:24 , Processed in 0.029024 second(s), 7 queries , Gzip On, Redis On.

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