c5141a932f53f4d7f5201859d0bab864562ddd56
[soc.git] / TLB / test / test_cam.py
1 import sys
2 sys.path.append("../src")
3 sys.path.append("../../TestUtil")
4
5 from nmigen.compat.sim import run_simulation
6
7 from Cam import Cam
8
9 from test_helper import assert_eq, assert_ne
10
11 def set_cam(dut, c, a, k, d):
12 yield dut.command.eq(c)
13 yield dut.address.eq(a)
14 yield dut.key_in.eq(k)
15 yield dut.data_in.eq(d)
16 yield
17
18 def check_data_hit(dut, dh, op):
19 out_dh = yield dut.data_hit
20 if op == 0:
21 assert_eq("Data Hit", out_dh, dh)
22 else:
23 assert_ne("Data Hit", out_dh, dh)
24
25 def check_data(dut, d, op):
26 out_d = yield dut.data_out
27 if op == 0:
28 assert_eq("Data", out_d, d)
29 else:
30 assert_ne("Data", out_d, d)
31
32 def check_all(dut, data_hit, data, dh_op, d_op):
33 yield from check_data_hit(dut, data_hit, dh_op)
34 yield from check_data(dut, data, d_op)
35
36
37 def testbench(dut):
38 # NA
39 command = 0
40 address = 0
41 key = 0
42 data = 0
43 data_hit = 0
44 yield from set_cam(dut, command, address, key, data)
45 yield from check_data_hit(dut, data_hit, 0)
46
47 # Search
48 command = 3
49 address = 0
50 key = 0
51 data = 0
52 data_hit = 0
53 yield from set_cam(dut, command, address, key, data)
54 yield from check_data_hit(dut, data_hit, 0)
55
56 # Write Entry 0
57 command = 2
58 address = 0
59 key = 5
60 data = 4
61 data_hit = 0
62 yield from set_cam(dut, command, address, key, data)
63 yield from check_data_hit(dut, data_hit, 0)
64
65 # Read Entry 0
66 command = 1
67 address = 0
68 key = 0
69 data = 4
70 data_hit = 0
71 yield from set_cam(dut, command, address, key, data)
72 yield from check_all(dut, data_hit, data, 0, 0)
73
74 # Search
75 command = 3
76 address = 0
77 key = 5
78 data = 4
79 data_hit = 1
80 yield from set_cam(dut, command, address, key, data)
81 yield
82 yield from check_all(dut, data_hit, data, 0, 0)
83
84 yield
85
86
87 if __name__ == "__main__":
88 dut = Cam(4, 4, 4)
89 run_simulation(dut, testbench(dut), vcd_name="Waveforms/cam_test.vcd")
90 print("Cam Unit Test Success")