微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC版图设计交流 > 分享一些脚本

分享一些脚本

时间:10-02 整理:3721RD 点击:
开个帖子,分享一些常用的脚本由于公司信息安全的原因,有些不能提供完整的脚本,但是思路可以讲解一下,或者是一个简单版本。
大致按照如下格式
名字:
语言:
功能:
内容:
使用方法:

1.
名字:layout_get_hlist.sh
语言:shell
功能:从cdl网表当中抽取hcell list
内容:
#!/bin/csh -f
grep -i ".subckt” $1 | awk '{print $2, $2}' >! hlist
使用方法:
layout_get_hlist.sh your.cdl

1.
名字:layout_get_hlist.sh
语言:shell
功能:从cdl网表当中抽取hcell list
内容:
#!/bin/csh -f
grep -i ".subckt” $1 | awk '{print $2, $2}' >! hlist
使用方法:需要把cds.lib 拷贝到与脚本相同的目录
layout_get_hlist.sh your.cdl

2.
名字:layout_ic61_strmout.sh
语言:shell
功能:用脚本导出GDS
内容:
#!/bin/csh -f
set cellname = $2
set library = $1
$CDSHOME/tools/dfII/bin/strmout \
-library $library \
-strmFile $cellname.gds \
-runDir . \
-topCell $cellname \
-view layout \
-logFile strmOut.log \
-converDot node \
-case Preserve

使用方法:
layout_ic61_strmout.sh library cell

3.
名字:layout_ic61_cdlout.sh
语言:shell
功能:用脚本导出CDL网表
内容:
#!/bin/csh -f
set cellname = $2
set library = $1
set include_file = "`pwd`/source.added"
cat << EOF >! si.env
simLibName = "$library"
simCellName = "$cellname"
simViewName = "schematic"
netlistType = "Connection By Name"
hnlNtlistFIleName = "$cellname.cdl"
incFile = "$include_file"
...
EOF
# ... 省略的地方请打开一个工作目录下的 si.env 文件补充完整
cat /dev/null >! netlist
$CDSHOME/tools/dfII/bin/si -batch -command netlist
使用方法:需要把cds.lib 拷贝到与脚本相同的目录
layout_ic61_cdlout.sh library cell

请教一下 “cat /dev/null >! netlist ”的作用是什么,如果没有这个貌似也可以运行,会有什么影响么?

4.
名字:layout_cross_ruler.il
语言:skill
功能:显示以点击出为交点的十字交叉尺子
内容:
procedure(layout_cross_ruler()
let((cv bbox xy xLL yLL xUR yUR)
cv = geGetEditCellView()
bbox = cv~>bBox
xy = hiGetPoint(getCurrentWindow())
xLL = caar(bbox)
yLL = cadar(bbox)
xUR = caadr(bbox)
yUR = cadadr(bbox)
leCreateRuler(cv list(xy xLL:cadr(xy)))
leCreateRuler(cv list(xy xUR:cadr(xy)))
leCreateRuler(cv list(xy car(xy):yLL))
leCreateRuler(cv list(xy car(xy):yUR))
))
hiSetBindKey("layout" "<Key>v" "layout_cross_ruler()")
使用方法:
在CIW中加载
load "layout_cross_ruler.il"
在版图中按 v

能用就不用管它了

赞一个

能写脚本的都是牛人!


好贴,我也来分享一个。

名字:PutOnGrid.il
语言:SKILL
功能:消除版图中的off grid
内容:

procedure( OnGrid( Point )
if( listp( Point ) then
mapcar( lambda( (x) OnGrid(x) ) Point)
else
round((Point/Grid))*Grid
)
)
procedure( PutOnGrid( Grid )
let(( SelectObj )
SelectObj = geGetSelSet()
foreach( Object SelectObj
cond(
(Object~>objType == "path"
Polygon = leConvertShapeToPolygon(Object)
Polygon~>points = OnGrid(Polygon~>points)
)
(Object~>objType == "polygon"
Object~>points = OnGrid(Object~>points)
)
(Object~>objType == "rect"
Object~>bBox = OnGrid(Object~>bBox)
)
(Object~>objType == "inst" || Object~>objType == "mosaic"
Object~>xy = OnGrid(Object~>xy)
)
)
)
)
)

使用方法:在CIW中load这个il文件。使用时输OnGrid(0.005),如果你的最小格点是0.005的话。

5.
名字:layout_get_gds_layer.tcl
语言: tcl
功能:获取gds 中的gds number 和 data type
内容:
set L [layout create cellname.gds -noReport -dtExpand]
puts "layer: [lsort -dictionary [$L layers]]"
使用方法:
修改cellname.gds 为实际的gds
然后执行 calibredrv layout_get_gds_layer.tcl

谢谢分享,

我的使用还停留在./的地步

想问下offgrid是啥。

就是不在grid点上

5.
名字:layout_save_sub_from_top.tcl
语言: tcl
功能:从gds中保存指定cell 为另一个gds
内容:
set L [layout create top.gds]
$L gdsout sub_cell.gds sub_cell
使用方法:
修改cellname.gds 为实际的gds
然后执行 calibredrv layout_save_sub_from_top.tcl
这个是从以前的帖子里搬过来的
http://bbs.eetop.cn/thread-611704-1-1.html

6.
名字:layout_drc.sh
语言: c shell
功能:脚本的方式执行drc, 并且显示结果
内容:
#!/bin/csh -f
set cell_name = $1
set drc_rule = "your_drc.cal"
set gds_dir = "../gds"
sed -e 's#\(LAYOUT PRIMARY\).*#\1 \"'$cell_name'\"#g' \
-e 's#\(LAYOUT PATH\).*#\1 \"'$gds_dir/$cell_name.gds'\"#g' \
-e 's#\(DRC SUMMARY REPORT\).*#\1 \"'drc.rep'\"#g' \
$drc_rule >! _drc.cal_
calibre -drc -64 -hier -hyper -turbo 2 _drc.cal_
grep "TOTAL Result Count = [1-9]" drc.rep
使用方法:
修改drc_rule 为实际drc rule file 的路径
修改 gds_dir 为gds存放的路径
然后执行 layout_drc.sh cell_name
类似的,你可以仿照这个写个执行 LVS 的脚本了

7.
名字:layout_drc_auto.sh
语言: c shell
功能:脚本的方式执行导出gds ,然后执行drc 检查, 并且显示结果
内容:
#!/bin/csh -f
set cell_name = $1
cd gds_dir #改成你自己的gds保存路径
layout_ic61_strmout.sh $cell_name
cd drc_dir #改成你自己的执行drc 的路径
layout_drc.sh $cell_name
使用方法:
然后执行 layout_drc_auto.sh cell_name
类似的,你可以仿照这个写个自动导出cdl 和 gds, 然后执行lvs 的脚本了

赞一个!


大家再接再厉呀,继续分享

学习啦,谢谢分享

小编好人

谢谢分享

棒棒哒

学习了,谢谢小编分享

感谢小编分享

赞赞赞赞

小编赞赞哒 必须顶~

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top