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
10 def pinmux_basic_test(dut
):
14 dut
.mux_lines_cell0_mux_in
= 1
15 dut
.mux_lines_cell1_mux_in
= 2
16 dut
.mux_lines_cell2_mux_in
= 0
18 dut
.EN_mux_lines_cell0_mux
= 1
19 dut
.EN_mux_lines_cell1_mux
= 1
20 dut
.EN_mux_lines_cell2_mux
= 1
25 dut
.peripheral_side_gpioa_a2_out_in
= 0
26 dut
.peripheral_side_gpioa_a2_outen_in
= 1
30 if dut
.iocell_side_io2_cell_out
!= 0:
32 "gpioa_a2=0/mux=0/out=1 %s iocell_io2 != 0" %
33 str(dut
.iocell_side_io2_cell_out
))
35 dut
.peripheral_side_gpioa_a2_out_in
= 1
39 if dut
.iocell_side_io2_cell_out
!= 1:
41 "gpioa_a2=0/mux=0/out=1 %s iocell_io2 != 1" %
42 str(dut
.iocell_side_io2_cell_out
))
44 # GPIO2-in test (first see if it's tri-state)
45 if str(dut
.peripheral_side_gpioa_a2_in
) != "x":
47 "gpioa_a2=0/mux=0/out=1 %s gpio_a2_in != x" %
48 str(dut
.peripheral_side_gpioa_a2_in
))
50 dut
.peripheral_side_gpioa_a2_outen_in
= 0
51 dut
.iocell_side_io2_cell_in_in
= 0
54 if dut
.peripheral_side_gpioa_a2_in
!= 0:
56 "iocell_io2=0/mux=0/out=0 %s gpioa_a2 != 0" %
57 str(dut
.peripheral_side_gpioa_a2_in
))
59 dut
.iocell_side_io2_cell_in_in
= 1
62 if dut
.peripheral_side_gpioa_a2_in
!= 1:
64 "iocell_io2=1/mux=0/out=0 %s gpioa_a2 != 1" %
65 str(dut
.peripheral_side_gpioa_a2_in
))
67 dut
.peripheral_side_gpioa_a2_outen_in
= 1
68 dut
.iocell_side_io2_cell_in_in
= 0
70 dut
._log
.info("gpioa_a2_in %s" % dut
.peripheral_side_gpioa_a2_in
)
72 if dut
.iocell_side_io2_cell_out
!= 1:
74 "gpioa_a2=0/mux=0/out=1 %s iocell_io2 != 1" %
75 str(dut
.iocell_side_io2_cell_out
))
79 dut
.peripheral_side_uart_tx_in
= 1
80 dut
.peripheral_side_gpioa_a0_outen_in
= 1
84 if dut
.iocell_side_io0_cell_out
!= 1:
86 "uart_tx=1/mux=0/out=1 %s iocell_io0 != 1" %
87 str(dut
.iocell_side_io0_cell_out
))
89 dut
.peripheral_side_uart_tx_in
= 0
93 if dut
.iocell_side_io0_cell_out
!= 0:
95 "uart_tx=0/mux=0/out=1 %s iocell_io0 != 0" %
96 str(dut
.iocell_side_io0_cell_out
))
103 def pinmux_randomised_test(dut
):
104 """Test for adding 2 random numbers multiple times"""
111 A
= random
.randint(0, 15)
112 B
= random
.randint(0, 15)
119 if int(dut
.X
) != pinmux_model(A
, B
):
121 "Randomised test failed with: %s + %s = %s" %
122 (int(dut
.A
), int(dut
.B
), int(dut
.X
)))
123 else: # these last two lines are not strictly necessary