from litex.soc.cores.cpu.vexriscv import VexRiscv
from litex.soc.cores.cpu.minerva import Minerva
from litex.soc.cores.cpu.rocket import RocketRV64
+
+# CPU Variants/Extensions Definition ---------------------------------------------------------------
+
+CPU_VARIANTS = {
+ # "official name": ["alias 1", "alias 2"],
+ "minimal" : ["min",],
+ "lite" : ["light", "zephyr", "nuttx"],
+ "standard": [None, "std"],
+ "full": [],
+ "linux" : [],
+}
+CPU_VARIANTS_EXTENSIONS = ["debug", "no-dsp"]
+
+
+class InvalidCPUVariantError(ValueError):
+ def __init__(self, variant):
+ msg = """\
+Invalid cpu_variant value: {}
+
+Possible Values:
+""".format(variant)
+ for k, v in CPU_VARIANTS.items():
+ msg += " - {} (aliases: {})\n".format(k, ", ".join(str(s) for s in v))
+ ValueError.__init__(self, msg)
+
+
+class InvalidCPUExtensionError(ValueError):
+ def __init__(self, variant):
+ msg = """\
+Invalid extension in cpu_variant value: {}
+
+Possible Values:
+""".format(variant)
+ for e in CPU_VARIANTS_EXTENSIONS:
+ msg += " - {}\n".format(e)
+ ValueError.__init__(self, msg)
+
+# CPU Variants/Extensions Check/Format -------------------------------------------------------------
+
+
+def check_format_cpu_variant(variant):
+ # Support the old style which used underscore for separator
+ if variant is None:
+ variant = "standard"
+ variant = variant.replace('_', '+')
+
+ # Check for valid CPU variants.
+ processor, *extensions = variant.split('+')
+ for k, v in CPU_VARIANTS.items():
+ if processor not in [k,]+v:
+ continue
+ _variant = k
+ break
+ else:
+ raise InvalidCPUVariantError(variant)
+
+ # Check for valid CPU extensions.
+ for extension in sorted(extensions):
+ if extension not in CPU_VARIANTS_EXTENSIONS:
+ raise InvalidCPUExtensionError(variant)
+ _variant += "+"+extension
+
+ return _variant
from litex.build.tools import deprecated_warning
from litex.soc.cores import identifier, timer, uart
-from litex.soc.cores.cpu import *
+from litex.soc.cores import cpu
from litex.soc.interconnect.csr import *
from litex.soc.interconnect import wishbone, csr_bus, wishbone2csr
"soc_core_argdict"
]
-# CPU Variants -------------------------------------------------------------------------------------
-
-CPU_VARIANTS = {
- # "official name": ["alias 1", "alias 2"],
- "minimal" : ["min",],
- "lite" : ["light", "zephyr", "nuttx"],
- "standard": [None, "std"],
- "full": [],
- "linux" : [],
-}
-CPU_VARIANTS_EXTENSIONS = ["debug"]
-
-
-class InvalidCPUVariantError(ValueError):
- def __init__(self, variant):
- msg = """\
-Invalid cpu_variant value: {}
-
-Possible Values:
-""".format(variant)
- for k, v in CPU_VARIANTS.items():
- msg += " - {} (aliases: {})\n".format(k, ", ".join(str(s) for s in v))
- ValueError.__init__(self, msg)
-
-
-class InvalidCPUExtensionError(ValueError):
- def __init__(self, variant):
- msg = """\
-Invalid extension in cpu_variant value: {}
-
-Possible Values:
-""".format(variant)
- for e in CPU_VARIANTS_EXTENSIONS:
- msg += " - {}\n".format(e)
- ValueError.__init__(self, msg)
-
# Helpers ------------------------------------------------------------------------------------------
def version(with_time=True):
cpu_type = None
self.cpu_type = cpu_type
- # Support the old style which used underscore for separator
- if cpu_variant is None:
- cpu_variant = "standard"
- cpu_variant = cpu_variant.replace('_', '+')
-
- # Check for valid CPU variants.
- cpu_variant_processor, *cpu_variant_ext = cpu_variant.split('+')
- for key, values in CPU_VARIANTS.items():
- if cpu_variant_processor not in [key,]+values:
- continue
- self.cpu_variant = key
- break
- else:
- raise InvalidCPUVariantError(cpu_variant)
-
- # Check for valid CPU extensions.
- for ext in sorted(cpu_variant_ext):
- if ext not in CPU_VARIANTS_EXTENSIONS:
- raise InvalidCPUExtensionError(cpu_variant)
- self.cpu_variant += "+"+ext
+ self.cpu_variant = cpu.check_format_cpu_variant(cpu_variant)
if integrated_rom_size:
cpu_reset_address = self.soc_mem_map["rom"]
if cpu_type is not None:
# CPU selection / instance
if cpu_type == "lm32":
- self.add_cpu(lm32.LM32(platform, self.cpu_reset_address, self.cpu_variant))
+ self.add_cpu(cpu.lm32.LM32(platform, self.cpu_reset_address, self.cpu_variant))
elif cpu_type == "mor1kx" or cpu_type == "or1k":
if cpu_type == "or1k":
deprecated_warning("SoCCore's \"cpu-type\" to \"mor1kx\"")
- self.add_cpu(mor1kx.MOR1KX(platform, self.cpu_reset_address, self.cpu_variant))
+ self.add_cpu(cpu.mor1kx.MOR1KX(platform, self.cpu_reset_address, self.cpu_variant))
elif cpu_type == "picorv32":
- self.add_cpu(picorv32.PicoRV32(platform, self.cpu_reset_address, self.cpu_variant))
+ self.add_cpu(cpu.picorv32.PicoRV32(platform, self.cpu_reset_address, self.cpu_variant))
elif cpu_type == "vexriscv":
- self.add_cpu(vexriscv.VexRiscv(platform, self.cpu_reset_address, self.cpu_variant))
+ self.add_cpu(cpu.vexriscv.VexRiscv(platform, self.cpu_reset_address, self.cpu_variant))
elif cpu_type == "minerva":
- self.add_cpu(minerva.Minerva(platform, self.cpu_reset_address, self.cpu_variant))
+ self.add_cpu(cpu.minerva.Minerva(platform, self.cpu_reset_address, self.cpu_variant))
elif cpu_type == "rocket":
- self.add_cpu(rocket.RocketRV64(platform, self.cpu_reset_address, self.cpu_variant))
+ self.add_cpu(cpu.rocket.RocketRV64(platform, self.cpu_reset_address, self.cpu_variant))
else:
raise ValueError("Unsupported CPU type: {}".format(cpu_type))