crosslink_nx_vip: Add HyperRAM support

Signed-off-by: David Shah <dave@ds0.me>
This commit is contained in:
David Shah 2020-10-21 14:08:32 +01:00
parent b278d8bccc
commit 20720693c4
2 changed files with 39 additions and 7 deletions
litex_boards

View file

@ -92,6 +92,26 @@ _io = [
Subsignal("cam_frame_sync", Pins("U1")), Subsignal("cam_frame_sync", Pins("U1")),
), ),
# HyperRAM
("hyperram", 0,
Subsignal("dq", Pins("Y6 W7 V7 P7 P8 R8 T8 Y7"), IOStandard("LVCMOS18H")),
Subsignal("rwds", Pins("W6"), IOStandard("LVCMOS18H")),
Subsignal("cs_n", Pins("V6"), IOStandard("LVCMOS18H")),
Subsignal("rst_n", Pins("U7"), IOStandard("LVCMOS18H")),
Subsignal("clk", Pins("R7"), IOStandard("LVDS")),
# Subsignal("clk_n", Pins("T7"), IOStandard("LVDS")),
Misc("SLEWRATE=FAST")
),
("hyperram", 1,
Subsignal("dq", Pins("W8 V9 W9 Y9 T10 T11 U10 V10"), IOStandard("LVCMOS18H")),
Subsignal("rwds", Pins("R10"), IOStandard("LVCMOS18H")),
Subsignal("cs_n", Pins("P9"), IOStandard("LVCMOS18H")),
Subsignal("rst_n", Pins("P10"), IOStandard("LVCMOS18H")),
Subsignal("clk", Pins("W10"), IOStandard("LVDS")),
# Subsignal("clk_n", Pins("Y10"), IOStandard("LVDS")),
Misc("SLEWRATE=FAST")
),
# MIPI camera modules # MIPI camera modules
# Note that use of MIPI_DPHY standard for + and LVCMOS12H for - is copied from Lattice PDC # Note that use of MIPI_DPHY standard for + and LVCMOS12H for - is copied from Lattice PDC
("camera", 0, ("camera", 0,

View file

@ -17,6 +17,10 @@ from migen.genlib.resetsync import AsyncResetSynchronizer
from litex_boards.platforms import crosslink_nx_vip from litex_boards.platforms import crosslink_nx_vip
from litex_boards.platforms import crosslink_nx_vip
from litehyperbus.core.hyperbus import HyperRAM
from litex.soc.cores.nxlram import NXLRAM from litex.soc.cores.nxlram import NXLRAM
from litex.soc.cores.spi_flash import SpiFlash from litex.soc.cores.spi_flash import SpiFlash
from litex.build.io import CRG from litex.build.io import CRG
@ -62,7 +66,7 @@ class BaseSoC(SoCCore):
"sram": 0x40000000, "sram": 0x40000000,
"csr": 0xf0000000, "csr": 0xf0000000,
} }
def __init__(self, sys_clk_freq, **kwargs): def __init__(self, sys_clk_freq, hyperram="none", **kwargs):
platform = crosslink_nx_vip.Platform() platform = crosslink_nx_vip.Platform()
platform.add_platform_command("ldc_set_sysconfig {{MASTER_SPI_PORT=SERIAL}}") platform.add_platform_command("ldc_set_sysconfig {{MASTER_SPI_PORT=SERIAL}}")
@ -79,10 +83,17 @@ class BaseSoC(SoCCore):
# CRG -------------------------------------------------------------------------------------- # CRG --------------------------------------------------------------------------------------
self.submodules.crg = _CRG(platform, sys_clk_freq) self.submodules.crg = _CRG(platform, sys_clk_freq)
# 128KB LRAM (used as SRAM) --------------------------------------------------------------- if hyperram == "none":
size = 128*kB # 128KB LRAM (used as SRAM) ------------------------------------------------------------
self.submodules.spram = NXLRAM(32, size) size = 128*kB
self.register_mem("sram", self.mem_map["sram"], self.spram.bus, size) self.submodules.spram = NXLRAM(32, size)
self.register_mem("sram", self.mem_map["sram"], self.spram.bus, size)
else:
# Use HyperRAM generic PHY as SRAM -----------------------------------------------------
size = 8*1024*kB
hr_pads = platform.request("hyperram", int(hyperram))
self.submodules.hyperram = HyperRAM(hr_pads)
self.register_mem("sram", self.mem_map["sram"], self.hyperram.bus, size)
# Leds ------------------------------------------------------------------------------------- # Leds -------------------------------------------------------------------------------------
self.submodules.leds = LedChaser( self.submodules.leds = LedChaser(
@ -94,16 +105,17 @@ class BaseSoC(SoCCore):
# Build -------------------------------------------------------------------------------------------- # Build --------------------------------------------------------------------------------------------
def main(): def main():
parser = argparse.ArgumentParser(description="LiteX SoC on Crosslink-NX Eval Board") parser = argparse.ArgumentParser(description="LiteX SoC on Crosslink-NX VIP Board")
parser.add_argument("--build", action="store_true", help="Build bitstream") parser.add_argument("--build", action="store_true", help="Build bitstream")
parser.add_argument("--load", action="store_true", help="Load bitstream") parser.add_argument("--load", action="store_true", help="Load bitstream")
parser.add_argument("--with-hyperram", default="none", help="Enable use of HyperRAM chip 0 or 1 (default=none)")
parser.add_argument("--sys-clk-freq", default=75e6, help="System clock frequency (default=75MHz)") parser.add_argument("--sys-clk-freq", default=75e6, help="System clock frequency (default=75MHz)")
parser.add_argument("--prog-target", default="direct", help="Programming Target: direct or flash") parser.add_argument("--prog-target", default="direct", help="Programming Target: direct or flash")
builder_args(parser) builder_args(parser)
soc_core_args(parser) soc_core_args(parser)
args = parser.parse_args() args = parser.parse_args()
soc = BaseSoC(sys_clk_freq=int(float(args.sys_clk_freq)), **soc_core_argdict(args)) soc = BaseSoC(sys_clk_freq=int(float(args.sys_clk_freq)), hyperram=args.with_hyperram, **soc_core_argdict(args))
builder = Builder(soc, **builder_argdict(args)) builder = Builder(soc, **builder_argdict(args))
builder_kargs = {} builder_kargs = {}
builder.build(**builder_kargs, run=args.build) builder.build(**builder_kargs, run=args.build)