2 from string
import digits
5 ## dictionary of properties of signals that are supported.
18 ########### common bsv templates ############
19 assign_cell
='''cell{0}_out=wrmux{0}=={1}?'''
20 # first argument is the io-cell number being assigned.
21 # second argument is the mux value.
22 # Third argument is the signal from the pinmap file
24 rule assign_{2}_on_cell{0}(wrmux{0}=={1});
28 #########################################
30 pinmap_file
=open("./pinmap.txt","r")
32 for lineno
,line
in enumerate(pinmap_file
):
36 elif("dedicated" in line
):
38 ############################## Logic for muxed pins ##############################
39 if(len(line1
)>1 and not(dedicated
)):
41 print("ERROR: Parameter N_IO("+str(N_IO
)+") is less than the pin number in line: "+str(lineno
)+" of pinmap.txt")
43 ######## Mux each generic IO cell with the mapping######
44 # provided in the pinmap file
45 pinmux
=pinmux
+" cell"+str(line1
[0])+"_out="
47 while(i
<len(line1
)-1):
48 pinmux
=pinmux
+"wrmux"+str(line1
[0])+"=="+str(i
)+"?"+line1
[i
+1]+"_io:"
49 if(i
+2==len(line1
)-1):
50 pinmux
=pinmux
+line1
[i
+2]+"_io"
55 ########################################################
57 ###### check each cell if "peripheral input/inout" then assign its wire ########
58 ## Here we check the direction of each signal in the dictionary.
59 ## We choose to keep the dictionary within the code and not user-input
60 ## since the interfaces are always standard and cannot change from user-to-user.
61 ## Plus this also reduces human-error as well :)
62 for i
in range(0,len(line1
)-1):
63 digits
= str.maketrans(dict.fromkeys('0123456789'))
64 temp
=line1
[i
+1].translate(digits
)
65 x
=dictionary
.get(temp
);
67 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.")
70 pinmux
=pinmux
+input_wire
.format(line1
[0],i
,"wr"+line1
[i
+1])+"\n"
72 pinmux
=pinmux
+input_wire
.format(line1
[0],i
,"wr"+line1
[i
+1]+"_in")+"\n"
73 ################################################################################
75 ############################## Logic for dedicated pins ##############################
76 elif(len(line1
)>1 and dedicated
):
77 pinmux
=pinmux
+" cell"+str(line1
[0])+"_out="+line1
[1]+"_io;\n"
78 ###########################################