bd53825e3b989b720c031f6e0c84c1698999f3cb
3 from misoc
.interconnect
import dfi
, lasmi_bus
4 from misoc
.cores
.lasmicon
.refresher
import *
5 from misoc
.cores
.lasmicon
.bankmachine
import *
6 from misoc
.cores
.lasmicon
.multiplexer
import *
9 class ControllerSettings
:
10 def __init__(self
, req_queue_size
=8, read_time
=32, write_time
=16, with_bandwidth
=False):
11 self
.req_queue_size
= req_queue_size
12 self
.read_time
= read_time
13 self
.write_time
= write_time
14 self
.with_bandwidth
= with_bandwidth
17 class LASMIcon(Module
):
18 def __init__(self
, phy_settings
, geom_settings
, timing_settings
,
19 controller_settings
=None):
20 if controller_settings
is None:
21 controller_settings
= ControllerSettings()
22 if phy_settings
.memtype
in ["SDR"]:
23 burst_length
= phy_settings
.nphases
*1 # command multiplication*SDR
24 elif phy_settings
.memtype
in ["DDR", "LPDDR", "DDR2", "DDR3"]:
25 burst_length
= phy_settings
.nphases
*2 # command multiplication*DDR
26 address_align
= log2_int(burst_length
)
28 self
.dfi
= dfi
.Interface(geom_settings
.addressbits
,
29 geom_settings
.bankbits
,
30 phy_settings
.dfi_databits
,
32 self
.lasmic
= lasmi_bus
.Interface(
33 aw
=geom_settings
.rowbits
+ geom_settings
.colbits
- address_align
,
34 dw
=phy_settings
.dfi_databits
*phy_settings
.nphases
,
35 nbanks
=2**geom_settings
.bankbits
,
36 req_queue_size
=controller_settings
.req_queue_size
,
37 read_latency
=phy_settings
.read_latency
+1,
38 write_latency
=phy_settings
.write_latency
+1)
39 self
.nrowbits
= geom_settings
.colbits
- address_align
43 self
.submodules
.refresher
= Refresher(geom_settings
.addressbits
, geom_settings
.bankbits
,
44 timing_settings
.tRP
, timing_settings
.tREFI
, timing_settings
.tRFC
)
45 self
.submodules
.bank_machines
= [BankMachine(geom_settings
, timing_settings
, controller_settings
, address_align
, i
,
46 getattr(self
.lasmic
, "bank"+str(i
)))
47 for i
in range(2**geom_settings
.bankbits
)]
48 self
.submodules
.multiplexer
= Multiplexer(phy_settings
, geom_settings
, timing_settings
, controller_settings
,
49 self
.bank_machines
, self
.refresher
,
50 self
.dfi
, self
.lasmic
)
53 return self
.multiplexer
.get_csrs()