1 from string
import digits
3 from string
import maketrans
5 maketrans
= str.maketrans
8 # dictionary of properties of signals that are supported.
12 "spi_sclk" : "output",
13 "spi_mosi" : "output",
25 # ============== common bsv templates ============ #
26 # first argument is the io-cell number being assigned.
27 # second argument is the mux value.
28 # Third argument is the signal from the pinmap file
30 rule assign_{2}_on_cell{0}(wrcell{0}_mux=={1});
35 rule assign_{1}_on_cell{0};
39 # ============================================================
40 digits
= maketrans('0123456789', ' ' * 10) # delete space later
44 return "cell%s_mux" % str(idx
)
50 for cell
in p
.muxed_cells
:
51 p
.pinmux
+= " %s_out=" % cn(cell
[0])
52 for i
in range(0, len(cell
) - 2):
53 p
.pinmux
+= "wr%s" % cn(cell
[0]) + \
54 "==" + str(i
) + "?" + cell
[i
+ 1] + "_io:\n\t\t\t"
55 p
.pinmux
+= cell
[i
+ 2] + "_io"
57 # ======================================================== #
59 # check each cell if "peripheral input/inout" then assign its wire
60 # Here we check the direction of each signal in the dictionary.
61 # We choose to keep the dictionary within the code and not user-input
62 # since the interfaces are always standard and cannot change from
63 # user-to-user. Plus this also reduces human-error as well :)
64 for i
in range(0, len(cell
) - 1):
65 temp
= cell
[i
+ 1].translate(digits
)
66 temp
= temp
.replace(' ', '')
67 x
= dictionary
.get(temp
)
68 assert x
is not None, "ERROR: The signal : " + \
70 " of pinmap.txt isn't present \nin the current" + \
71 " dictionary. Update dictionary or fix-typo."
74 mux_wire
.format(cell
[0], i
, "wr" + cell
[i
+ 1]) + "\n"
77 mux_wire
.format(cell
[0], i
, "wr" + cell
[i
+ 1] +
79 # ============================================================ #
81 # ================== Logic for dedicated pins ========= #
82 for cell
in p
.dedicated_cells
:
83 p
.pinmux
+= " %s" % cn(cell
[0]) + \
84 "_out=" + cell
[1] + "_io;\n"
85 temp
= cell
[1].translate(digits
)
86 x
= dictionary
.get(temp
)
89 dedicated_wire
.format(cell
[0], "wr" + cell
[1]) + "\n"
92 dedicated_wire
.format(cell
[0], "wr" + cell
[1] + "_in") + "\n"
93 # =======================================================#