c66098e55c016696ffeda2d86d53c93c4c50dd45
1 # ========= Interface declarations ================ #
3 method Action cell{0}_mux(Bit#({1}) in);'''
6 (*always_ready*) method Bit#(1) io_outputval_{0};
7 (*always_ready*) method Bit#(1) io_output_en_{0};
8 (*always_ready*) method Bit#(1) io_input_en_{0};
9 (*always_ready*) method Bit#(1) io_pullup_en_{0};
10 (*always_ready*) method Bit#(1) io_pulldown_en_{0};
11 (*always_ready*) method Bit#(1) io_drivestrength_{0};
12 (*always_ready*) method Bit#(1) io_pushpull_en_{0};
13 (*always_ready*) method Bit#(1) io_opendrain_en_{0};
14 (*always_ready,always_enabled,result="io"*)
15 method Action io_inputval_{0}(Bit#(1) in);
17 # == Peripheral Interface definitions == #
18 # these are the interface of the peripherals to the pin mux
19 # Outputs from the peripherals will be inputs to the pinmux
20 # module. Hence the change in direction for most pins
22 uartinterface_decl
= '''
23 (*always_ready,always_enabled*) method Action tx_{0}(Bit#(1) in);
24 (*always_ready,always_enabled*) method Bit#(1) rx_{0};
27 spiinterface_decl
= '''
28 (*always_ready,always_enabled*) method Action sclk_{0} (Bit#(1) in);
29 (*always_ready,always_enabled*) method Action mosi_{0} (Bit#(1) in);
30 (*always_ready,always_enabled*) method Action ss_{0} (Bit#(1) in);
31 (*always_ready,always_enabled*) method Bit#(1) miso_{0};
34 twiinterface_decl
= '''
35 (*always_ready,always_enabled*) method Action sda{0}_out (Bit#(1) in);
36 (*always_ready,always_enabled*) method Action sda{0}_outen (Bit#(1) in);
37 (*always_ready,always_enabled*) method Bit#(1) sda{0}_in;
38 (*always_ready,always_enabled*) method Action scl{0}_out (Bit#(1) in);
39 (*always_ready,always_enabled*) method Action scl{0}_outen (Bit#(1) in);
40 (*always_ready,always_enabled*) method Bit#(1) scl{0}_in;
43 sdinterface_decl
= '''
44 (*always_ready,always_enabled*) method Action sd{0}_clk (Bit#(1) in);
45 (*always_ready,always_enabled*) method Action sd{0}_cmd (Bit#(1) in);
46 (*always_ready,always_enabled*) method Action sd{0}_d0_out (Bit#(1) in);
47 (*always_ready,always_enabled*) method Action sd{0}_d0_outen (Bit#(1) in);
48 (*always_ready,always_enabled*) method Bit#(1) sd{0}_d0_in;
49 (*always_ready,always_enabled*) method Action sd{0}_d1_out (Bit#(1) in);
50 (*always_ready,always_enabled*) method Action sd{0}_d1_outen (Bit#(1) in);
51 (*always_ready,always_enabled*) method Bit#(1) sd{0}_d1_in;
52 (*always_ready,always_enabled*) method Action sd{0}_d2_out (Bit#(1) in);
53 (*always_ready,always_enabled*) method Action sd{0}_d2_outen (Bit#(1) in);
54 (*always_ready,always_enabled*) method Bit#(1) sd{0}_d2_in;
55 (*always_ready,always_enabled*) method Action sd{0}_d3_out (Bit#(1) in);
56 (*always_ready,always_enabled*) method Action sd{0}_d3_outen (Bit#(1) in);
57 (*always_ready,always_enabled*) method Bit#(1) sd{0}_d3_in;
60 jtaginterface_decl
= '''
61 (*always_ready,always_enabled*) method Bit#(1) jtag{0}_tdi;
62 (*always_ready,always_enabled*) method Bit#(1) jtag{0}_tms;
63 (*always_ready,always_enabled*) method Bit#(1) jtag{0}_tclk;
64 (*always_ready,always_enabled*) method Bit#(1) jtag{0}_trst;
65 (*always_ready,always_enabled*) method Action jtag{0}_tdo(Bit#(1) in);
68 pwminterface_decl
= '''
69 (*always_ready,always_enabled*) method Action pwm{0}(Bit#(1) in);
71 # ======================================= #
75 def __init__(self
, name
, ready
, enabled
, action
, inout
):
78 self
.enabled
= enabled
86 status
.append('always_ready')
88 status
.append('always_enabled')
89 res
+= ','.join(status
)
95 res
+= ' (Bit#(1) in)'
101 if __name__
== '__main__':
103 def _pinmunge(p
, sep
, repl
, dedupe
=True):
104 """ munges the text so it's easier to compare.
105 splits by separator, strips out blanks, re-joins.
110 p
= filter(lambda x
: x
, p
) # filter out blanks
114 """ munges the text so it's easier to compare.
116 p
= _pinmunge(p
, "(", " ( ", False)
117 p
= _pinmunge(p
, ")", " ) ", False)
118 p
= _pinmunge(p
, " ", " ")
121 pwm
= Pin("pwm{0}", True, True, True, True)
122 print pinmunge(str(pwm
))
123 print pinmunge(pwminterface_decl
)
124 assert pinmunge(str(pwm
)) == pinmunge(pwminterface_decl
)