ljm_147258mei的个人空间 https://blog.eetop.cn/1768385 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

calibredrv处理gds

已有 55 次阅读| 2024-7-1 18:00 |个人分类:calibredrv|系统分类:芯片设计

1、删除gds中某一个cell----应用场景:可用来删除空的cell,保证drc的正常进行

#################################################
#usage: calibredrv script.tcl
#################################################
set gdsIn  gds_path1
set gdsOut gds_path2
set cell   adc_test

set L [layout create $gdsIn -dt_expand -preserveProperties]
$L delete cell $cell -deleteChildCells
puts "delete cell $cell"
$L gdsout $gdsOut


2、flatten gds  ----应用场景:打散gds的hierarchy结构

#################################################
#usage: calibredrv script.tcl
#################################################
set gdsIn test.gds.gz
set topcell chips

#read gds
layout create test.gds.gz -dt_expand

#flatten gds
layout0 flatten cell $topcell

#modify gds number/dataout,if you need
layout0 modify layer 61.0 31.0

#write out gds,if you need write out specify layer that can use "-map" option
layout0 gdsout modify,gds,gz $topcell


3、add specify layer shape for gds ----应用场景:需要对gds全局覆盖上一层指定layer的shape

######################################################
#usage : calibredrv script.tcl <layout_filename>
######################################################
set design [lindex $argv 0]
set L [layout create $design -dt_expand -preserveProperties]
set topcell [$L topcell]
set region [$L bbox $topcell]

set llx [lindex $region 0]
set lly [lindex $region 1]
set urx [lindex $region 2]
set ury [lindex $region 3]

$L create layer 108.0
$L create polygon $topcell 108.0 ${llx}d  ${lly}d ${urx}d ${ury}d
#if you need size up shape,can Open comments
#$L SIZE 108.0 108.0 BY 1
$L gdsout $design


4、scan gds中的tag(text)

######################################
#usage: calibredrv script.tcl
######################################
set gdsfile "test.gds.gz"
set cells [layout peek $gdsfile -cells]

set scan_result [open ./scan_result.txt w]
foreach obj $cells {
    set textlist [layout peek $gdsfile -celltext $obj]
    foreach tag $textlist {
        set cellname [lindex $tag 0]
        if {[string compare [lindex $tag 1] {}] == 0} {
            puts "$cellname no tag!"
        } else {
            for {set i 1} {$i < [llength $tag]} {incr i} {
                set group [lindex $tag $i]
                set text_name [lindex $group 0]
                if {[regexp "&" $text_name]} {
                    set ori_x [lindex $group 1]
                    set ori_y [lindex $group 2]
                    set gds_num [lindex $group 3]
                    set datatype [lindex $group 4]
                    puts $scan_result "$cellname has tag {$text_name},coordinate : {$ori_x $ori_y},layer is {$gds_num,$datatype}"
                }
            }
        }
        
    }
}
close $scan_result


5、delete gds中的指定字符的tag(text)

######################################
#usage: calibredrv script.tcl
######################################
set gdsfile "test.gds.gz"
set  topcell  "top"
set  layerlist "10.0 11.0 12.3"
set  gdsout   "test_notag.gds.gz"
set  pattern  "&"

set L [layout create $gdsfile -dt_expand -preserveProperties]
set mycell [$L cells]
set handle [open ./delete.txt w]
for {set i 0} {$i < [llength $layerlist]} {incr i} {
    set layer [lindex $layerlist $i]
    foreach cell $mycell {
        set clist [$L iterator text $cell $layer range 0 end]
        foreach obj $clist {
            set text_name [lindex $obj 0]
            set ori_x [lindex $obj 1]
            set ori_y [lindex $obj 2]
            if {[regexp $pattern $text_name]} {
                $L delete text $cell $layer $ori_x $ori_y $text_name
                puts $handle "$cell delete tag : $text_name , layernumber : $layer"
            }
        }
    }
    
}
close $handle

#遍历并打印删除后的tag list
set results [open ./results.txt w]
for {set i 0} {$i < [llength $layerlist]} {incr i} {
    set layer [lindex $layerlist $i]
    foreach cell $mycell {
        set clist [$L iterator text $cell $layer range 0 end]
        foreach obj $clist {
            puts $results "$cell tag : $obj, layernumber : $layer"
        }
    }
}
close $results
$L gdsout $gdsout


6、merge cell/dummy...

#################################################
#usage : calibredrv script.tcl
#################################################
proc ImportGds {gds cell x y mirror angle} {
    global L0 Topcell
    set x [expr $x*1000]
    set y [expr $y*1000]
    set LT [layout create $gds -dt_expand -preservePaths]
    $L0 import layout $LT FALSE rename -dt_expand -preservePaths
    $L0 create ref $Topcell $cell $x $y $mirror $rangle 1
}

proc renameTopcell {gds prefix filename} {
    set LR [layout create $gds -dt_expand -preservePaths]
    set top_name [$LR topcell]
    $LR cellname ${top_name} ${top_name}_${prefix}
    $LR gdsout ${filename}
}

renameTopcell A.gds.gz Atopcellname ./A_rename.gds.gz

set L0 [layout create B.gds.gz -dt_expand -preservePaths]

ImportGds A_rename.gds.gz A(rename)topcellname 24 24 0 0

$L0 gdsout C.gds.gz topcellname


评论 (0 个评论)

  • 关注TA
  • 加好友
  • 联系TA
  • 7

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 0

    粉丝
  • 0

    好友
  • 0

    获赞
  • 0

    评论
  • 18

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-7-3 17:57 , Processed in 0.028233 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部