weird routing in top right corner, tracks go nowhere
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Mon, 6 Apr 2020 15:51:36 +0000 (15:51 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Mon, 6 Apr 2020 15:51:36 +0000 (15:51 +0000)
experiments7/doAlu16.py

index 954a311b8ac32a521c76586c8ff6dced3e3fe217..c2fdcdef867f64c87d41cb9dcbfd3fc925c59d22 100755 (executable)
@@ -73,7 +73,7 @@ class ALU16(Module):
     def build(self):
 
         h_margin = 25.0
-        v_margin = 75.0
+        v_margin = 50.0
 
         if not self.build_submodules():
             return False
@@ -92,10 +92,18 @@ class ALU16(Module):
             height = self.from_dbu(max([
                 self.ab.getHeight(), add.ab.getHeight(), sub.ab.getHeight()
             ])) + 2*v_margin
+
+            # experiment, over-ride
+            width = 1500
+            height = 450
+
             self.ab = Box(0, 0, self.to_dbu(width), self.to_dbu(height))
 
-            self.place_submodule(add, h_margin, v_margin)
-            self.place_submodule(sub, width-sub.ab_width-h_margin, v_margin)
+            add_wid = self.from_dbu(add.ab.getWidth())
+            sub_ht = self.from_dbu(sub.ab.getHeight())
+            self.place_submodule(add, h_margin, v_margin+add_wid)
+            self.place_submodule(sub, width-sub.ab_width-h_margin+sub_ht-25,
+                                      v_margin)
 
             # TODO: replace with some form of lazy evaluation?
             y_north = self.from_dbu(self.ab.getYMax())
@@ -111,19 +119,24 @@ class ALU16(Module):
         # this puts all the remaining cells (little ones)
         # into this (small) space so that they do not go
         # "all over the place" around the add and sub
+
+        # XXX this doesn't work: box is far too big, covers the entire
+        # area (including "under" the add and sub)
         self.ab = Box(
             self.to_dbu((width-self.ab_width)/2 - h_margin),
             self.to_dbu(v_margin),
             self.to_dbu((width+self.ab_width)/2 + h_margin),
             self.to_dbu(height - v_margin)
         )
-        self.place()
+        self.ab = Box(self.to_dbu(550), self.to_dbu(25),
+                      self.to_dbu(1000), self.to_dbu(450))
+        self.place() # place only
 
         # then route (globally)
         # this connects up not just in the remaining (little) cells,
         # it connects *to add and sub and the outside world as well*
         self.ab = Box(0, 0, self.to_dbu(width), self.to_dbu(height))
-        result = self.place_and_route()
+        result = self.route()
 
         self.save()
         return result
@@ -146,7 +159,7 @@ def ScriptMain(editor=None, **kwargs):
                 'BLOCKAGE2', 'BLOCKAGE3', 'BLOCKAGE4',
             ),
         },
-        orientation=Transformation.Orientation.ID,
+        orientation=Transformation.Orientation.R3,
     )
     sub = AddSub(
         'sub', editor,
@@ -162,7 +175,7 @@ def ScriptMain(editor=None, **kwargs):
                 'BLOCKAGE2', 'BLOCKAGE3', 'BLOCKAGE4',
             ),
         },
-        orientation=Transformation.Orientation.XR,
+        orientation=Transformation.Orientation.R1,
     )
 
     alu16 = ALU16(