Adapted to the new .cell format
authorPhilipp Gühring <pg@futureware.at>
Fri, 2 Aug 2019 14:54:09 +0000 (14:54 +0000)
committerPhilipp Gühring <pg@futureware.at>
Fri, 2 Aug 2019 14:54:09 +0000 (14:54 +0000)
Tools/tcl/popcorn

index 95b2fa78b292654dbbef6e663d701a4ad993932a..4a3798919cbb1f7e465a6e6d7ae310f3424229f8 100755 (executable)
@@ -116,11 +116,11 @@ proc export! {path cellid library} {
 
     # 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]]]
 
@@ -129,7 +129,7 @@ proc export! {path cellid library} {
         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]]]
@@ -139,7 +139,7 @@ proc export! {path cellid library} {
         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
@@ -159,22 +159,22 @@ proc import {f} {
     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]
             }
         }
     }
@@ -267,7 +267,7 @@ proc anchor? {start end network} {
     # verbose message
     if {$verbose} {
         puts "anchor?: $anchor"
-        set enter [gets stdin]
+        #set enter [gets stdin]
     }
 
     # done
@@ -402,39 +402,41 @@ proc enlarge_nand! {nameing netlist} {
     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} {
@@ -444,16 +446,16 @@ proc enlarge_nand! {nameing netlist} {
             }
         }
 
-        # 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