diff --git a/src/gateware/config.py b/src/gateware/config.py new file mode 100644 index 0000000..78f97a4 --- /dev/null +++ b/src/gateware/config.py @@ -0,0 +1,16 @@ +from misoc.integration import cpu_interface + +def write_csr_file(soc, filename): + with open(filename, "w") as f: + f.write(cpu_interface.get_csr_rust( + soc.get_csr_regions(), soc.get_csr_groups(), soc.get_constants())) + +def write_mem_file(soc, filename): + with open(filename, "w") as f: + f.write(cpu_interface.get_mem_rust( + soc.get_memory_regions(), soc.get_memory_groups(), None)) + +def write_rustc_cfg_file(soc, filename): + with open(filename, "w") as f: + f.write(cpu_interface.get_rust_cfg( + soc.get_csr_regions(), soc.get_constants())) diff --git a/src/gateware/kasli_soc.py b/src/gateware/kasli_soc.py index 3cce229..2a3c0cb 100755 --- a/src/gateware/kasli_soc.py +++ b/src/gateware/kasli_soc.py @@ -11,7 +11,6 @@ from migen_axi.integration.soc_core import SoCCore from migen_axi.platforms import kasli_soc from misoc.interconnect.csr import * from misoc.cores import virtual_leds -from misoc.integration import cpu_interface from artiq.coredevice import jsondesc from artiq.gateware import rtio, eem_7series @@ -27,7 +26,7 @@ import analyzer import acpki import drtio_aux_controller import zynq_clocking - +from config import write_csr_file, write_mem_file, write_rustc_cfg_file eem_iostandard_dict = { 0: "LVDS_25", @@ -484,31 +483,6 @@ class GenericSatellite(SoCCore): self.comb += [self.virtual_leds.get(i).eq(channel.rx_ready) for i, channel in enumerate(self.gt_drtio.channels)] - -def write_mem_file(soc, filename): - with open(filename, "w") as f: - f.write(cpu_interface.get_mem_rust( - soc.get_memory_regions(), soc.get_memory_groups(), None)) - - -def write_csr_file(soc, filename): - with open(filename, "w") as f: - f.write(cpu_interface.get_csr_rust( - soc.get_csr_regions(), soc.get_csr_groups(), soc.get_constants())) - - -def write_rustc_cfg_file(soc, filename): - with open(filename, "w") as f: - for name, origin, busword, obj in soc.get_csr_regions(): - f.write("has_{}\n".format(name.lower())) - for name, value in soc.get_constants(): - if name.upper().startswith("CONFIG_"): - if value is None: - f.write("{}\n".format(name.lower()[7:])) - else: - f.write("{}=\"{}\"\n".format(name.lower()[7:], str(value))) - - def main(): parser = argparse.ArgumentParser( description="ARTIQ device binary builder for generic Kasli-SoC systems") diff --git a/src/gateware/zc706.py b/src/gateware/zc706.py index aaad33a..6ae46b4 100755 --- a/src/gateware/zc706.py +++ b/src/gateware/zc706.py @@ -10,7 +10,6 @@ from migen.genlib.cdc import MultiReg from migen_axi.integration.soc_core import SoCCore from migen_axi.platforms import zc706 from misoc.interconnect.csr import * -from misoc.integration import cpu_interface from misoc.cores import gpio from artiq.gateware import rtio, nist_clock, nist_qc2 @@ -26,7 +25,7 @@ import analyzer import acpki import drtio_aux_controller import zynq_clocking - +from config import write_csr_file, write_mem_file, write_rustc_cfg_file class SMAClkinForward(Module): def __init__(self, platform): @@ -127,7 +126,6 @@ def prepare_zc706_platform(platform): class ZC706(SoCCore): def __init__(self, acpki=False): self.acpki = acpki - self.rustc_cfg = dict() platform = zc706.Platform() prepare_zc706_platform(platform) @@ -154,9 +152,9 @@ class ZC706(SoCCore): p_CLKSWING_CFG=3), Instance("BUFG", i_I=cdr_clk, o_O=cdr_clk_buf) ] - self.rustc_cfg["has_si5324"] = None - self.rustc_cfg["si5324_as_synthesizer"] = None - self.rustc_cfg["si5324_soft_reset"] = None + self.config["HAS_SI5324"] = None + self.config["SI5324_AS_SYNTHESIZER"] = None + self.config["SI5324_SOFT_RESET"] = None self.submodules.bootstrap = CLK200BootstrapClock(platform) self.submodules.sys_crg = zynq_clocking.SYSCRG(self.platform, self.ps7, cdr_clk_buf) @@ -170,14 +168,14 @@ class ZC706(SoCCore): self.csr_devices.append("rtio_core") if self.acpki: - self.rustc_cfg["ki_impl"] = "acp" + self.config["KI_IMPL"] = "acp" self.submodules.rtio = acpki.KernelInitiator(self.rtio_tsc, bus=self.ps7.s_axi_acp, user=self.ps7.s_axi_acp_user, evento=self.ps7.event.o) self.csr_devices.append("rtio") else: - self.rustc_cfg["ki_impl"] = "csr" + self.config["KI_IMPL"] = "csr" self.submodules.rtio = rtio.KernelInitiator(self.rtio_tsc, now64=True) self.csr_devices.append("rtio") @@ -200,7 +198,6 @@ class ZC706(SoCCore): class _MasterBase(SoCCore): def __init__(self, acpki=False, drtio100mhz=False): self.acpki = acpki - self.rustc_cfg = dict() clk_freq = 100e6 if drtio100mhz else 125e6 @@ -271,18 +268,18 @@ class _MasterBase(SoCCore): memory_address = self.axi2csr.register_port(coreaux.get_tx_port(), mem_size) self.axi2csr.register_port(coreaux.get_rx_port(), mem_size) self.add_memory_region(memory_name, self.mem_map["csr"] + memory_address, mem_size * 2) - self.rustc_cfg["has_drtio"] = None - self.rustc_cfg["has_drtio_routing"] = None + self.config["HAS_DRTIO"] = None + self.config["HAS_DRTIO_ROUTING"] = None self.add_csr_group("drtio", drtio_csr_group) self.add_csr_group("drtioaux", drtioaux_csr_group) self.add_memory_group("drtioaux_mem", drtioaux_memory_group) - self.rustc_cfg["rtio_frequency"] = str(self.gt_drtio.rtio_clk_freq/1e6) + self.config["RTIO_FREQUENCY"] = str(self.gt_drtio.rtio_clk_freq/1e6) self.submodules.si5324_rst_n = gpio.GPIOOut(platform.request("si5324_33").rst_n) self.csr_devices.append("si5324_rst_n") - self.rustc_cfg["has_si5324"] = None - self.rustc_cfg["si5324_as_synthesizer"] = None + self.config["HAS_SI5324"] = None + self.config["SI5324_AS_SYNTHESIZER"] = None # Constrain TX & RX timing for the first transceiver channel # (First channel acts as master for phase alignment for all channels' TX) @@ -302,14 +299,14 @@ class _MasterBase(SoCCore): self.csr_devices.append("rtio_core") if self.acpki: - self.rustc_cfg["ki_impl"] = "acp" + self.config["KI_IMPL"] = "acp" self.submodules.rtio = acpki.KernelInitiator(self.rtio_tsc, bus=self.ps7.s_axi_acp, user=self.ps7.s_axi_acp_user, evento=self.ps7.event.o) self.csr_devices.append("rtio") else: - self.rustc_cfg["ki_impl"] = "csr" + self.config["KI_IMPL"] = "csr" self.submodules.rtio = rtio.KernelInitiator(self.rtio_tsc, now64=True) self.csr_devices.append("rtio") @@ -336,7 +333,6 @@ class _MasterBase(SoCCore): class _SatelliteBase(SoCCore): def __init__(self, acpki=False, drtio100mhz=False): self.acpki = acpki - self.rustc_cfg = dict() clk_freq = 100e6 if drtio100mhz else 125e6 @@ -425,13 +421,13 @@ class _SatelliteBase(SoCCore): # and registered in PS interface # manually, because software refers to rx/tx by halves of entire memory block, not names self.add_memory_region(memory_name, self.mem_map["csr"] + memory_address, mem_size * 2) - self.rustc_cfg["has_drtio"] = None - self.rustc_cfg["has_drtio_routing"] = None + self.config["HAS_DRTIO"] = None + self.config["HAS_DRTIO_ROUTING"] = None self.add_csr_group("drtioaux", drtioaux_csr_group) self.add_csr_group("drtiorep", drtiorep_csr_group) self.add_memory_group("drtioaux_mem", drtioaux_memory_group) - self.rustc_cfg["rtio_frequency"] = str(self.gt_drtio.rtio_clk_freq/1e6) + self.config["RTIO_FREQUENCY"] = str(self.gt_drtio.rtio_clk_freq/1e6) # Si5324 Phaser self.submodules.siphaser = SiPhaser7Series( @@ -444,8 +440,7 @@ class _SatelliteBase(SoCCore): self.csr_devices.append("siphaser") self.submodules.si5324_rst_n = gpio.GPIOOut(platform.request("si5324_33").rst_n) self.csr_devices.append("si5324_rst_n") - self.rustc_cfg["has_si5324"] = None - self.rustc_cfg["has_siphaser"] = None + self.config["HAS_SI5324"] = None rtio_clk_period = 1e9/self.gt_drtio.rtio_clk_freq # Constrain TX & RX timing for the first transceiver channel @@ -465,14 +460,14 @@ class _SatelliteBase(SoCCore): self.csr_devices.append("rtio_moninj") if self.acpki: - self.rustc_cfg["ki_impl"] = "acp" + self.config["KI_IMPL"] = "acp" self.submodules.rtio = acpki.KernelInitiator(self.rtio_tsc, bus=self.ps7.s_axi_acp, user=self.ps7.s_axi_acp_user, evento=self.ps7.event.o) self.csr_devices.append("rtio") else: - self.rustc_cfg["ki_impl"] = "csr" + self.config["KI_IMPL"] = "csr" self.submodules.rtio = rtio.KernelInitiator(self.rtio_tsc, now64=True) self.csr_devices.append("rtio") @@ -676,27 +671,6 @@ class NIST_QC2_Satellite(_SatelliteBase, _NIST_QC2_RTIO): VARIANTS = {cls.__name__.lower(): cls for cls in [NIST_CLOCK, NIST_CLOCK_Master, NIST_CLOCK_Satellite, NIST_QC2, NIST_QC2_Master, NIST_QC2_Satellite]} - -def write_csr_file(soc, filename): - with open(filename, "w") as f: - f.write(cpu_interface.get_csr_rust( - soc.get_csr_regions(), soc.get_csr_groups(), soc.get_constants())) - -def write_mem_file(soc, filename): - with open(filename, "w") as f: - f.write(cpu_interface.get_mem_rust( - soc.get_memory_regions(), soc.get_memory_groups(), None)) - - -def write_rustc_cfg_file(soc, filename): - with open(filename, "w") as f: - for k, v in sorted(soc.rustc_cfg.items(), key=itemgetter(0)): - if v is None: - f.write("{}\n".format(k)) - else: - f.write("{}=\"{}\"\n".format(k, v)) - - def main(): parser = argparse.ArgumentParser( description="ARTIQ port to the ZC706 Zynq development kit")