maintaining distinct arrays for muxed and dedicated cells
[pinmux.git] / src / actual_pinmux.py
index bedd5677cb143c8fd485b859157e56f256776989..37c8cdf921347988b9057b8f7eaf9b92ab5ddc46 100644 (file)
@@ -8,7 +8,7 @@ dictionary = {
     "uart_tx"  : "output",
     "spi_sclk" : "output",
     "spi_mosi" : "output",
-    "spi_ss"           : "output",
+    "spi_ss"   : "output",
     "spi_miso" : "input",
     "twi_sda"  : "inout",
     "twi_scl"  : "inout"
@@ -31,76 +31,57 @@ dedicated_wire = '''
 '''
 # ============================================================
 pinmux = ''' '''
-pinmap_file = open("./pinmap.txt", "r")
-dedicated = False
-for lineno, line in enumerate(pinmap_file):
-    line1 = line.split()
-    if("muxed" in line):
-        dedicated = False
-    elif("dedicated" in line):
-        dedicated = True
-    digits = str.maketrans(dict.fromkeys('0123456789'))
-    # ==== Logic for muxed pins ==== #
-    if(len(line1) > 1 and not(dedicated)):
-        if(lineno > N_IO):
-            print(
-                "ERROR: Parameter N_IO(" +
-                str(N_IO) +
-                ") is less than the pin number in line: " +
-                str(lineno) +
-                " of pinmap.txt")
-            exit(1)
-        # ==== Mux each generic IO cell with the mapping ===== #
-        # provided in the pinmap file
-        pinmux = pinmux + "      cell" + str(line1[0]) + "_out="
-        i = 0
-        while(i < len(line1) - 1):
-            pinmux = pinmux + "wrmux" + \
-                str(line1[0]) + "==" + str(i) + "?" + line1[i + 1] + "_io:"
-            if(i + 2 == len(line1) - 1):
-                pinmux = pinmux + line1[i + 2] + "_io"
-                i = i + 2
-            else:
-                i = i + 1
-        pinmux = pinmux + ";\n"
-        # ======================================================== #
+digits = str.maketrans(dict.fromkeys('0123456789'))
 
-        # check each cell if "peripheral input/inout" then assign its wire
-        # Here we check the direction of each signal in the dictionary.
-        # We choose to keep the dictionary within the code and not user-input
-        # since the interfaces are always standard and cannot change from
-        # user-to-user. Plus this also reduces human-error as well :)
-        for i in range(0, len(line1) - 1):
-            temp = line1[i + 1].translate(digits)
-            x = dictionary.get(temp)
-            if(x is None):
-                print(
-                    "Error: The signal : " +
-                    str(line1[i + 1]) +
-                    " in lineno: " +
-                    str(lineno) + "of pinmap.txt isn't present in the \
-                    current dictionary.\nUpdate dictionary or fix-typo.")
-                exit(1)
-            if(x == "input"):
-                pinmux = pinmux + \
-                    mux_wire.format(line1[0], i, "wr" + line1[i + 1]) + "\n"
-            elif(x == "inout"):
-                pinmux = pinmux + \
-                    mux_wire.format(line1[0], i, "wr" + line1[i + 1] +
-                                    "_in") + "\n"
-        # ============================================================ #
+for cell in muxed_cells:
+    pinmux = pinmux + "      cell" + str(cell[0]) + "_out="
+    i = 0
+    while(i < len(cell) - 1):
+        pinmux = pinmux + "wrmux" + \
+            str(cell[0]) + "==" + str(i) + "?" + cell[i + 1] + "_io:"
+        if(i + 2 == len(cell) - 1):
+            pinmux = pinmux + cell[i + 2] + "_io"
+            i = i + 2
+        else:
+            i = i + 1
+    pinmux = pinmux + ";\n"
+    # ======================================================== #
 
-    # ==================  Logic for dedicated pins ========= #
-    elif(len(line1) > 1 and dedicated):
-        pinmux = pinmux + "      cell" + \
-            str(line1[0]) + "_out=" + line1[1] + "_io;\n"
-        temp = line1[1].translate(digits)
+    # check each cell if "peripheral input/inout" then assign its wire
+    # Here we check the direction of each signal in the dictionary.
+    # We choose to keep the dictionary within the code and not user-input
+    # since the interfaces are always standard and cannot change from
+    # user-to-user. Plus this also reduces human-error as well :)
+    for i in range(0, len(cell) - 1):
+        temp = cell[i + 1].translate(digits)
         x = dictionary.get(temp)
+        if(x is None):
+            print(
+              "Error: The signal : " +
+              str(cell[i + 1]) +
+              " in lineno: " +
+              str(lineno) + "of pinmap.txt isn't present in the \
+              current dictionary.\nUpdate dictionary or fix-typo.")
+            exit(1)
         if(x == "input"):
             pinmux = pinmux + \
-                dedicated_wire.format(line1[0], "wr" + line1[1]) + "\n"
+              mux_wire.format(cell[0], i, "wr" + cell[i + 1]) + "\n"
         elif(x == "inout"):
             pinmux = pinmux + \
-                dedicated_wire.format(line1[0], "wr" + line1[1] + "_in") + "\n"
-    # ======================================================= #
-# =========================================================
+                mux_wire.format(cell[0], i, "wr" + cell[i + 1] +
+                                            "_in") + "\n"
+# ============================================================ #
+
+# ==================  Logic for dedicated pins ========= #
+for cell in dedicated_cells:
+    pinmux = pinmux + "      cell" + \
+        str(cell[0]) + "_out=" + cell[1] + "_io;\n"
+    temp = cell[1].translate(digits)
+    x = dictionary.get(temp)
+    if(x == "input"):
+        pinmux = pinmux + \
+            dedicated_wire.format(cell[0], "wr" + cell[1]) + "\n"
+    elif(x == "inout"):
+        pinmux = pinmux + \
+            dedicated_wire.format(cell[0], "wr" + cell[1] + "_in") + "\n"
+# =======================================================#