1 from liteeth
.common
import *
2 from migen
.bus
import wishbone
4 class LiteEthEtherboneWishboneMaster(Module
):
6 self
.sink
= sink
= Sink(eth_etherbone_mmap_description(32))
7 self
.source
= source
= Source(eth_etherbone_mmap_description(32))
8 self
.bus
= bus
= wishbone
.Interface()
11 self
.submodules
.data
= data
= FlipFlop(32)
12 self
.comb
+= data
.d
.eq(bus
.dat_r
)
14 self
.submodules
.fsm
= fsm
= FSM(reset_state
="IDLE")
17 If(sink
.stb
& sink
.sop
,
20 NextState("WRITE_DATA")
22 NextState("READ_DATA")
27 bus
.adr
.eq(sink
.addr
),
28 bus
.dat_w
.eq(sink
.data
),
41 bus
.adr
.eq(sink
.addr
),
47 NextState("SEND_DATA")
51 source
.stb
.eq(sink
.stb
),
52 source
.sop
.eq(sink
.sop
),
53 source
.eop
.eq(sink
.eop
),
54 source
.base_addr
.eq(sink
.base_addr
),
55 source
.addr
.eq(sink
.addr
),
56 source
.count
.eq(sink
.count
),
57 source
.be
.eq(sink
.be
),
59 source
.data
.eq(data
.q
),
60 If(source
.stb
& source
.ack
,
65 NextState("READ_DATA")