Converting litex to use Python modules.
authorTim 'mithro' Ansell <me@mith.ro>
Sun, 23 Feb 2020 14:54:48 +0000 (06:54 -0800)
committerTim 'mithro' Ansell <me@mith.ro>
Sun, 12 Apr 2020 01:37:06 +0000 (18:37 -0700)
litex/data/__init__.py [new file with mode: 0644]
litex/data/find.py [new file with mode: 0644]
litex/soc/cores/cpu/blackparrot/core.py
litex/soc/cores/cpu/lm32/core.py
litex/soc/cores/cpu/microwatt/core.py
litex/soc/cores/cpu/mor1kx/core.py
litex/soc/cores/cpu/picorv32/core.py
litex/soc/cores/cpu/rocket/core.py
litex/soc/cores/cpu/vexriscv/core.py
litex_setup.py

diff --git a/litex/data/__init__.py b/litex/data/__init__.py
new file mode 100644 (file)
index 0000000..c9b5ae9
--- /dev/null
@@ -0,0 +1,2 @@
+# https://packaging.python.org/guides/packaging-namespace-packages/#pkgutil-style-namespace-packages
+__path__ = __import__('pkgutil').extend_path(__path__, __name__)
diff --git a/litex/data/find.py b/litex/data/find.py
new file mode 100644 (file)
index 0000000..da7ed98
--- /dev/null
@@ -0,0 +1,13 @@
+def find_data(data_type, data_name):
+    imp = "from litex.data.{} import {} as dm".format(data_type, data_name)
+    try:
+        exec(imp)
+        return dm.data_location
+    except ImportError as e:
+        raise ImportError("""\
+litex-data-{dt}-{dn} module not install! Unable to use {dn} {dt}.
+{e}
+
+You can install this by running;
+ pip install git+https://github.com/litex-hub/litex-data-{dt}-{dn}.git
+""".format(dt=data_type, dn=data_name, e=e))
index 897664892941f86df18fc5e2dd9482331a4179b9..e55e6252bb2bb18d32fe0c958305a2e73168d00c 100644 (file)
@@ -32,6 +32,7 @@ import os
 
 from migen import *
 
+from litex.data.find import find_data
 from litex.soc.interconnect import axi
 from litex.soc.interconnect import wishbone
 from litex.soc.cores.cpu import CPU
@@ -115,7 +116,7 @@ class BlackParrotRV64(CPU):
 
     @staticmethod
     def add_sources(platform, variant="standard"):
-        filename = os.path.join(os.path.abspath(os.path.dirname(__file__)), "flist_litex.verilator")
+        filename = os.path.join(find_data("cpu", "blackparrot"), "flist_litex.verilator")
         with open(filename) as openfileobject:
             for line in openfileobject:
                 temp = line
index 9ef8333b9238e9353abc1dddb00d3fb76a5b0d59..75e7ba8cbea650e6881941fc2ea03c5e1815ea6e 100644 (file)
@@ -9,6 +9,7 @@ import os
 
 from migen import *
 
+from litex.data.find import find_data
 from litex.soc.interconnect import wishbone
 from litex.soc.cores.cpu import CPU
 
@@ -96,9 +97,8 @@ class LM32(CPU):
 
     @staticmethod
     def add_sources(platform, variant):
