1 from nmigen
.compat
.sim
import run_simulation
3 from ptw
import PTW
, PTE
14 yield dut
.req_port_i
.data_gnt
.eq(1)
15 yield dut
.req_port_i
.data_rvalid
.eq(1)
16 yield dut
.req_port_i
.data_rdata
.eq(0x43)#pte.flatten())
19 yield dut
.en_ld_st_translation_i
.eq(1)
20 yield dut
.asid_i
.eq(1)
22 yield dut
.dtlb_access_i
.eq(1)
23 yield dut
.dtlb_hit_i
.eq(0)
24 yield dut
.dtlb_vaddr_i
.eq(0x400000000)
30 yield dut
.dtlb_access_i
.eq(1)
31 yield dut
.dtlb_hit_i
.eq(0)
32 yield dut
.dtlb_vaddr_i
.eq(0x200000)
38 yield dut
.req_port_i
.data_gnt
.eq(0)
39 yield dut
.dtlb_access_i
.eq(1)
40 yield dut
.dtlb_hit_i
.eq(0)
41 yield dut
.dtlb_vaddr_i
.eq(0x400000011)
44 yield dut
.req_port_i
.data_gnt
.eq(1)
48 # data lookup, PTW levels 1-2-3
50 yield dut
.dtlb_vaddr_i
.eq(addr
)
51 yield dut
.mxr_i
.eq(0x1)
52 yield dut
.req_port_i
.data_gnt
.eq(1)
53 yield dut
.req_port_i
.data_rvalid
.eq(1)
54 yield dut
.req_port_i
.data_rdata
.eq(0x41 |
(addr
>>12)<<10)#pte.flatten())
56 yield dut
.en_ld_st_translation_i
.eq(1)
57 yield dut
.asid_i
.eq(1)
59 yield dut
.dtlb_access_i
.eq(1)
60 yield dut
.dtlb_hit_i
.eq(0)
61 yield dut
.dtlb_vaddr_i
.eq(addr
)
72 yield dut
.req_port_i
.data_gnt
.eq(0)
73 yield dut
.dtlb_access_i
.eq(1)
74 yield dut
.dtlb_hit_i
.eq(0)
75 yield dut
.dtlb_vaddr_i
.eq(0x400000011)
78 yield dut
.req_port_i
.data_gnt
.eq(1)
86 yield dut
.en_ld_st_translation_i
.eq(0)
87 yield dut
.enable_translation_i
.eq(1)
88 yield dut
.asid_i
.eq(1)
90 yield dut
.itlb_access_i
.eq(1)
91 yield dut
.itlb_hit_i
.eq(0)
92 yield dut
.itlb_vaddr_i
.eq(0x800000)
98 yield dut
.itlb_access_i
.eq(1)
99 yield dut
.itlb_hit_i
.eq(0)
100 yield dut
.itlb_vaddr_i
.eq(0x200000)
106 yield dut
.req_port_i
.data_gnt
.eq(0)
107 yield dut
.itlb_access_i
.eq(1)
108 yield dut
.itlb_hit_i
.eq(0)
109 yield dut
.itlb_vaddr_i
.eq(0x800011)
112 yield dut
.req_port_i
.data_gnt
.eq(1)
120 if __name__
== "__main__":
122 run_simulation(dut
, testbench(dut
), vcd_name
="test_ptw.vcd")