01c00b25f4dae6604377c5be602b480c63fe923d
1 from nmigen_soc
.wishbone
.sram
import SRAM
2 from nmigen
import Memory
, Signal
, Module
3 from soc
.minerva
.units
.loadstore
import BareLoadStoreUnit
, CachedLoadStoreUnit
6 class TestSRAMBareLoadStoreUnit(BareLoadStoreUnit
):
7 def __init__(self
, addr_wid
=64, mask_wid
=4, data_wid
=64):
8 super().__init
__(addr_wid
, mask_wid
, data_wid
)
10 def elaborate(self
, platform
):
11 m
= super().elaborate(platform
)
13 # small 16-entry Memory
14 self
.mem
= memory
= Memory(width
=self
.data_wid
, depth
=32)
15 m
.submodules
.sram
= sram
= SRAM(memory
=memory
, granularity
=8,
16 features
={'cti', 'bte', 'err'})
19 # directly connect the wishbone bus of LoadStoreUnitInterface to SRAM
20 # note: SRAM is a target (slave), dbus is initiator (master)
21 fanouts
= ['dat_w', 'sel', 'cyc', 'stb', 'we', 'cti', 'bte']
22 fanins
= ['dat_r', 'ack', 'err']
23 for fanout
in fanouts
:
24 print ("fanout", fanout
, getattr(sram
.bus
, fanout
).shape(),
25 getattr(dbus
, fanout
).shape())
26 comb
+= getattr(sram
.bus
, fanout
).eq(getattr(dbus
, fanout
))
27 comb
+= getattr(sram
.bus
, fanout
).eq(getattr(dbus
, fanout
))
29 comb
+= getattr(dbus
, fanin
).eq(getattr(sram
.bus
, fanin
))
31 comb
+= sram
.bus
.adr
.eq(dbus
.adr
)