This is a tcl command-based solution for dumping out the placement (including soft, partial & hard) /routing blockages from Encounter session:
################################################################################
# Procedure to save blockages into tcl command
# Usage: saveBlockages -type <placement | routing | all> -outFile <output_tcl_file>
################################################################################
proc saveBlockages {args} {
global env
# Get blockage type
if {[regexp {\-type} $args]} {
set blockageType [lindex $args [expr [lsearch $args -type] + 1]]
}
# Get output file
if {[regexp {\-outFile} $args]} {
set outfile [lindex $args [expr [lsearch $args -outFile] + 1]]
}
# Help
set helpString "Usage : saveBlockages \
\-type <placement | routing | all> \
\-outFile <file_name> \
\-help"
if {[regexp {\-help} $args] || $args == ""} {
puts $helpString
return 0
}
# Main code
############################################################
set f [open $outfile w]
# Placement blockages
if {$blockageType == "placement" || $blockageType == "all"} {
foreach pblkgType [dbGet -u top.fPlan.pBlkgs.type] {
foreach obsPtr [dbGet -p top.fPlan.pBlkgs.type $pblkgType] {
set obsName [dbGet $obsPtr.name]
set box [exl [dbGet $obsPtr.boxes]]
switch -- $pblkgType {
"hard" {
puts $f "createObstruct -box $box -name $obsName"
}
"partial" {
set density [dbGet $obsPtr.density]
puts $f "createDensityArea -name $obsName $box $density"
}
"soft" {
set density [dbGet $obsPtr.density]
puts $f "createDensityArea -name $obsName $box $density"
}
}
}
}
}
# Routing blockages
if {$blockageType == "routing" || $blockageType == "all"} {
foreach rBlkPtr [dbGet top.fPlan.rBlkgs] {
set name [dbGet ${rBlkPtr}.name]
set attr [dbGet ${rBlkPtr}.attr]
set layer [dbGet ${rBlkPtr}.layer.name]
foreach box [exl [dbGet ${rBlkPtr}.boxes]] {
puts $f "createRouteBlk -box ${box} -layer ${layer} -name ${name}"
}
}
}
close $f
}
################################################################################
# Procedure to split the list
################################################################################
proc exl {singleList} {
set mylist {}
foreach item $singleList {
set mylist [concat $mylist $item]
}
return $mylist
}