-        vdir = os.path.join(
-            os.path.abspath(os.path.dirname(__file__)), "verilog")
-        platform.add_sources(os.path.join(vdir, "submodule", "rtl"),
+        vdir = find_data("cpu", "lm32")
+        platform.add_sources(os.path.join(vdir, "rtl"),
             "lm32_cpu.v",
             "lm32_instruction_unit.v",
             "lm32_decoder.v",
@@ -117,7 +117,7 @@ class LM32(CPU):
             "lm32_debug.v",
             "lm32_itlb.v",
             "lm32_dtlb.v")
-        platform.add_verilog_include_path(os.path.join(vdir, "submodule", "rtl"))
+        platform.add_verilog_include_path(os.path.join(vdir, "rtl"))
         if variant == "minimal":
             platform.add_verilog_include_path(os.path.join(vdir, "config_minimal"))
         elif variant == "lite":
index 584ad4450020581fa8a61b3a32b4ba192eab0f23..aa00ee17239805fdeacba945144b466dfd1e7f73 100644 (file)
@@ -6,6 +6,7 @@ import os
 
 from migen import *
 
+from litex.data.find import find_data
 from litex.soc.interconnect import wishbone
 from litex.soc.cores.cpu import CPU
 
@@ -98,7 +99,7 @@ class Microwatt(CPU):
 
     @staticmethod
     def add_sources(platform):
-        sdir = os.path.join(os.path.abspath(os.path.dirname(__file__)), "sources")
+        sdir = os.path.join(find_data("cpu", "microwatt"), "sources")
         platform.add_sources(sdir,
             # Common / Types / Helpers
             "decode_types.vhdl",
index c82b6e55da328346cf5d4956bf343bfe1daee086..4fe41b36c743c45fed626f7259ba04396592a47c 100644 (file)
@@ -8,6 +8,7 @@ import os
 
 from migen import *
 
+from litex.data.find import find_data
 from litex.soc.interconnect import wishbone
 from litex.soc.cores.cpu import CPU
 
index 304f6c14d58123ebacfbfdf26a5c59497ed8feae..47017ac6b1789025801a6bdf91b61b5d561b29ab 100644 (file)
@@ -11,6 +11,7 @@ import os
 
 from migen import *
 
+from litex.data.find import find_data
 from litex.soc.interconnect import wishbone
 from litex.soc.cores.cpu import CPU
 
@@ -179,8 +180,7 @@ class PicoRV32(CPU):
 
     @staticmethod
     def add_sources(platform):
-        vdir = os.path.join(
-            os.path.abspath(os.path.dirname(__file__)), "verilog")
+        vdir = find_data("cpu", "picorv32")
         platform.add_source(os.path.join(vdir, "picorv32.v"))
 
     def do_finalize(self):
index 14bab0f41705ef769b4267ff48d2625a6db101d7..dff3fe70786f2aea3c118d320aa8edc74abacde8 100644 (file)
@@ -33,6 +33,7 @@ import os
 
 from migen import *
 
+from litex.data.find import find_data
 from litex.soc.interconnect import axi
 from litex.soc.interconnect import wishbone
 from litex.soc.cores.cpu import CPU
@@ -238,8 +239,7 @@ class RocketRV64(CPU):
 
     @staticmethod
     def add_sources(platform, variant="standard"):
-        vdir = os.path.join(
-            os.path.abspath(os.path.dirname(__file__)), "verilog")
+        vdir = find_data("cpu", "rocket")
         platform.add_sources(
             os.path.join(vdir, "generated-src"),
             CPU_VARIANTS[variant] + ".v",
index 4e0bbc0a0bd24454454484fec24f885628011c93..42328d1998546b3474e722a3db080a0b21c1b7da 100644 (file)
@@ -12,6 +12,7 @@ import os
 
 from migen import *
 
+from litex.data.find import find_data
 from litex.soc.interconnect import wishbone
 from litex.soc.interconnect.csr import *
 from litex.soc.cores.cpu import CPU
@@ -246,7 +247,7 @@ class VexRiscv(CPU, AutoCSR):
     @staticmethod
     def add_sources(platform, variant="standard"):
         cpu_filename = CPU_VARIANTS[variant] + ".v"
-        vdir = os.path.join(os.path.abspath(os.path.dirname(__file__)), "verilog")
+        vdir = find_data("cpu", "vexriscv")
         platform.add_source(os.path.join(vdir, cpu_filename))
 
     def use_external_variant(self, variant_filename):
index 60582955eff27fee1c177284a913ff8894b0e98c..ca1d4f49e186f6204a5b3af8ae623a911047d6b1 100755 (executable)
@@ -18,7 +18,8 @@ repos = [
     ("migen",        ("https://github.com/m-labs/",        True,  True)),
 
     # LiteX SoC builder
-    ("litex",        ("https://github.com/enjoy-digital/", True,  True)),
+    ('litex-data-software-compiler_rt', ("https://github.com/litex-hub/", False, True))
+    ("litex",        ("https://github.com/enjoy-digital/", False,  True)),
 
     # LiteX cores ecosystem
     ("liteeth",      ("https://github.com/enjoy-digital/", False, True)),
@@ -34,6 +35,15 @@ repos = [
 
     # LiteX boards support
     ("litex-boards", ("https://github.com/litex-hub/",     False, True)),
+
+    # Optional LiteX data
+    ('litex-data-cpu-blackparrot', ("https://github.com/litex-hub/", False, True))
+    ('litex-data-cpu-mor1kx',      ("https://github.com/litex-hub/", False, True))
+    ('litex-data-cpu-lm32',        ("https://github.com/litex-hub/", False, True))
+    ('litex-data-cpu-microwatt',   ("https://github.com/litex-hub/", False, True))
+    ('litex-data-cpu-picorv32',    ("https://github.com/litex-hub/", False, True))
+    ('litex-data-cpu-rocket',      ("https://github.com/litex-hub/", False, True))
+    ('litex-data-misc-tapcfg',     ("https://github.com/litex-hub/", False, True))
 ]
 repos = OrderedDict(repos)