From d8a5951a131ae79d744913d5998ce0dcaa617b24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20J=C3=B6rdens?= Date: Mon, 5 Nov 2018 16:07:14 +0000 Subject: [PATCH] kasli: add sync to LUH, HUB, Opticlock MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit for #1143, also add missing LUH device db Signed-off-by: Robert Jördens --- artiq/examples/kasli_basic/device_db_hub.py | 21 +- artiq/examples/kasli_basic/device_db_luh.py | 183 ++++++++++++++++++ .../kasli_basic/device_db_opticlock.py | 79 +++++++- artiq/gateware/targets/kasli.py | 22 ++- 4 files changed, 286 insertions(+), 19 deletions(-) create mode 100644 artiq/examples/kasli_basic/device_db_luh.py diff --git a/artiq/examples/kasli_basic/device_db_hub.py b/artiq/examples/kasli_basic/device_db_hub.py index dc2fc2d59..ea364ecfc 100644 --- a/artiq/examples/kasli_basic/device_db_hub.py +++ b/artiq/examples/kasli_basic/device_db_hub.py @@ -86,13 +86,19 @@ for j in range(3): "type": "local", "module": "artiq.coredevice.spi2", "class": "SPIMaster", - "arguments": {"channel": 27 + 2*j} + "arguments": {"channel": 27 + 3*j} + }, + "ttl_urukul{}_sync".format(j): { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLClockGen", + "arguments": {"channel": 28 + 3*j, "acc_width": 4} }, "ttl_urukul{}_io_update".format(j): { "type": "local", "module": "artiq.coredevice.ttl", "class": "TTLOut", - "arguments": {"channel": 28 + 2*j} + "arguments": {"channel": 29 + 3*j} }, "urukul{}_cpld".format(j): { "type": "local", @@ -100,6 +106,7 @@ for j in range(3): "class": "CPLD", "arguments": { "spi_device": "spi_urukul{}".format(j), + "sync_device": "ttl_urukul{}_sync".format(j), "io_update_device": "ttl_urukul{}_io_update".format(j), "refclk": 100e6, "clk_sel": 0 @@ -126,13 +133,13 @@ device_db.update({ "type": "local", "module": "artiq.coredevice.ttl", "class": "TTLOut", - "arguments": {"channel": 33} + "arguments": {"channel": 36} }, "led1": { "type": "local", "module": "artiq.coredevice.ttl", "class": "TTLOut", - "arguments": {"channel": 34} + "arguments": {"channel": 37} } }) @@ -142,19 +149,19 @@ device_db.update({ "type": "local", "module": "artiq.coredevice.spi2", "class": "SPIMaster", - "arguments": {"channel": 35} + "arguments": {"channel": 38} }, "ttl_zotino0_ldac": { "type": "local", "module": "artiq.coredevice.ttl", "class": "TTLOut", - "arguments": {"channel": 36} + "arguments": {"channel": 39} }, "ttl_zotino0_clr": { "type": "local", "module": "artiq.coredevice.ttl", "class": "TTLOut", - "arguments": {"channel": 37} + "arguments": {"channel": 40} }, "zotino0": { "type": "local", diff --git a/artiq/examples/kasli_basic/device_db_luh.py b/artiq/examples/kasli_basic/device_db_luh.py new file mode 100644 index 000000000..9efdbd190 --- /dev/null +++ b/artiq/examples/kasli_basic/device_db_luh.py @@ -0,0 +1,183 @@ +core_addr = "staging.ber.quartiq.de" + +device_db = { + "core": { + "type": "local", + "module": "artiq.coredevice.core", + "class": "Core", + "arguments": {"host": core_addr, "ref_period": 1e-9} + }, + "core_log": { + "type": "controller", + "host": "::1", + "port": 1068, + "command": "aqctl_corelog -p {port} --bind {bind} " + core_addr + }, + "core_cache": { + "type": "local", + "module": "artiq.coredevice.cache", + "class": "CoreCache" + }, + "core_dma": { + "type": "local", + "module": "artiq.coredevice.dma", + "class": "CoreDMA" + }, + + "i2c_switch0": { + "type": "local", + "module": "artiq.coredevice.i2c", + "class": "PCA9548", + "arguments": {"address": 0xe0} + }, + "i2c_switch1": { + "type": "local", + "module": "artiq.coredevice.i2c", + "class": "PCA9548", + "arguments": {"address": 0xe2} + }, +} + + +device_db.update({ + "ttl" + str(i): { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLInOut" if i < 4 else "TTLOut", + "arguments": {"channel": i}, + } for i in range(24) +}) + + +device_db.update({ + "spi_sampler0_adc": { + "type": "local", + "module": "artiq.coredevice.spi2", + "class": "SPIMaster", + "arguments": {"channel": 24} + }, + "spi_sampler0_pgia": { + "type": "local", + "module": "artiq.coredevice.spi2", + "class": "SPIMaster", + "arguments": {"channel": 25} + }, + "spi_sampler0_cnv": { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 26}, + }, + "sampler0": { + "type": "local", + "module": "artiq.coredevice.sampler", + "class": "Sampler", + "arguments": { + "spi_adc_device": "spi_sampler0_adc", + "spi_pgia_device": "spi_sampler0_pgia", + "cnv_device": "spi_sampler0_cnv" + } + } +}) + +for j in range(2): + device_db.update({ + "spi_urukul{}".format(j): { + "type": "local", + "module": "artiq.coredevice.spi2", + "class": "SPIMaster", + "arguments": {"channel": 27 + 3*j} + }, + "ttl_urukul{}_sync".format(j): { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLClockGen", + "arguments": {"channel": 28 + 3*j, "acc_width": 4} + }, + "ttl_urukul{}_io_update".format(j): { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 29 + 3*j} + }, + "urukul{}_cpld".format(j): { + "type": "local", + "module": "artiq.coredevice.urukul", + "class": "CPLD", + "arguments": { + "spi_device": "spi_urukul{}".format(j), + "sync_device": "ttl_urukul{}_sync".format(j), + "io_update_device": "ttl_urukul{}_io_update".format(j), + "refclk": 100e6, + "clk_sel": 0 + } + } + }) + + device_db.update({ + "urukul{}_ch{}".format(j, i): { + "type": "local", + "module": "artiq.coredevice.ad9910", + "class": "AD9910", + "arguments": { + "pll_n": 40, + "chip_select": 4 + i, + "cpld_device": "urukul{}_cpld".format(j) + } + } for i in range(4) + }) + +device_db.update({ + "grabber0": { + "type": "local", + "module": "artiq.coredevice.grabber", + "class": "grabber", + "arguments": {"channel_base": 33} + } +}) + +device_db.update({ + "led0": { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 35} + }, + "led1": { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 36} + } +}) + +device_db.update({ + "spi_zotino0": { + "type": "local", + "module": "artiq.coredevice.spi2", + "class": "SPIMaster", + "arguments": {"channel": 37} + }, + "ttl_zotino0_ldac": { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 38} + }, + "ttl_zotino0_clr": { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 39} + }, + "zotino0": { + "type": "local", + "module": "artiq.coredevice.zotino", + "class": "Zotino", + "arguments": { + "spi_device": "spi_zotino0", + "ldac_device": "ttl_zotino0_ldac", + "clr_device": "ttl_zotino0_clr" + } + } +}) diff --git a/artiq/examples/kasli_basic/device_db_opticlock.py b/artiq/examples/kasli_basic/device_db_opticlock.py index 068aba9fa..70c4d22d6 100644 --- a/artiq/examples/kasli_basic/device_db_opticlock.py +++ b/artiq/examples/kasli_basic/device_db_opticlock.py @@ -198,7 +198,7 @@ device_db = { "class": "TTLOut", "arguments": {"channel": 25} }, - "novogorny0" : { + "novogorny0": { "type": "local", "module": "artiq.coredevice.novogorny", "class": "Novogorny", @@ -313,23 +313,94 @@ device_db = { "arguments": {"channel": 33} }, + "spi_urukul1": { + "type": "local", + "module": "artiq.coredevice.spi2", + "class": "SPIMaster", + "arguments": {"channel": 34} + }, + "ttl_urukul1_sync": { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLClockGen", + "arguments": {"channel": 35, "acc_width": 4} + }, + "ttl_urukul1_io_update": { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 36} + }, + "urukul1_cpld": { + "type": "local", + "module": "artiq.coredevice.urukul", + "class": "CPLD", + "arguments": { + "spi_device": "spi_urukul1", + "sync_device": "ttl_urukul1_sync", + "io_update_device": "ttl_urukul1_io_update", + "refclk": 100e6, + "clk_sel": 1 + } + }, + "urukul1_ch0": { + "type": "local", + "module": "artiq.coredevice.ad9910", + "class": "AD9910", + "arguments": { + "pll_n": 40, + "chip_select": 4, + "cpld_device": "urukul1_cpld" + } + }, + "urukul1_ch1": { + "type": "local", + "module": "artiq.coredevice.ad9910", + "class": "AD9910", + "arguments": { + "pll_n": 40, + "chip_select": 5, + "cpld_device": "urukul1_cpld" + } + }, + "urukul1_ch2": { + "type": "local", + "module": "artiq.coredevice.ad9910", + "class": "AD9910", + "arguments": { + "pll_n": 40, + "chip_select": 6, + "cpld_device": "urukul1_cpld" + } + }, + "urukul1_ch3": { + "type": "local", + "module": "artiq.coredevice.ad9910", + "class": "AD9910", + "arguments": { + "pll_n": 40, + "chip_select": 7, + "cpld_device": "urukul1_cpld" + } + }, + "spi_zotino0": { "type": "local", "module": "artiq.coredevice.spi2", "class": "SPIMaster", - "arguments": {"channel": 36} + "arguments": {"channel": 37} }, "ttl_zotino0_ldac": { "type": "local", "module": "artiq.coredevice.ttl", "class": "TTLOut", - "arguments": {"channel": 37} + "arguments": {"channel": 38} }, "ttl_zotino0_clr": { "type": "local", "module": "artiq.coredevice.ttl", "class": "TTLOut", - "arguments": {"channel": 38} + "arguments": {"channel": 39} }, "zotino0": { "type": "local", diff --git a/artiq/gateware/targets/kasli.py b/artiq/gateware/targets/kasli.py index e20ad51ea..60b7b0af1 100755 --- a/artiq/gateware/targets/kasli.py +++ b/artiq/gateware/targets/kasli.py @@ -175,7 +175,8 @@ class Opticlock(_StandaloneBase): self.submodules += phy self.rtio_channels.append(rtio.Channel.from_phy(phy)) - eem.Urukul.add_std(self, 6, None, ttl_serdes_7series.Output_8X) + eem.Urukul.add_std(self, 6, None, ttl_serdes_7series.Output_8X, + ttl_simple.ClockGen) eem.Zotino.add_std(self, 7, ttl_serdes_7series.Output_8X) self.config["HAS_RTIO_LOG"] = None @@ -560,9 +561,12 @@ class HUB(_StandaloneBase): eem.DIO.add_std(self, 2, ttl_serdes_7series.Output_8X, ttl_serdes_7series.Output_8X) eem.Sampler.add_std(self, 3, None, ttl_serdes_7series.Output_8X) - eem.Urukul.add_std(self, 4, None, ttl_serdes_7series.Output_8X) - eem.Urukul.add_std(self, 5, None, ttl_serdes_7series.Output_8X) - eem.Urukul.add_std(self, 6, None, ttl_serdes_7series.Output_8X) + eem.Urukul.add_std(self, 4, None, ttl_serdes_7series.Output_8X, + ttl_simple.ClockGen) + eem.Urukul.add_std(self, 5, None, ttl_serdes_7series.Output_8X, + ttl_simple.ClockGen) + eem.Urukul.add_std(self, 6, None, ttl_serdes_7series.Output_8X, + ttl_simple.ClockGen) for i in (1, 2): sfp_ctl = self.platform.request("sfp_ctl", i) @@ -605,8 +609,10 @@ class LUH(_StandaloneBase): eem.DIO.add_std(self, 2, ttl_serdes_7series.Output_8X, ttl_serdes_7series.Output_8X) eem.Sampler.add_std(self, 3, None, ttl_serdes_7series.Output_8X) - eem.Urukul.add_std(self, 4, None, ttl_serdes_7series.Output_8X) - eem.Urukul.add_std(self, 5, None, ttl_serdes_7series.Output_8X) + eem.Urukul.add_std(self, 4, None, ttl_serdes_7series.Output_8X, + ttl_simple.ClockGen) + eem.Urukul.add_std(self, 5, None, ttl_serdes_7series.Output_8X, + ttl_simple.ClockGen) eem.Grabber.add_std(self, 6) for i in (1, 2): @@ -649,12 +655,12 @@ class Tester(_StandaloneBase): eem.DIO.add_std(self, 5, ttl_serdes_7series.InOut_8X, ttl_serdes_7series.Output_8X) eem.Urukul.add_std(self, 0, 1, ttl_serdes_7series.Output_8X, - ttl_simple.ClockGen) + ttl_simple.ClockGen) eem.Sampler.add_std(self, 3, 2, ttl_serdes_7series.Output_8X) eem.Zotino.add_std(self, 4, ttl_serdes_7series.Output_8X) eem.Grabber.add_std(self, 6) eem.Urukul.add_std(self, 7, None, ttl_serdes_7series.Output_8X, - ttl_simple.ClockGen) + ttl_simple.ClockGen) eem.DIO.add_std(self, 8, ttl_serdes_7series.Output_8X, ttl_serdes_7series.Output_8X) eem.DIO.add_std(self, 9,