partial support for dedicated pins
[pinmux.git] / src / actual_pinmux.py
index 1c7928d66a70f6d1e009ebeb6e071cc54971cafd..a7ff1fe2187eca514a6a3d76c8ccec48bdecaa73 100644 (file)
@@ -9,7 +9,9 @@ dictionary={
        "spi_sclk"      :"output",
        "spi_mosi"      :"output",
        "spi_ss"                :"output",
-       "spi_miso"      :"input"
+       "spi_miso"      :"input",
+       "twi_sda"       :"inout",
+       "twi_scl"       :"inout"
 }
        
 
@@ -19,16 +21,22 @@ assign_cell='''cell{0}_out=wrmux{0}=={1}?'''
 # second argument is the mux value. 
 # Third argument is the signal from the pinmap file
 input_wire='''         
-               rule assign_input_for_{2}_on_cell{0}(wrmux{0}=={1});
-                       wr{2}<=cell{0}_in;
+               rule assign_{2}_on_cell{0}(wrmux{0}=={1});
+                       {2}<=cell{0}_in;
                endrule
 '''
 #########################################
 pinmux=''' '''
 pinmap_file=open("./pinmap.txt","r")
+dedicated=False
 for lineno,line in enumerate(pinmap_file):
        line1=line.split()
-       if(lineno>0):
+       if("muxed" in line):
+               dedicated=False
+       elif("dedicated" in line):
+               dedicated=True
+       ############################## 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)
@@ -49,8 +57,8 @@ for lineno,line in enumerate(pinmap_file):
                ###### 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 reduces human-error as well :)
+               ## 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):
                        digits = str.maketrans(dict.fromkeys('0123456789'))
                        temp=line1[i+1].translate(digits)
@@ -58,8 +66,14 @@ for lineno,line in enumerate(pinmap_file):
                        if(x==None):
                                print("Error: The signal : "+str(line1[i+1])+" in lineno: "+str(lineno)+"of pinmap.txt is not present in the current dictionary.\nSoln: Either update the dictionary or fix typo.")
                                exit(1)
-                       if(x=="input" or x=="inout"):
-                               pinmux=pinmux+input_wire.format(line1[0],i,line1[i+1])+"\n"
+                       if(x=="input"):
+                               pinmux=pinmux+input_wire.format(line1[0],i,"wr"+line1[i+1])+"\n"
+                       elif(x=="inout"):
+                               pinmux=pinmux+input_wire.format(line1[0],i,"wr"+line1[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"
 ###########################################