signal name for pwm0 is pwm, so variables should change to pwm0_pwm and likewise
[pinmux.git] / src / actual_pinmux.py
index bedd5677cb143c8fd485b859157e56f256776989..4d00d34395b9b2d24da747afd117a48f6f6009cd 100644 (file)
@@ -1,5 +1,8 @@
-from params import *
 from string import digits
+try:
+    from string import maketrans
+except ImportError:
+    maketrans = str.maketrans
 
 
 # dictionary of properties of signals that are supported.
@@ -8,10 +11,14 @@ 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"
+    "twi_scl"  : "inout",
+    "sd_clk": "output",
+    "sd_cmd": "output",
+    "sd_d": "inout",
+    "pwm_pwm": "output"
 }
 
 
@@ -20,49 +27,36 @@ dictionary = {
 # second argument is the mux value.
 # Third argument is the signal from the pinmap file
 mux_wire = '''
-      rule assign_{2}_on_cell{0}(wrmux{0}=={1});
-        {2}<=cell{0}_in;
+      rule assign_{2}_on_cell{0}(wrcell{0}_mux=={1});
+        {2}<=cell{0}_mux_in;
       endrule
 '''
 dedicated_wire = '''
       rule assign_{1}_on_cell{0};
-        {1}<=cell{0}_in;
+        {1}<=cell{0}_mux_in;
       endrule
 '''
 # ============================================================
-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="
+digits = maketrans('0123456789', ' '*10)  # delete space later
+
+def cn(idx):
+    return "cell%s_mux" % str(idx)
+
+def init(p):
+    p.pinmux = ' '
+    global dedicated_wire
+    for cell in p.muxed_cells:
+        p.pinmux += "      %s_out=" % cn(cell[0])
         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"
+        while(i < len(cell) - 1):
+            p.pinmux += "wr%s" % cn(cell[0]) + \
+                "==" + str(i) + "?" + cell[i + 1] + "_io:\n\t\t\t"
+            if(i + 2 == len(cell) - 1):
+                p.pinmux += cell[i + 2] + "_io"
                 i = i + 2
             else:
                 i = i + 1
-        pinmux = pinmux + ";\n"
+        p.pinmux += ";\n"
         # ======================================================== #
 
         # check each cell if "peripheral input/inout" then assign its wire
@@ -70,37 +64,36 @@ for lineno, line in enumerate(pinmap_file):
         # 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)
+        for i in range(0, len(cell) - 1):
+            temp = cell[i + 1].translate(digits)
+            temp = temp.replace(' ', '')
             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.")
+                    "ERROR: The signal : " +
+                    str(cell[i + 1]) +
+                    " 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"
+                p.pinmux += \
+                    mux_wire.format(cell[0], i, "wr" + cell[i + 1]) + "\n"
             elif(x == "inout"):
-                pinmux = pinmux + \
-                    mux_wire.format(line1[0], i, "wr" + line1[i + 1] +
-                                    "_in") + "\n"
-        # ============================================================ #
+                p.pinmux += \
+                    mux_wire.format(cell[0], i, "wr" + cell[i + 1] +
+                                                "_in") + "\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)
+    for cell in p.dedicated_cells:
+        p.pinmux += "      %s" % cn(cell[0]) + \
+            "_out=" + cell[1] + "_io;\n"
+        temp = cell[1].translate(digits)
         x = dictionary.get(temp)
         if(x == "input"):
             pinmux = pinmux + \
-                dedicated_wire.format(line1[0], "wr" + line1[1]) + "\n"
+                dedicated_wire.format(cell[0], "wr" + cell[1]) + "\n"
         elif(x == "inout"):
             pinmux = pinmux + \
-                dedicated_wire.format(line1[0], "wr" + line1[1] + "_in") + "\n"
-    # ======================================================= #
-# =========================================================
+                dedicated_wire.format(cell[0], "wr" + cell[1] + "_in") + "\n"
+    # =======================================================#