tcl 与 opc

  1. 1. 常见的一些用法
    1. 1.1 输入输出
      1. 1.1.1 gds 输入输出
      2. 1.1.2 rdb 的输入输出
      3. 1.1.3 其他常见的方法
    2. 1.2 新建 layout

本文介绍 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