OSDN Git Service

netlist/netlist.py: connected_via() uses pinmap class
authorPawel Jewstafjew (w) <Pawel.Jewstafjew@gmail.com>
Tue, 24 Jul 2018 07:57:15 +0000 (08:57 +0100)
committerPawel Jewstafjew (w) <Pawel.Jewstafjew@gmail.com>
Tue, 24 Jul 2018 07:57:15 +0000 (08:57 +0100)
netlist/netlist.py

index df60048..6d327fa 100755 (executable)
@@ -147,6 +147,28 @@ def match_any(list1, list2):
               return True
         return False
 
+# pin numbers increase clockwise
+class PinClock:
+    def __init__(self, dev_pins = 2):
+       assert((dev_pins % 2) == 0)
+       self.dev_pins = dev_pins
+    # the corresponding pin
+    def via(self, pin_a):
+       assert(pin_a >= 1)
+       assert(pin_a <= self.dev_pins)
+       return self.dev_pins + 1 - pin_a # the opposite pin
+
+# pin numbers increase in "colums"
+class PinCols:
+    def __init__(self, dev_pins = 2):
+       assert((dev_pins % 2) == 0)
+       self.dev_pins = dev_pins
+    # the corresponding pin
+    def via(self, pin_a):
+       assert(pin_a >= 1)
+       assert(pin_a <= self.dev_pins)
+       return self.dev_pins / 2 + pin_a # the opposite pin
+
 class NetList:
         # Netlist is a dir of Nets
        def __init__(self):
@@ -323,7 +345,7 @@ class NetList:
                print device.name, pin_name, 'single node nets, instances:', len(pins)
                return True
 
-        def connected_via(self, kind, device, pin_name, net2, dev_pins=2):
+        def connected_via(self, kind, device, pin_name, net2, pinmap=PinClock(2)):
                "connected via kind-device"
                 (pin, net_name) = self.find_pin_net_dev(device, pin_name)
                 if net_name == None:
@@ -341,12 +363,10 @@ class NetList:
                        return False
                r = res[0]
                if ((kind == 'R') and r.device.startswith('RA')): # 4 resistors in 8 pin package
-                       dev_pins = 8
+                       pinmap = PinClock(8)
 
                pin_a = int(r.pin)
-               assert(pin_a >= 1)
-               assert(pin_a <= dev_pins)
-               pin_b = dev_pins+1-pin_a # the opposite pin
+               pin_b = pinmap.via(pin_a) # the opposite pin
 
                node = Node((r.device, `pin_b`))
                #print 'through:', r, node, self.find_net(node), net2
@@ -577,4 +597,4 @@ class Parse_KYN:
                        self.parse_line(combined_line, number-1)
                        combined_line = l
                self.parse_line(combined_line, number-1)
-               f.close()
+                f.close()