5 from litex
.soc
.interconnect
import csr
6 from litex
.soc
.interconnect
import csr_bus
7 from litex
.soc
.interconnect
import axi_lite
9 class CSRModule(Module
, csr
.AutoCSR
):
11 self
.foo
= csr
.CSRStorage(32, reset
=1)
12 self
.bar
= csr
.CSRStorage(32, reset
=1)
15 class AXILiteDUT(Module
):
17 self
.csr
= csr_bus
.Interface(data_width
=32, address_width
=12)
18 self
.axi
= axi_lite
.Interface(data_width
=32, address_width
=14)
19 self
.submodules
.csrmodule
= CSRModule()
20 self
.submodules
.dut
= axi_lite
.AXILite2CSR(self
.axi
, self
.csr
)
21 self
.submodules
.csrbankarray
= csr_bus
.CSRBankArray(
22 self
, self
.map_csr
, data_width
=32, address_width
=12)
23 self
.submodules
.csrcon
= csr_bus
.Interconnect(
24 self
.csr
, self
.csrbankarray
.get_buses())
26 def map_csr(self
, name
, memory
):
27 return {"csrmodule": 0}[name
]
30 class TestAXILite(unittest
.TestCase
):
31 def test_write_read(self
):
39 yield axi
.aw
.valid
.eq(1)
40 yield axi
.aw
.addr
.eq(4)
41 yield axi
.w
.valid
.eq(1)
42 yield axi
.b
.ready
.eq(1)
43 yield axi
.w
.data
.eq(0x2137)
45 while (yield axi
.aw
.ready
) != 1:
47 while (yield axi
.w
.ready
) != 1:
49 yield axi
.aw
.valid
.eq(0)
50 yield axi
.w
.valid
.eq(0)
56 yield axi
.ar
.valid
.eq(1)
57 yield axi
.r
.ready
.eq(1)
58 yield axi
.ar
.addr
.eq(4)
60 while (yield axi
.ar
.ready
!= 1):
62 yield axi
.ar
.valid
.eq(0)
63 while (yield axi
.r
.valid
!= 1):
65 yield axi
.r
.ready
.eq(0)
67 read
= yield axi
.r
.data
73 run_simulation(dut
, generator(dut
.dut
), vcd_name
='axi-write-read.vcd')
75 def test_simultaneous(dut
):
83 yield axi
.aw
.valid
.eq(1)
84 yield axi
.aw
.addr
.eq(2)
85 yield axi
.w
.valid
.eq(1)
86 yield axi
.b
.ready
.eq(1)
87 yield axi
.w
.data
.eq(0x2137)
89 yield axi
.ar
.valid
.eq(1)
90 yield axi
.r
.ready
.eq(1)
91 yield axi
.ar
.addr
.eq(2)
96 is_reading
= yield axi
.ar
.ready
97 is_writing
= yield axi
.aw
.ready
100 assert not is_writing
104 run_simulation(dut
, generator(dut
.dut
), vcd_name
='axi-simultaneous.vcd')