1 from nmigen
.compat
.sim
import run_simulation
2 from soc
.TLB
.ariane
.ptw
import PTW
, PTE
4 # unit was changed, test needs to be changed
15 yield dut
.req_port_i
.data_gnt
.eq(1)
16 yield dut
.req_port_i
.data_rvalid
.eq(1)
17 yield dut
.req_port_i
.data_rdata
.eq(0x43) # pte.flatten())
20 yield dut
.en_ld_st_translation_i
.eq(1)
21 yield dut
.asid_i
.eq(1)
23 yield dut
.dtlb_access_i
.eq(1)
24 yield dut
.dtlb_hit_i
.eq(0)
25 yield dut
.dtlb_vaddr_i
.eq(0x400000000)
31 yield dut
.dtlb_access_i
.eq(1)
32 yield dut
.dtlb_hit_i
.eq(0)
33 yield dut
.dtlb_vaddr_i
.eq(0x200000)
39 yield dut
.req_port_i
.data_gnt
.eq(0)
40 yield dut
.dtlb_access_i
.eq(1)
41 yield dut
.dtlb_hit_i
.eq(0)
42 yield dut
.dtlb_vaddr_i
.eq(0x400000011)
45 yield dut
.req_port_i
.data_gnt
.eq(1)
49 # data lookup, PTW levels 1-2-3
51 yield dut
.dtlb_vaddr_i
.eq(addr
)
52 yield dut
.mxr_i
.eq(0x1)
53 yield dut
.req_port_i
.data_gnt
.eq(1)
54 yield dut
.req_port_i
.data_rvalid
.eq(1)
56 yield dut
.req_port_i
.data_rdata
.eq(0x41 |
(addr
>> 12) << 10)
58 yield dut
.en_ld_st_translation_i
.eq(1)
59 yield dut
.asid_i
.eq(1)
61 yield dut
.dtlb_access_i
.eq(1)
62 yield dut
.dtlb_hit_i
.eq(0)
63 yield dut
.dtlb_vaddr_i
.eq(addr
)
74 yield dut
.req_port_i
.data_gnt
.eq(0)
75 yield dut
.dtlb_access_i
.eq(1)
76 yield dut
.dtlb_hit_i
.eq(0)
77 yield dut
.dtlb_vaddr_i
.eq(0x400000011)
80 yield dut
.req_port_i
.data_gnt
.eq(1)
87 yield dut
.en_ld_st_translation_i
.eq(0)
88 yield dut
.enable_translation_i
.eq(1)
89 yield dut
.asid_i
.eq(1)
91 yield dut
.itlb_access_i
.eq(1)
92 yield dut
.itlb_hit_i
.eq(0)
93 yield dut
.itlb_vaddr_i
.eq(0x800000)
99 yield dut
.itlb_access_i
.eq(1)
100 yield dut
.itlb_hit_i
.eq(0)
101 yield dut
.itlb_vaddr_i
.eq(0x200000)
107 yield dut
.req_port_i
.data_gnt
.eq(0)
108 yield dut
.itlb_access_i
.eq(1)
109 yield dut
.itlb_hit_i
.eq(0)
110 yield dut
.itlb_vaddr_i
.eq(0x800011)
113 yield dut
.req_port_i
.data_gnt
.eq(1)
122 run_simulation(dut
, tbench(dut
), vcd_name
="test_ptw.vcd")
123 print("PTW Unit Test Success")
126 if __name__
== "__main__":