virtuoso layout最近的学习笔记
设置当前点为命令起始点,不需要再次点击鼠标Using InfixYou can set the layout editor to automatically use the current pointer location as the startingpoint whenever you start commands with bindkeys. This is called infix mode.To set infix mode on or off, from the CIW, choose Options – User Preferences and turn theInfix button on or off.
20
显示所有可用层次的函数在.cdsinit里面hiSetBindKey("Layout" "Ctrl<Key>w" "leSetAllLayerValid(t)")然后Ctrl+w就可以显示全部的layer了。
21
取得当前lsw中选中的层次的命令leGetEntryLayer()
22
用lsw中选中的layer,用当前选中的instance或者图形的坐标为坐标画矩形或多边形procedure( createpolygonforminst()let((cv coord layer)cv=geGetEditCellView()layer=leGetEntryLayer()if(geGetSelSet()~>pointsthen coord=car(geGetSelSet()~>points)dbCreatePolygon(cvlayer coord)else coord=car(geGetSelSet()~>bBox)dbCreateRect(cvlayer coord))))hiSetBindKey("Layout" "Ctrl Shift<Key>c" "createpolygonforminst()")
23
将pcell导出为skill的办法最近使用小厂的工艺,为了使用XL只好苦逼地自己去写PDK,正好有试过,如下:cv=dbOpenCellViewByType("libname" "cellname" "cellview")dbWriteSkill(cv "cellname.il" "w" "5.0")在CIW里面运行这两行,在当前目录下有两个skill文档,一个是cellname.il另一个是xxx_pCell.ilxxx_pCell.il是PCELL程序,所有的参数都在里面,找到你要修改的改掉就OK,以CSMC的为例:metal 包孔meDiffCont=(dpt->meDiffCont)直接改成 meDiffCont=0.3
2 drc命令
2.1 跑drc的命令
calibre -drc -turbo -hier drc.cal
2.2 OFFGRID
BOAC RULE中有对OFFGRID的检查,对这种不在格点的错误,有两句话可以控制格点的大小
RESOLUTION 5
PRECISION 1000
UNIT LENGTH U
这句话的意思就是将格点设置为1/1000*5=0.005um
2.3 INT
INT命令操作单独的一个层次的时候计算各个边直接的宽度是否大于或者小于某个值。在操作两个层次的时候计算两个层次overlap的部分的宽度。
2.4 size
SIZE LAYER1 BY 0.09 UNDEROVER
这个命令的意思是先将LAYER1缩小0.09,然后再长0.09,如果LAYER1的宽度只有0.18的话,缩完之后就消失了,这个层次也就不再存在,再进行长0.09的操作也不会产生新的图形。如果把UNDEROVER换成OVERUNDER的话,就是先长再缩。
2.5 check map
L1002=AND HA_DRC GATE
L1003=SIZE L1002 BY 0.09 UNDEROVER
CREATE_HA {COPY L1003}
DRC CHECK MAP CREATE_HA GDSII 57 0 HA.gds
这段命令的意思就是将L1003这个图像复制成CREATE_HA,然后将这一层次导出到一个gds文件,导出的层次号是57 0.
3 lvs命令
3.1 跑lvs的命令如下
calibre -lvs -hier -spi lay.net -turbo 16 lvs.cal
如果只是比较lay.net的话,可以用这个命令
calibre -lvs -hier -turbo 16 lvs.cal2
3.2 lvs认label
LAYER MTT 1030
LAYER MAP 86 DATATYPE 0 1030
LAYER MTT_text 1031
LAYER MAP 127 TEXTTYPE 0 1031
LAYER MAP 127 DATATYPE 0 1031
TEXT LAYER MTT_text
text layer一般都是TEXTTYPE类型,有些工艺也需要将其定义为DATATYPE 类型。
4 calibre和virtuoso的接口语句
calibre描述接口的文件夹在这里 eda/mentor/calibre/aoi_cal_2015.4_16.11/shared/pkgs/icv/tools/queryskl
calibre的安装文件夹不同,这个目录会跟随变化,可以使用命令echo $MGC_HOME查看calibre的安装目录。
这个目录中有个skillreadme的文件,里面有描述在.cdsinit中添加接口语句的方法。
我们可以采用简单的办法,如下
load(strcat(getShellEnvVar("MGC_HOME")
"/shared/pkgs/icv.ss6/tools/queryskl/calibre.skl"))
5 calibre批量做standcell的lvs
一、把所有的layout放在一起(我的是从工艺厂的gds直接倒出来的),再把所有symbol放在同一个schematic下(自己手动放的,点了几百下鼠标),其他啥都不要,什么port,pin都不加。
二、做lvs。正常做lvs的过程,在calibre的选项中设置input>H-cells选项,将match cells by name(automatch)前面勾选上,下面的use H-cells file也勾选上,如果有H-cells file(就是一个文本文件,一般工艺厂会给,但是有的格式不对)就直接调用,么有就自己写,详见http://www.chiplayout.net/hcells ... %89%E7%85%A7H-cells file中的cell一个一个单独run完,顶层不过我就没管了,最后结果是可以很清楚的看见。