50cd175dabfe74acd48cdd47c8fc251ad8dd2930
1 from liteeth
.common
import *
2 from migen
.bus
import wishbone
4 class LiteEthEtherboneWishboneMaster(Module
):
6 self
.wr_sink
= wr_sink
= Sink(eth_etherbone_mmap_description(32))
7 self
.rd_sink
= rd_sink
= Sink(eth_etherbone_mmap_description(32))
8 self
.wr_source
= wr_source
= Source(eth_etherbone_mmap_description(32))
9 self
.rd_source
= rd_source
= Source(eth_etherbone_mmap_description(32))
10 self
.bus
= bus
= wishbone
.Interface()
14 self
.submodules
+= data
15 self
.comb
+= data
.d
.eq(bus
.dat_r
)
17 self
.submodules
.fsm
= fsm
= FSM(reset_state
="IDLE")
21 If(wr_sink
.stb
& wr_sink
.sop
,
23 NextState("WRITE_DATA")
24 ).Elif(rd_sink
.stb
& rd_sink
.sop
,
26 NextState("READ_DATA")
30 bus
.adr
.eq(wr_sink
.addr
),
31 bus
.dat_w
.eq(wr_sink
.data
),
32 bus
.sel
.eq(wr_sink
.be
),
33 bus
.stb
.eq(wr_sink
.stb
),
44 bus
.adr
.eq(rd_sink
.addr
),
45 bus
.sel
.eq(rd_sink
.be
),
46 bus
.stb
.eq(rd_sink
.stb
),
50 NextState("SEND_DATA")
54 wr_source
.stb
.eq(rd_sink
.stb
),
55 wr_source
.sop
.eq(rd_sink
.sop
),
56 wr_source
.eop
.eq(rd_sink
.eop
),
57 wr_source
.base_addr
.eq(rd_sink
.base_addr
),
58 wr_source
.addr
.eq(rd_sink
.addr
),
59 wr_source
.count
.eq(rd_sink
.count
),
60 wr_source
.be
.eq(rd_sink
.be
),
61 wr_source
.data
.eq(data
.q
),
62 If(wr_source
.stb
& wr_source
.ack
,
67 NextState("READ_DATA")