make mux cells possible to be 1 wide
[pinmux.git] / src / parse.py
index 61bc8e12a855d760fc8dd602310119fdf8d6e609..16927efa841235a3d27c110def4e7868b9fea02c 100644 (file)
@@ -14,8 +14,9 @@ class Parse(object):
     N_IO = 0
     N_MUX_IO = 0
     Addressing = 'WORD'
-    ADDR_WIDTH = 32
-    DATA_WIDTH = 32
+    ADDR_WIDTH = 64  # TODO parameterise
+    PADDR_WIDTH = 32  # TODO parameterise
+    DATA_WIDTH = 64  # TODO parameterise
     # ================ #
 
     # Generating the number of bits for memory map #
@@ -45,14 +46,19 @@ class Parse(object):
             fname = os.path.join(pth, fname)
         with open(fname) as pinmapfile:
             for lineno, line in enumerate(pinmapfile):
-                line1 = line.split('\t')
+                line1 = line[:-1].split('\t')
                 if len(line1) <= 1:
                     continue
                 self.pinnumbers.append(int(line1[0]))
-                if len(line1) == 2:  # dedicated
-                    self.dedicated_cells.append(line1)
-                else:
-                    self.muxed_cells.append(line1)
+                # XXX TODO: dedicated pins in separate file
+                #if len(line1) == 2:  # dedicated
+                #    self.dedicated_cells.append(line1)
+                #else:
+                for i in range(1, len(line1)):
+                    # XXX HORRIBLE HACK!!
+                    if line1[i].startswith('pwm'):
+                        line1[i] = 'pwm%s_out' % line1[i][4:]
+                self.muxed_cells.append(line1)
 
         self.pinnumbers = sorted(self.pinnumbers)
         self.upper_offset = self.lower_offset + \
@@ -61,9 +67,12 @@ class Parse(object):
         if verify:
             self.do_checks()
 
+        self.cell_bitwidth = self.get_cell_bit_width()
+
         # == user info after parsing ================= #
         self.N_IO = len(self.dedicated_cells) + len(self.muxed_cells)
         print("Max number of IO: " + str(self.N_IO))
+        print("Muxer bit width: " + str(self.cell_bitwidth))
         print("Muxed IOs: " + str(len(self.muxed_cells)))
         print("Dedicated IOs: " + str(len(self.dedicated_cells)))
 
@@ -100,6 +109,12 @@ class Parse(object):
 
         # TODO
 
+    def get_cell_bit_width(self):
+        max_num_cells = 0
+        for cell in self.muxed_cells:
+            max_num_cells = max(len(cell) - 1, max_num_cells)
+        return int(math.log(max_num_cells + 1, 2))
+
 
 if __name__ == '__main__':
     p = Parse()