7fef0ac3322ac30e8256a337d0f8b244be3cb46f
[pinmux.git] / src / test_bsv / tests / test_pinmux.py
1 # Simple tests for an pinmux module
2 import cocotb
3 from cocotb.triggers import Timer
4 from cocotb.result import TestFailure
5 #from pinmux_model import pinmux_model
6 import random
7
8
9 @cocotb.test()
10 def pinmux_basic_test(dut):
11 """Test for 5 + 10"""
12 yield Timer(2)
13
14 dut.mux_lines_cell0_mux_in = 1
15 dut.mux_lines_cell1_mux_in = 2
16 dut.mux_lines_cell2_mux_in = 0
17 yield Timer(2)
18 dut.EN_mux_lines_cell0_mux = 1
19 dut.EN_mux_lines_cell1_mux = 1
20 dut.EN_mux_lines_cell2_mux = 1
21
22 yield Timer(2)
23
24 # GPIO2-out test
25 dut.peripheral_side_gpioa_a2_out_in = 0
26 dut.peripheral_side_gpioa_a2_outen_in = 1
27
28 yield Timer(2)
29
30 if dut.iocell_side_io2_cell_out != 0:
31 raise TestFailure(
32 "gpioa_a2=0/mux=0/out=1 %s iocell_io2 != 0" %
33 str(dut.iocell_side_io2_cell_out))
34
35 dut.peripheral_side_gpioa_a2_out_in = 1
36
37 yield Timer(2)
38
39 if dut.iocell_side_io2_cell_out != 1:
40 raise TestFailure(
41 "gpioa_a2=0/mux=0/out=1 %s iocell_io2 != 1" %
42 str(dut.iocell_side_io2_cell_out))
43
44 # GPIO2-in test (first see if it's tri-state)
45 if str(dut.peripheral_side_gpioa_a2_in) != "x":
46 raise TestFailure(
47 "gpioa_a2=0/mux=0/out=1 %s gpio_a2_in != x" %
48 str(dut.peripheral_side_gpioa_a2_in))
49
50 dut.peripheral_side_gpioa_a2_outen_in = 0
51 dut.iocell_side_io2_cell_in_in = 0
52 yield Timer(2)
53
54 if dut.peripheral_side_gpioa_a2_in != 0:
55 raise TestFailure(
56 "iocell_io2=0/mux=0/out=0 %s gpioa_a2 != 0" %
57 str(dut.peripheral_side_gpioa_a2_in))
58
59 dut.iocell_side_io2_cell_in_in = 1
60 yield Timer(2)
61
62 if dut.peripheral_side_gpioa_a2_in != 1:
63 raise TestFailure(
64 "iocell_io2=1/mux=0/out=0 %s gpioa_a2 != 1" %
65 str(dut.peripheral_side_gpioa_a2_in))
66
67 dut.peripheral_side_gpioa_a2_outen_in = 1
68 dut.iocell_side_io2_cell_in_in = 0
69 yield Timer(2)
70 dut._log.info("gpioa_a2_in %s" % dut.peripheral_side_gpioa_a2_in)
71
72 if dut.iocell_side_io2_cell_out != 1:
73 raise TestFailure(
74 "gpioa_a2=0/mux=0/out=1 %s iocell_io2 != 1" %
75 str(dut.iocell_side_io2_cell_out))
76
77 # UART
78 yield Timer(2)
79 dut.peripheral_side_uart_tx_in = 1
80 dut.peripheral_side_gpioa_a0_outen_in = 1
81
82 yield Timer(2)
83
84 if dut.iocell_side_io0_cell_out != 1:
85 raise TestFailure(
86 "uart_tx=1/mux=0/out=1 %s iocell_io0 != 1" %
87 str(dut.iocell_side_io0_cell_out))
88
89 dut.peripheral_side_uart_tx_in = 0
90
91 yield Timer(2)
92
93 if dut.iocell_side_io0_cell_out != 0:
94 raise TestFailure(
95 "uart_tx=0/mux=0/out=1 %s iocell_io0 != 0" %
96 str(dut.iocell_side_io0_cell_out))
97
98 dut._log.info("Ok!")
99 yield Timer(2)
100
101
102 @cocotb.test()
103 def pinmux_randomised_test(dut):
104 """Test for adding 2 random numbers multiple times"""
105
106 return
107
108 yield Timer(2)
109
110 for i in range(10):
111 A = random.randint(0, 15)
112 B = random.randint(0, 15)
113
114 dut.A = A
115 dut.B = B
116
117 yield Timer(2)
118
119 if int(dut.X) != pinmux_model(A, B):
120 raise TestFailure(
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
124 dut._log.info("Ok!")