calibredrv create reference cell

calibredrv操作gds真的是太方便了,在介绍过了《calibredrv merge GDS file》和《怎么flatten一个GDS所有层次》后,有同学提出了怎么能把另一个新GDS调用到已有的GDS。其实方法有好几种,结果也稍有不同,下面举个常用的例子。

假设我们有个 A.gds, top cell是ATOP, 有了B.gds, top cell是BTOP, 之前说过的merge gds file, 可以把A.gds和B.gds合并,要么 ATOP和BTOP平级,要么 ATOP和BTOP同属一个新top的子cell, 那如何让 BTOP作为ATOP的子cell呢?也就是不改变ATOP的情况下把BTOP调用到ATOP。

其实这在 calibredrv的文档中 $L create cell 介绍时已经给出了现成的例子,如下

#Extracts a cell from an existing layout into a new GDS file:
# Load existing layout.
set Llayout [layout create mylayout.gds]
# Create an empty layout.
set Lnew [layout create]
# Create topcell for new layout.
$Lnew create cell TOP
# Copy MyGeom cell to new layout, calling it MyGeomNew. Copies all
# geometry, but not placements.
$Lnew create cell MyGeomNew $Llayout MyGeom
# Place MyGeomNew cell reference in new layout.
$Lnew create ref TOP MyGeomNew 0 0 0 0 1
# Export new layout.
$Lnew gdsout new.gds

这是创建了一个新的layout, 新的top为TOP, 并为这个TOP调用已有的mylayout.gds中的mygeomnew cell,最后保存为new.gds

但实际上我们要达到开头说的A和B的目的,还需修改一下这个例子

第一步,打开 A和B的gds, 用 layout create命令

# Load A.gds.
set layoutA [layout create A.gds]
# Load B.gds.
set layoutB [layout create B.gds]

第二步,这时打开的是两个不同cell,所以需要所b.gds中的BTOP copy到a.gds 中

# Copy BTOP from B.gds to A.gds
$layoutA create cell BTOP $layoutB BTOP

第三步,ATOP中调用BTOP, 用到create ref命令

#crate reference cell
$layoutA create ref ATOP BTOP 0 0 0 0 1

最后用 gdsout命令保存新的gds

# Export new layout.
$layoutA gdsout c.gds

完整的code如下

# Load A.gds.
set layoutA [layout create A.gds]
# Load B.gds.
set layoutB [layout create B.gds]
# Copy BTOP from B.gds to A.gds
$layoutA create cell BTOP $layoutB BTOP
#crate reference cell
$layoutA create ref ATOP BTOP 0 0 0 0 1
# Export new layout.
$layoutA gdsout c.gds

teriminal下输入

calibredrv xxx.txt

其实还有个layout import命令可以先把B的gds导入到A,再创建ref
或者将A.gds和B.gds 合并后再创建ref

《calibredrv create reference cell》有11条评论

  1. # Load A.gds.
    set layoutA [layout create A.gds]
    # import B.gds
    $layoutA import layout B.gds FALSE rename -dt_expand
    #crate reference cell
    $layoutA create ref ATOP BTOP 0 0 0 0 1
    # Export new layout.
    $layoutA gdsout c.gds

    回复
  2. set layoutA [layout create A.gds]
    set layoutB [layout create B.gds]
    $layoutA create cell B $layoutB B
    $layoutA create ref A B 0 0 0 0 1
    $layoutA gdsout C.merge.gds

    回复
  3. 你好,请问用这个方法gdsB时,gdsB里比gdsA多一些layer,怎么保留这些layer不被删除呢

    回复
  4. 您好,请问一下layout import怎么使用呢?我现在会手动操作下面步骤,怎么变为脚本呢。
    1、用calibredrv打开一包a.gds,然后File->import,导入需要的b.gds 2、选择Object->Creat Reference,调用b.gds,注意原点设为(0,0) 3、然后save一下。之后b就变成了a的一个子cell。a的top_cell_name还是a。
    谢谢

    回复
  5. 您好,请问一下layout import怎么使用呢?我现在会手动操作下面步骤,怎么变为脚本呢。
    1、用calibredrv打开一包a.gds,然后File->import,导入需要的b.gds 2、选择Object->Creat Reference,调用b.gds,注意原点设为(0,0) 3、然后save一下。之后b就变成了a的一个子cell。a的top_cell_name还是a。
    谢谢

    回复
  6. 您好,想请教一下这个脚本是写成 .txt文件,,然后用calibredrv 运行是吗?我看最后一行生成了c.gds。加入我想将b.gds导入a.gds,不新生成c.gds可以吗。
    比如我文件夹下有两个gds,我将其中一个gds放入另外一个gds。文件下还是两个gds,只是其中一个gds里面包含了另一个gds。
    感谢,致敬。

    回复

发表评论