# write out
puts $f ".AUTOGENERATED by Popcorn Tcl Script"
- set myinputs [join [inputs? $cellid] " "]
+ set myinputs [join [lsort [inputs? $cellid]] " "]
puts $f ".inputs $myinputs"
- set myoutputs [join [outputs? $cellid] " "]
+ set myoutputs [join [lsort [outputs? $cellid]] " "]
puts $f ".outputs $myoutputs"
- puts $f ".ORDER \"Gate Drain Source MOSFET\""
+ puts $f ".ORDER \"MOSFET Gate Drain Source\""
set sorted [lsort -dictionary [dict keys [dict get [dict get $library $cellid] pullup]]]
set drain [dict get [dict get [dict get [dict get $library $cellid] pullup] $mosfet] d]
set source [dict get [dict get [dict get [dict get $library $cellid] pullup] $mosfet] s]
set type [dict get [dict get [dict get [dict get $library $cellid] pullup] $mosfet] t]
- puts $f "$gate $drain $source $type"
+ puts $f "$type $gate $drain $source"
}
set sorted [lsort -dictionary [dict keys [dict get [dict get $library $cellid] pulldown]]]
set drain [dict get [dict get [dict get [dict get $library $cellid] pulldown] $mosfet] d]
set source [dict get [dict get [dict get [dict get $library $cellid] pulldown] $mosfet] s]
set type [dict get [dict get [dict get [dict get $library $cellid] pulldown] $mosfet] t]
- puts $f "$gate $drain $source $type"
+ puts $f "$type $gate $drain $source"
}
# done
seek $f 0 start
while {[gets $f line] >= 0} {
if {[lsearch -glob [split $line] ".*"] == -1} {
- if {[lindex $line 3] == "pmos"} {
- # pullup network
- set mosfet [lindex $line 0]
+ if {[lindex $line 0] == "pmos"} {
+ verb "pullup network"
+ set mosfet [lindex $line 1]
dict set netlist pullup $mosfet {}
- dict set netlist pullup $mosfet g [lindex $line 0]
- dict set netlist pullup $mosfet d [lindex $line 1]
- dict set netlist pullup $mosfet s [lindex $line 2]
- dict set netlist pullup $mosfet t [lindex $line 3]
- } elseif {[lindex $line 3] == "nmos"} {
- # pulldown network
- set mosfet [lindex $line 0]
+ dict set netlist pullup $mosfet g [lindex $line 1]
+ dict set netlist pullup $mosfet d [lindex $line 2]
+ dict set netlist pullup $mosfet s [lindex $line 3]
+ dict set netlist pullup $mosfet t [lindex $line 0]
+ } elseif {[lindex $line 0] == "nmos"} {
+ verb "pulldown network"
+ set mosfet [lindex $line 1]
dict set netlist pulldown $mosfet {}
- dict set netlist pulldown $mosfet g [lindex $line 0]
- dict set netlist pulldown $mosfet d [lindex $line 1]
- dict set netlist pulldown $mosfet s [lindex $line 2]
- dict set netlist pulldown $mosfet t [lindex $line 3]
+ dict set netlist pulldown $mosfet g [lindex $line 1]
+ dict set netlist pulldown $mosfet d [lindex $line 2]
+ dict set netlist pulldown $mosfet s [lindex $line 3]
+ dict set netlist pulldown $mosfet t [lindex $line 0]
}
}
}
# verbose message
if {$verbose} {
puts "anchor?: $anchor"
- set enter [gets stdin]
+ #set enter [gets stdin]
}
# done
verb "enlarge_nand!"
verb "start with pulldown network"
set network [dict get $netlist pulldown]
- set original [anchor_pulldown? $netlist] ; # find anchor transistor
+ verb "find anchor transistor"
+ set original [anchor_pulldown? $netlist]
+ verb "checking original"
if {$original eq {}} {
set netlist {}
} else {
- # prepare replacement
+ verb "prepare replacement"
set inode [expr [maxnode? $netlist] +1] ; # get highest node, add 2, for connectivity
set gate [dict get [dict get $network $original] g] ; # get gate name
set drain [dict get [dict get $network $original] d] ; # get drain side node name / number
set src [dict get [dict get $network $original] s] ; # get source side node name / number
set type [dict get [dict get $network $original] t] ; # get transistor type
- # generate replacement for original with higher node on source
+ verb "generate replacement for original with higher node on source"
dict set orgfet g $original
dict set orgfet d $drain
dict set orgfet s $inode ; # intermediate node number
dict set orgfet t $type
- # generate next mosfet name regarding 'proc naming'
+ verb "generate next mosfet name regarding 'proc naming'"
if {$nameing eq "number"} {
set newname [input_number! $gate]
} else {
set newname [input_char! $gate]
}
- # generate next mosfet itself
+ verb "generate next mosfet itself"
dict set newfet g $newname
dict set newfet d $inode
dict set newfet s $src
dict set newfet t $type
- # build new pulldown network
+ verb "build new pulldown network"
dict set pulldown $newname $newfet
dict for {key value} $network {
if {$key eq $original} {
}
}
- # follow up with pullup network
+ verb "follow up with pullup network"
set network [dict get $netlist pullup]
- # prepare replacement now on pullup network
+ verb "prepare replacement now on pullup network $original"
set gate [dict get [dict get $network $original] g] ; # get gate name
set drain [dict get [dict get $network $original] d] ; # get drain side node name / number
set src [dict get [dict get $network $original] s] ; # get source side node name / number
set type [dict get [dict get $network $original] t] ; # get transistor type
- # generate newfet as "original double"
+ verb "generate newfet as \"original double\""
dict set newfet g $newname ; # just change the input gate / name
dict set newfet d $drain
dict set newfet s $src