1 # Simple tests for an pinmux module
3 from cocotb
.triggers
import Timer
4 from cocotb
.result
import TestFailure
5 #from pinmux_model import pinmux_model
9 """ dut is design under test """
13 def pinmux_gpio2(dut
):
16 # mux selection lines, each input two bit wide
17 dut
.mux_lines_cell2_mux_in
= 0
19 # enable input for mux
20 dut
.EN_mux_lines_cell0_mux
= 0
21 dut
.EN_mux_lines_cell1_mux
= 0
22 dut
.EN_mux_lines_cell2_mux
= 1
27 # GPIO is inout peripheral
28 dut
.peripheral_side_gpioa_a2_out_in
= 0
29 dut
.peripheral_side_gpioa_a2_outen_in
= 1
33 if dut
.iocell_side_io2_cell_out
!= 0: # output of iopad
35 "gpioa_a2=0/mux=0/out=1 %s iocell_io2 != 0" %
36 str(dut
.iocell_side_io2_cell_out
))
38 dut
.peripheral_side_gpioa_a2_out_in
= 1
42 if dut
.iocell_side_io2_cell_out
!= 1:
44 "gpioa_a2=0/mux=0/out=1 %s iocell_io2 != 1" %
45 str(dut
.iocell_side_io2_cell_out
))
47 # GPIO2-in test (first see if it's tri-state)
48 if str(dut
.peripheral_side_gpioa_a2_in
) != "x":
50 "gpioa_a2=0/mux=0/out=1 %s gpio_a2_in != x" %
51 str(dut
.peripheral_side_gpioa_a2_in
))
53 dut
.peripheral_side_gpioa_a2_outen_in
= 0
54 dut
.iocell_side_io2_cell_in_in
= 0
57 if dut
.peripheral_side_gpioa_a2_in
!= 0:
59 "iocell_io2=0/mux=0/out=0 %s gpioa_a2 != 0" %
60 str(dut
.peripheral_side_gpioa_a2_in
))
62 dut
.iocell_side_io2_cell_in_in
= 1
65 if dut
.peripheral_side_gpioa_a2_in
!= 1:
67 "iocell_io2=1/mux=0/out=0 %s gpioa_a2 != 1" %
68 str(dut
.peripheral_side_gpioa_a2_in
))
70 dut
.peripheral_side_gpioa_a2_outen_in
= 1
71 dut
.iocell_side_io2_cell_in_in
= 0
73 dut
._log
.info("gpioa_a2_in %s" % dut
.peripheral_side_gpioa_a2_in
)
75 if dut
.iocell_side_io2_cell_out
!= 1:
77 "gpioa_a2=0/mux=0/out=1 %s iocell_io2 != 1" %
78 str(dut
.iocell_side_io2_cell_out
))
86 # mux selection lines, each input two bit wide
87 dut
.mux_lines_cell0_mux_in
= 1
89 # enable input for mux
90 dut
.EN_mux_lines_cell0_mux
= 1
91 dut
.EN_mux_lines_cell1_mux
= 0
92 dut
.EN_mux_lines_cell2_mux
= 0
98 dut
.peripheral_side_uart_tx_in
= 1
99 dut
.peripheral_side_gpioa_a0_outen_in
= 1
103 if dut
.iocell_side_io0_cell_out
!= 1:
105 "uart_tx=1/mux=0/out=1 %s iocell_io0 != 1" %
106 str(dut
.iocell_side_io0_cell_out
))
108 dut
.peripheral_side_uart_tx_in
= 0
112 if dut
.iocell_side_io0_cell_out
!= 0:
114 "uart_tx=0/mux=0/out=1 %s iocell_io0 != 0" %
115 str(dut
.iocell_side_io0_cell_out
))
120 def pinmux_twi_scl(dut
):
121 """Test for I2C SCL"""
123 # mux selection lines, each input two bit wide
124 dut
.mux_lines_cell0_mux_in
= 1
125 dut
.mux_lines_cell1_mux_in
= 2
126 dut
.mux_lines_cell2_mux_in
= 0
128 # enable input for mux
129 dut
.EN_mux_lines_cell0_mux
= 0
130 dut
.EN_mux_lines_cell1_mux
= 1
131 dut
.EN_mux_lines_cell2_mux
= 0
135 # Test for out for twi_scl
136 dut
.peripheral_side_twi_scl_out_in
= 0
137 dut
.peripheral_side_twi_scl_outen_in
= 1
140 if dut
.iocell_side_io2_cell_out
!= 0:
142 "twi_scl=0/mux=0/out=1 %s iocell_io2 != 0" %
143 str(dut
.iocell_side_io2_cell_out
))
145 dut
.peripheral_side_twi_scl_out_in
= 1
148 if dut
.iocell_side_io2_cell_out
!= 1:
150 "twi_scl=0/mux=0/out=1 %s iocell_io2 != 0" %
151 str(dut
.iocell_side_io2_cell_out
))
154 # first check for tristate
155 if str(dut
.peripheral_side_twi_scl_in
) != "x":
157 "twi_scl=0/mux=0/out=1 %s twi_scl_in != x" %
158 str(dut
.peripheral_side_twi_scl_in
))
160 dut
.peripheral_side_twi_scl_outen_in
= 0
161 dut
.iocell_side_io2_cell_in_in
= 0
164 if dut
.peripheral_side_twi_scl_in
!= 0:
166 "iocell_io2=0/mux=0/out=0 %s twi_scl != 0" %
167 str(dut
.peripheral_side_twi_scl_in
))
169 dut
.iocell_side_io2_cell_in_in
= 1
172 if dut
.peripheral_side_twi_scl_in
!= 1:
174 "iocell_io2=1/mux=0/out=0 %s twi_scl != 1" %
175 str(dut
.peripheral_side_twi_scl_in
))
177 dut
.peripheral_side_twi_scl_outen_in
= 1
178 dut
.iocell_side_io2_cell_in_in
= 0
180 dut
._log
.info("twi_scl_in %s" % dut
.peripheral_side_twi_scl_in
)
182 if dut
.iocell_side_io2_cell_out
!= 1:
184 "twi_scl=0/mux=0/out=1 %s iocell_io2 != 1" %
185 str(dut
.iocell_side_io2_cell_out
))
192 def pinmux_twi_sda(dut
):
195 # mux selection lines, each input two bit wide
196 dut
.mux_lines_cell1_mux_in
= 2
198 # enable input for mux
199 dut
.EN_mux_lines_cell0_mux
= 0
200 dut
.EN_mux_lines_cell1_mux
= 1
201 dut
.EN_mux_lines_cell2_mux
= 0
207 # define input variables
208 dut
.peripheral_side_twi_sda_out_in
= 0
209 dut
.peripheral_side_twi_sda_outen_in
= 1
213 dut
._log
.info("io1_out %s" % dut
.iocell_side_io1_cell_out
)
214 # Test for out for twi_sda
215 if dut
.iocell_side_io1_cell_out
!= 0:
217 "twi_sda=0/mux=0/out=1 %s iocell_io1 != 0" %
218 str(dut
.iocell_side_io1_cell_out
))
220 dut
.peripheral_side_twi_sda_out_in
= 1
223 if dut
.iocell_side_io1_cell_out
!= 1:
225 "twi_sda=1/mux=0/out=1 %s iocell_io1 != 1" %
226 str(dut
.iocell_side_io1_cell_out
))
229 # first check for tristate
230 if str(dut
.peripheral_side_twi_sda_in
) != "x":
232 "twi_sda=0/mux=0/out=1 %s twi_sda_in != x" %
233 str(dut
.peripheral_side_twi_sda_in
))
235 dut
.peripheral_side_twi_sda_outen_in
= 0
236 dut
.iocell_side_io1_cell_in_in
= 0
239 if dut
.peripheral_side_twi_sda_in
!= 0:
241 "iocell_io1=0/mux=0/out=0 %s twi_sda != 0" %
242 str(dut
.peripheral_side_twi_sda_in
))
244 dut
.iocell_side_io1_cell_in_in
= 1
247 if dut
.peripheral_side_twi_sda_in
!= 1:
249 "iocell_io1=0/mux=0/out=0 %s twi_sda != 0" %
250 str(dut
.peripheral_side_twi_sda_in
))
252 dut
.peripheral_side_twi_sda_outen_in
= 1
253 dut
.iocell_side_io1_cell_in_in
= 0
255 dut
._log
.info("twi_sda_in %s" % dut
.peripheral_side_twi_sda_in
)
257 if dut
.iocell_side_io1_cell_out
!= 1:
259 "twi_sda=0/mux=0/out=1 %s iocell_io1 != 1" %
260 str(dut
.iocell_side_io1_cell_out
))