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 """
12 for gpio2, there are three ports at peripheral side:
13 peripheral_side_gpioa_a2_out_in
14 peripheral_side_gpioa_a2_outen_in
15 peripheral_side_gpioa_a2_in
18 def pinmux_gpio2(dut
):
21 # mux selection lines, each input two bit wide
22 dut
.mux_lines_cell2_mux_in
= 0
24 # enable input for mux
25 dut
.EN_mux_lines_cell0_mux
= 0
26 dut
.EN_mux_lines_cell1_mux
= 0
27 dut
.EN_mux_lines_cell2_mux
= 1
32 # GPIO is inout peripheral
33 dut
.peripheral_side_gpioa_a2_out_in
= 0
34 dut
.peripheral_side_gpioa_a2_outen_in
= 1
38 if dut
.iocell_side_io2_cell_out
!= 0: # output of iopad
40 "gpioa_a2=0/mux=0/out=1 %s iocell_io2 != 0" %
41 str(dut
.iocell_side_io2_cell_out
))
43 dut
.peripheral_side_gpioa_a2_out_in
= 1
47 if dut
.iocell_side_io2_cell_out
!= 1:
49 "gpioa_a2=0/mux=0/out=1 %s iocell_io2 != 1" %
50 str(dut
.iocell_side_io2_cell_out
))
52 # GPIO2-in test (first see if it's tri-state)
53 if str(dut
.peripheral_side_gpioa_a2_in
) != "x":
55 "gpioa_a2=0/mux=0/out=1 %s gpio_a2_in != x" %
56 str(dut
.peripheral_side_gpioa_a2_in
))
58 dut
.peripheral_side_gpioa_a2_outen_in
= 0
59 dut
.iocell_side_io2_cell_in_in
= 0
62 if dut
.peripheral_side_gpioa_a2_in
!= 0:
64 "iocell_io2=0/mux=0/out=0 %s gpioa_a2 != 0" %
65 str(dut
.peripheral_side_gpioa_a2_in
))
67 dut
.iocell_side_io2_cell_in_in
= 1
70 if dut
.peripheral_side_gpioa_a2_in
!= 1:
72 "iocell_io2=1/mux=0/out=0 %s gpioa_a2 != 1" %
73 str(dut
.peripheral_side_gpioa_a2_in
))
75 dut
.peripheral_side_gpioa_a2_outen_in
= 1
76 dut
.iocell_side_io2_cell_in_in
= 0
78 dut
._log
.info("gpioa_a2_in %s" % dut
.peripheral_side_gpioa_a2_in
)
80 if dut
.iocell_side_io2_cell_out
!= 1:
82 "gpioa_a2=0/mux=0/out=1 %s iocell_io2 != 1" %
83 str(dut
.iocell_side_io2_cell_out
))
85 dut
._log
.info("Ok!, gpio2 passed")
91 # mux selection lines, each input two bit wide
92 dut
.mux_lines_cell0_mux_in
= 1
94 # enable input for mux
95 dut
.EN_mux_lines_cell0_mux
= 1
96 dut
.EN_mux_lines_cell1_mux
= 0
97 dut
.EN_mux_lines_cell2_mux
= 0
103 dut
.peripheral_side_uart_tx_in
= 1
104 dut
.peripheral_side_gpioa_a0_outen_in
= 1
108 if dut
.iocell_side_io0_cell_out
!= 1:
110 "uart_tx=1/mux=0/out=1 %s iocell_io0 != 1" %
111 str(dut
.iocell_side_io0_cell_out
))
113 dut
.peripheral_side_uart_tx_in
= 0
117 if dut
.iocell_side_io0_cell_out
!= 0:
119 "uart_tx=0/mux=0/out=1 %s iocell_io0 != 0" %
120 str(dut
.iocell_side_io0_cell_out
))
122 dut
._log
.info("Ok!, uart passed")
125 def pinmux_twi_scl(dut
):
126 """Test for I2C SCL"""
128 # mux selection lines, each input two bit wide
129 dut
.mux_lines_cell0_mux_in
= 1
130 dut
.mux_lines_cell1_mux_in
= 2
131 dut
.mux_lines_cell2_mux_in
= 0
133 # enable input for mux
134 dut
.EN_mux_lines_cell0_mux
= 0
135 dut
.EN_mux_lines_cell1_mux
= 1
136 dut
.EN_mux_lines_cell2_mux
= 0
140 # Test for out for twi_scl
141 dut
.peripheral_side_twi_scl_out_in
= 0
142 dut
.peripheral_side_twi_scl_outen_in
= 1
145 if dut
.iocell_side_io2_cell_out
!= 0:
147 "twi_scl=0/mux=0/out=1 %s iocell_io2 != 0" %
148 str(dut
.iocell_side_io2_cell_out
))
150 dut
.peripheral_side_twi_scl_out_in
= 1
153 if dut
.iocell_side_io2_cell_out
!= 1:
155 "twi_scl=0/mux=0/out=1 %s iocell_io2 != 0" %
156 str(dut
.iocell_side_io2_cell_out
))
159 # first check for tristate
160 if str(dut
.peripheral_side_twi_scl_in
) != "x":
162 "twi_scl=0/mux=0/out=1 %s twi_scl_in != x" %
163 str(dut
.peripheral_side_twi_scl_in
))
165 dut
.peripheral_side_twi_scl_outen_in
= 0
166 dut
.iocell_side_io2_cell_in_in
= 0
169 if dut
.peripheral_side_twi_scl_in
!= 0:
171 "iocell_io2=0/mux=0/out=0 %s twi_scl != 0" %
172 str(dut
.peripheral_side_twi_scl_in
))
174 dut
.iocell_side_io2_cell_in_in
= 1
177 if dut
.peripheral_side_twi_scl_in
!= 1:
179 "iocell_io2=1/mux=0/out=0 %s twi_scl != 1" %
180 str(dut
.peripheral_side_twi_scl_in
))
182 dut
.peripheral_side_twi_scl_outen_in
= 1
183 dut
.iocell_side_io2_cell_in_in
= 0
185 dut
._log
.info("twi_scl_in %s" % dut
.peripheral_side_twi_scl_in
)
187 if dut
.iocell_side_io2_cell_out
!= 1:
189 "twi_scl=0/mux=0/out=1 %s iocell_io2 != 1" %
190 str(dut
.iocell_side_io2_cell_out
))
194 dut
._log
.info("Ok!, twi_scl passed")
197 def pinmux_twi_sda(dut
):
200 # mux selection lines, each input two bit wide
201 dut
.mux_lines_cell1_mux_in
= 2
203 # enable input for mux
204 dut
.EN_mux_lines_cell0_mux
= 0
205 dut
.EN_mux_lines_cell1_mux
= 1
206 dut
.EN_mux_lines_cell2_mux
= 0
212 # define input variables
213 dut
.peripheral_side_twi_sda_out_in
= 0
214 dut
.peripheral_side_twi_sda_outen_in
= 1
218 dut
._log
.info("io1_out %s" % dut
.iocell_side_io1_cell_out
)
219 # Test for out for twi_sda
220 if dut
.iocell_side_io1_cell_out
!= 0:
222 "twi_sda=0/mux=0/out=1 %s iocell_io1 != 0" %
223 str(dut
.iocell_side_io1_cell_out
))
225 dut
.peripheral_side_twi_sda_out_in
= 1
228 if dut
.iocell_side_io1_cell_out
!= 1:
230 "twi_sda=1/mux=0/out=1 %s iocell_io1 != 1" %
231 str(dut
.iocell_side_io1_cell_out
))
234 # first check for tristate
235 if str(dut
.peripheral_side_twi_sda_in
) != "x":
237 "twi_sda=0/mux=0/out=1 %s twi_sda_in != x" %
238 str(dut
.peripheral_side_twi_sda_in
))
240 dut
.peripheral_side_twi_sda_outen_in
= 0
241 dut
.iocell_side_io1_cell_in_in
= 0
244 if dut
.peripheral_side_twi_sda_in
!= 0:
246 "iocell_io1=0/mux=0/out=0 %s twi_sda != 0" %
247 str(dut
.peripheral_side_twi_sda_in
))
249 dut
.iocell_side_io1_cell_in_in
= 1
252 if dut
.peripheral_side_twi_sda_in
!= 1:
254 "iocell_io1=0/mux=0/out=0 %s twi_sda != 0" %
255 str(dut
.peripheral_side_twi_sda_in
))
257 dut
.peripheral_side_twi_sda_outen_in
= 1
258 dut
.iocell_side_io1_cell_in_in
= 0
260 dut
._log
.info("twi_sda_in %s" % dut
.peripheral_side_twi_sda_in
)
262 if dut
.iocell_side_io1_cell_out
!= 1:
264 "twi_sda=0/mux=0/out=1 %s iocell_io1 != 1" %
265 str(dut
.iocell_side_io1_cell_out
))
269 dut
._log
.info("Ok!, twi_sda passed")