位置:51电子网 » 技术资料 » 其它综合

用calibre比较两个Layout

发布时间:2008/6/5 0:00:00 访问次数:1951

有时候需要将两个layout进行比较,看它们有哪些不一样。
以前在用calibre时,还要写一个command file,特别是layer map需要改变,特别繁琐
干脆就用calibre tcl写了个script,直接比较,一步到位,省去了不少的麻烦。
贴到这里来跟大家共享,嘿嘿,我在这里学到了不少的东西,当然自己也要贴些东西上来呀

#!/bin/sh -f
#the next line starts to use calibre \
exec $mgc_home/bin/calibredrv "$0" "$@"

if { $argc != 2 } {
puts stdout "error:usage:xor2gds.tcl gds1 gds2"
exit 0
}

set gds1 [layout create [lindex $argv 0]]
set gds2 [layout create [lindex $argv 1]]

if { [file exist xor2gds.cal] } {
file delete xor2gds.cal
}

set layermap_raw1 [$gds1 layernames]
set layermap_raw2 [$gds2 layernames]
set topcell1 [$gds1 topcell]
set topcell2 [$gds2 topcell]

exec echo "layout path [lindex $argv 0]" >> xor2gds.cal
exec echo "layout primary $topcell1" >> xor2gds.cal
exec echo "layout system gdsii" >> xor2gds.cal
exec echo "layout path2 [lindex $argv 1]" >> xor2gds.cal
exec echo "layout primary2 $topcell2" >> xor2gds.cal
exec echo "layout system2 gdsii" >> xor2gds.cal
exec echo "layout bump2 200" >> xor2gds.cal
exec echo "drc results database \"./xor2gds.db\"" >> xor2gds.cal
exec echo "drc summary report \"./xor2gds.sum\"" >> xor2gds.cal

foreach {layernum layername} $layermap_raw1 {
exec echo "$layernum $layername " >> layermap_raw
}
foreach {layernum layername} $layermap_raw2 {
exec echo "$layernum $layername " >> layermap_raw
}
set layermap [exec sort layermap_raw uniq]
file delete layermap_raw

set i 1
foreach {layernum layername} $layermap {
set layernum_new [expr $layernum + 200]
set layername_origin l$layername
append layername "_new"
set layername_new l$layername
exec echo "layer $layername_origin $layernum" >> xor2gds.cal
exec echo "layer $layername_new $layernum_new" >> xor2gds.cal
exec echo "\
rule$i {
xor $layername_origin $layername_new
} " >> xor2gds.cal
incr i
}
#run drc
exec calibre -drc -hier xor2gds.cal > xor2gds.log





有时候需要将两个layout进行比较,看它们有哪些不一样。
以前在用calibre时,还要写一个command file,特别是layer map需要改变,特别繁琐
干脆就用calibre tcl写了个script,直接比较,一步到位,省去了不少的麻烦。
贴到这里来跟大家共享,嘿嘿,我在这里学到了不少的东西,当然自己也要贴些东西上来呀

#!/bin/sh -f
#the next line starts to use calibre \
exec $mgc_home/bin/calibredrv "$0" "$@"

if { $argc != 2 } {
puts stdout "error:usage:xor2gds.tcl gds1 gds2"
exit 0
}

set gds1 [layout create [lindex $argv 0]]
set gds2 [layout create [lindex $argv 1]]

if { [file exist xor2gds.cal] } {
file delete xor2gds.cal
}

set layermap_raw1 [$gds1 layernames]
set layermap_raw2 [$gds2 layernames]
set topcell1 [$gds1 topcell]
set topcell2 [$gds2 topcell]

exec echo "layout path [lindex $argv 0]" >> xor2gds.cal
exec echo "layout primary $topcell1" >> xor2gds.cal
exec echo "layout system gdsii" >> xor2gds.cal
exec echo "layout path2 [lindex $argv 1]" >> xor2gds.cal
exec echo "layout primary2 $topcell2" >> xor2gds.cal
exec echo "layout system2 gdsii" >> xor2gds.cal
exec echo "layout bump2 200" >> xor2gds.cal
exec echo "drc results database \"./xor2gds.db\"" >> xor2gds.cal
exec echo "drc summary report \"./xor2gds.sum\"" >> xor2gds.cal

foreach {layernum layername} $layermap_raw1 {
exec echo "$layernum $layername " >> layermap_raw
}
foreach {layernum layername} $layermap_raw2 {
exec echo "$layernum $layername " >> layermap_raw
}
set layermap [exec sort layermap_raw uniq]
file delete layermap_raw

set i 1
foreach {layernum layername} $layermap {
set layernum_new [expr $layernum + 200]
set layername_origin l$layername
append layername "_new"
set layername_new l$layername
exec echo "layer $layername_origin $layernum" >> xor2gds.cal
exec echo "layer $layername_new $layernum_new" >> xor2gds.cal
exec echo "\
rule$i {
xor $layername_origin $layername_new
} " >> xor2gds.cal
incr i
}
#run drc
exec calibre -drc -hier xor2gds.cal > xor2gds.log





上一篇:ESD分析Part(1)

上一篇:DRACULA中做LVL

相关IC型号

热门点击

 

推荐技术资料

罗盘误差及补偿
    造成罗盘误差的主要因素有传感器误差、其他磁材料干扰等。... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!