3 from lambdasoc
.periph
import Peripheral
5 from gram
.dfii
import DFIInjector
6 from gram
.compat
import CSRPrefixProxy
7 from gram
.core
.controller
import ControllerSettings
, gramController
8 from gram
.core
.crossbar
import gramCrossbar
10 __ALL__
= ["gramCore"]
12 class gramCore(Peripheral
, Elaboratable
):
13 def __init__(self
, phy
, geom_settings
, timing_settings
, clk_freq
,
14 features
=frozenset(), **kwargs
):
15 super().__init
__("core")
17 bank
= self
.csr_bank()
20 self
._geom
_settings
= geom_settings
21 self
._timing
_settings
= timing_settings
22 self
._clk
_freq
= clk_freq
25 self
.dfii
= DFIInjector(
26 csr_bank
=CSRPrefixProxy(bank
, "dfii"),
27 addressbits
=self
._geom
_settings
.addressbits
,
28 bankbits
=self
._geom
_settings
.bankbits
,
29 nranks
=self
._phy
.settings
.nranks
,
30 databits
=self
._phy
.settings
.dfi_databits
,
31 nphases
=self
._phy
.settings
.nphases
)
33 self
.controller
= gramController(
34 phy_settings
=self
._phy
.settings
,
35 geom_settings
=self
._geom
_settings
,
36 timing_settings
=self
._timing
_settings
,
37 clk_freq
=self
._clk
_freq
,
41 self
.size
= 2**geom_settings
.bankbits
* 2**geom_settings
.rowbits
* 2**geom_settings
.colbits
43 self
.crossbar
= gramCrossbar(self
.controller
.interface
)
45 self
._bridge
= self
.bridge(data_width
=32, granularity
=8, alignment
=2,
47 self
.bus
= self
._bridge
.bus
49 def elaborate(self
, platform
):
52 m
.submodules
.bridge
= self
._bridge
54 m
.submodules
.dfii
= self
.dfii
55 m
.d
.comb
+= self
.dfii
.master
.connect(self
._phy
.dfi
)
57 m
.submodules
.controller
= self
.controller
58 m
.d
.comb
+= self
.controller
.dfi
.connect(self
.dfii
.slave
)
60 m
.submodules
.crossbar
= self
.crossbar