mirror of
https://github.com/litex-hub/litex-boards.git
synced 2025-01-03 03:43:36 -05:00
crosslink_nx_vip: Add HyperRAM support
Signed-off-by: David Shah <dave@ds0.me>
This commit is contained in:
parent
b278d8bccc
commit
20720693c4
2 changed files with 39 additions and 7 deletions
litex_boards
|
@ -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,
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue