用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
以前在用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
以前在用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