targets: netv2: add LiteSPI
authorPiotr Binkowski <pbinkowski@antmicro.com>
Mon, 30 Mar 2020 11:43:34 +0000 (13:43 +0200)
committerPiotr Binkowski <pbinkowski@antmicro.com>
Wed, 1 Apr 2020 14:20:36 +0000 (16:20 +0200)
litex/boards/targets/netv2.py

index 3bb14c56101ddc962eace2daad602249139d052b..5ac6b2306f64b1f8685c9378bc1c026e2719e500 100755 (executable)
@@ -13,12 +13,16 @@ from litex.soc.cores.clock import *
 from litex.soc.integration.soc_core import *
 from litex.soc.integration.soc_sdram import *
 from litex.soc.integration.builder import *
+from litex.soc.integration.soc import *
 
 from litedram.modules import K4B2G1646F
 from litedram.phy import s7ddrphy
 
 from liteeth.phy.rmii import LiteEthPHYRMII
 
+from litespi import LiteSPI
+from litespi.phy.generic import LiteSPIPHY
+
 # CRG ----------------------------------------------------------------------------------------------
 
 class _CRG(Module):
@@ -46,7 +50,7 @@ class _CRG(Module):
 # BaseSoC ------------------------------------------------------------------------------------------
 
 class BaseSoC(SoCCore):
-    def __init__(self, sys_clk_freq=int(100e6), with_ethernet=False, **kwargs):
+    def __init__(self, sys_clk_freq=int(100e6), with_ethernet=False, with_spi_xip=False, **kwargs):
         platform = netv2.Platform()
 
         # SoCCore ----------------------------------------------------------------------------------
@@ -72,6 +76,14 @@ class BaseSoC(SoCCore):
                 l2_cache_reverse        = True
             )
 
+        # SPI XIP ----------------------------------------------------------------------------------
+        if with_spi_xip:
+            spi_xip_size = 1024*1024*8
+            self.submodules.spiphy = LiteSPIPHY(platform.request("spiflash4x"))
+            self.submodules.spictl = LiteSPI(phy=self.spiphy, endianness=self.cpu.endianness)
+            spi_xip_region = SoCRegion(origin=self.mem_map.get("spixip", None), size=spi_xip_size, cached=False)
+            self.bus.add_slave(name="spixip", slave=self.spictl.bus, region=spi_xip_region)
+
         # Ethernet ---------------------------------------------------------------------------------
         if with_ethernet:
             self.submodules.ethphy = LiteEthPHYRMII(
@@ -88,9 +100,11 @@ def main():
     soc_sdram_args(parser)
     parser.add_argument("--with-ethernet", action="store_true",
                         help="enable Ethernet support")
+    parser.add_argument("--with-spi-xip", action="store_true",
+                        help="enable SPI XIP support")
     args = parser.parse_args()
 
-    soc = BaseSoC(with_ethernet=args.with_ethernet, **soc_sdram_argdict(args))
+    soc = BaseSoC(with_ethernet=args.with_ethernet, with_spi_xip=args.with_spi_xip, **soc_sdram_argdict(args))
     builder = Builder(soc, **builder_argdict(args))
     builder.build()