The Flow Description BlockFlow.tcl

This flow creates all jobs for each block (here called unit) described in the chipStruct.tcl file, taking into account the type of the block. The FDL procedure S is used to define sets of jobs, which are later used to generate CGI reports.

BlockFlow.tcl: The Detailed Flow
set PROJECT $env(PROJECT)
set USER    [file tail [pwd]]

source $env(EDADEMO)/chipStruct.tcl
if [file exists local/chipStruct.tcl] {
    VovMessage "Sourcing local/chipStruct.tcl"
    source local/chipStruct.tcl
}

S "CDT:$USER" {
    foreach { unit type } $listOfUnits {
        E EDADEMO
        lappend allUnits $unit
        set types($unit) $type
        S "CDT:$USER:unit:$unit" {
            indir -create $PROJECT/units/$unit {
                file mkdir netlists

                switch $type {
                    "rtl"  { 
                        indir -create synthesis {  
                            file mkdir results
                            J vw cdt synth $unit 
                            J clevercopy results/$unit.vg ../netlists
                            J clevercopy rtl/$unit.v ../../../data/rtl
                        }
                    }
                }
                switch $type {
                    "rtl" - "softip" {
                        indir -create place { 
                            J vw cdt place $unit 
                            J vw cdt scanins $unit
                        }
                        indir -create route {
                            J vw cdt route $unit
                            J vw cdt clocktree $unit
                            J vw cdt to_gds $unit
                            J clevercopy ../gds/$unit.gds ../../../data/gds/$unit.gds
                        }
                        indir -create verify {
                            J vw cdt lvs $unit
                        }
                    }
                    "toplevel" {
                        omitted
                    }
                }

                omitted

                # All units.
                indir -create verify {
                    J vw cdt extract $unit
                    J vw cdt sta $unit
                    J vw cdt drc $unit
                    J vw cdt erc $unit
                }
            }
        }
    }
}
BlockFlow.tcl: High Level Flow Definition
######## Hi-Level Flow Section ########################

H "CDT:$USER:Steps" {
    foreach step $listOfImportantSteps {
        set B$step [B "$step" SETNAME "CDT:$USER:step:$step"]
    }

    C $Bsynth $Bplace
    C $Bplace $Broute
    C $Broute $Bsta
    C $Broute [list $Bdrc $Berc]
    C $Bdrc   $Blvs

    C autoplace
}

H "CDT:$USER:units" {
    set x   100 
    set y   100 
    foreach { unit type } $listOfUnits {
        set this [B $unit SETNAME "CDT:$USER:unit:$unit" -xy $x $y]
        if { [incr x 100] > 300 } {
            incr y  50 
            set x 100
        }
    }
}