本文介绍 calibre 与 tcl 的结合使用。
calibre 内嵌了 tcl 解释器,可以直接调用 tcl 命令完成一些操作,同时 calibre 还开放了一些接口(API)给 tcl 语言调用,学会二者有机结合,可以拥有更多的工具实现特定的功能。
在 calibre 的 calibre designrev reference manual 中(calibr_drv_ref.pdf)中,给出了大量的 api 以供 tcl 使用。需要时自行查阅,这里不做介绍
calibre 软件调用 tcl 脚本的方式:
calibredrv xxx.tcl 或者 calibrewb xxx.tcl
1. 常见的一些用法
1.1 输入输出
1.1.1 gds 输入输出
#!/bin/tclsh
set gdsin ./test.oas
set LT [layout create $gdsin -dt_expand -preserveProperties]
$LT scale 0.9
$LT oasisout out.oas
layout create是 calibre 的 api for tcl,可以 用来读取 gds-dt_expand是为了保留 gds 里面的 datatype,避免相同的 layernum,不同的 datatype 合并-preserveProperties是用于保留所有的 property data
LT是读取文件后的 句柄$LT scale是 calibre 的 api for tcl,manual 中的$L开头的命令都可以这样使用$L oasisout是用来输出 oas 文件
1.1.2 rdb 的输入输出
#!/bin/tclsh
set rdbin ./test.rdb
set RDB [layout create $rdbin -dt_expand]
set rdblayer [$RDB layers]
set rdbtopcell [$RDB topcell]
$RDB scale 0.9
$RDB rdbout temp.rdb -cell $rdbtopcell -layers $rdblayer
layout create也可以用来 读取 rdb 文件- -dt_expand 是为了保留 gds 里面的 datatype,避免相同的 layernum,不同的 datatype 合并
RDB是读取文件后的 句柄$L rdbout是用来 输出 rdb 文件
#!/bin/tclsh
set rdbin ./test.rdb
set RDB [layout create $rdbin -singlelayer]
$RDB oasisout out.oas
set LRS [layout create out.oas -map 0 -1 10086]
$LRS oasisout rdbmarker.oas
- rdb 还可以输出为 gds 文件,因为 rdb 里面的有 defect marker 坐标的,也就可以输出带 polygon 图形的 gds 文件
-singlelayer会把所有东西读取到一层 layer 上,如果不写,会按照 0,1,2…的 number 来-map 0 -1 10086是把读取到的 gds 里面的所有 layer 都 map 到 10086 这一层上
1.1.3 其他常见的方法
- layout filemerge
#!/bin/tclsh
set gdsin ./test.oas
set rdbmarker rdbmarker.oas
layout filemerge -in $gdsin -in $rdbmarker -oasisout outall.oas
- $L create clip
#!/bin/tclsh
set LT [layout create $gdsin -dt_expand]
set TOPCELL [$L topcell]
$LT create clip $TOPCELL -rdb temp.rdb -halo 5
1.2 新建 layout
#!/bin/tclsh
set Lout [layout create] ;# 新建一个空白 layout
$Lout units microns 1000 ;# 指定 units
$Lout create cell pitch_xy ;# 创建 cell
$Lout create layer 1.0 ;# 创建 layer num
$Lout create layer 2.0
set poly_coord {0 0 100 100}
eval $Lout create polygon pitch_xy 1.0 $poly_coord ;# 生成图形
$Lout oasisout out_temp.oas ;# 输出为 oas
eval目的是构造单一脚本,将后面的部分拼接成字符串,整体解析执行- eval 一般是非必要的,只要按照命令用法写参数,可以直接执行。
- 但是如果存在变量替换,比如上述中
$poly_coord是一个列表,那么create polygon会报错,因为这个命令要求坐标直接输入数字,而不是列表或者字符串,这时候就必须用上 eval
$L create polygon cellName layer x1 y1 x2 y2... xn yn,需要指定 cellname layernum 和坐标
欢迎各位看官及技术大佬前来交流指导呀,可以邮件至 jqiange@yeah.net