From 6113ecb1997ed5292baf4680f6293572cc324ef0 Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Mon, 11 Mar 2019 16:27:52 +0800 Subject: [PATCH] kasli: add nrc variant --- artiq/examples/kasli_basic/device_db_nrc.py | 449 ++++++++++++++++++++ artiq/gateware/targets/kasli.py | 33 +- 2 files changed, 481 insertions(+), 1 deletion(-) create mode 100644 artiq/examples/kasli_basic/device_db_nrc.py diff --git a/artiq/examples/kasli_basic/device_db_nrc.py b/artiq/examples/kasli_basic/device_db_nrc.py new file mode 100644 index 000000000..7f1fa93fb --- /dev/null +++ b/artiq/examples/kasli_basic/device_db_nrc.py @@ -0,0 +1,449 @@ + +# Autogenerated for the nrc variant +core_addr = "192.168.1.75" + +device_db = { + "core": { + "type": "local", + "module": "artiq.coredevice.core", + "class": "Core", + "arguments": {"host": core_addr, "ref_period": 1e-09} + }, + "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} + }, +} + +# standalone peripherals + +device_db["ttl0"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLInOut", + "arguments": {"channel": 0x000000}, +} + + +device_db["ttl1"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLInOut", + "arguments": {"channel": 0x000001}, +} + + +device_db["ttl2"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLInOut", + "arguments": {"channel": 0x000002}, +} + + +device_db["ttl3"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLInOut", + "arguments": {"channel": 0x000003}, +} + + +device_db["ttl4"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x000004}, +} + + +device_db["ttl5"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x000005}, +} + + +device_db["ttl6"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x000006}, +} + + +device_db["ttl7"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x000007}, +} + + +device_db["ttl8"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x000008}, +} + + +device_db["ttl9"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x000009}, +} + + +device_db["ttl10"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x00000a}, +} + + +device_db["ttl11"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x00000b}, +} + + +device_db["ttl12"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x00000c}, +} + + +device_db["ttl13"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x00000d}, +} + + +device_db["ttl14"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x00000e}, +} + + +device_db["ttl15"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x00000f}, +} + + +device_db["spi_urukul0"]={ + "type": "local", + "module": "artiq.coredevice.spi2", + "class": "SPIMaster", + "arguments": {"channel": 0x000010} +} + +device_db["ttl_urukul0_io_update"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x000011} +} + +device_db["ttl_urukul0_sw0"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x000012} +} + +device_db["ttl_urukul0_sw1"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x000013} +} + +device_db["ttl_urukul0_sw2"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x000014} +} + +device_db["ttl_urukul0_sw3"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x000015} +} + +device_db["urukul0_cpld"] = { + "type": "local", + "module": "artiq.coredevice.urukul", + "class": "CPLD", + "arguments": { + "spi_device": "spi_urukul0", + "sync_device": None, + "io_update_device": "ttl_urukul0_io_update", + "refclk": 125000000.0, + "clk_sel": 2 + } +} + +device_db["urukul0_ch0"] = { + "type": "local", + "module": "artiq.coredevice.ad9910", + "class": "AD9910", + "arguments": { + "pll_n": 32, + "chip_select": 4, + "cpld_device": "urukul0_cpld", + "sw_device": "ttl_urukul0_sw0" + } +} + +device_db["urukul0_ch1"] = { + "type": "local", + "module": "artiq.coredevice.ad9910", + "class": "AD9910", + "arguments": { + "pll_n": 32, + "chip_select": 5, + "cpld_device": "urukul0_cpld", + "sw_device": "ttl_urukul0_sw1" + } +} + +device_db["urukul0_ch2"] = { + "type": "local", + "module": "artiq.coredevice.ad9910", + "class": "AD9910", + "arguments": { + "pll_n": 32, + "chip_select": 6, + "cpld_device": "urukul0_cpld", + "sw_device": "ttl_urukul0_sw2" + } +} + +device_db["urukul0_ch3"] = { + "type": "local", + "module": "artiq.coredevice.ad9910", + "class": "AD9910", + "arguments": { + "pll_n": 32, + "chip_select": 7, + "cpld_device": "urukul0_cpld", + "sw_device": "ttl_urukul0_sw3" + } +} + +device_db["spi_urukul1"]={ + "type": "local", + "module": "artiq.coredevice.spi2", + "class": "SPIMaster", + "arguments": {"channel": 0x000016} +} + +device_db["ttl_urukul1_io_update"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x000017} +} + +device_db["ttl_urukul1_sw0"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x000018} +} + +device_db["ttl_urukul1_sw1"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x000019} +} + +device_db["ttl_urukul1_sw2"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x00001a} +} + +device_db["ttl_urukul1_sw3"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x00001b} +} + +device_db["urukul1_cpld"] = { + "type": "local", + "module": "artiq.coredevice.urukul", + "class": "CPLD", + "arguments": { + "spi_device": "spi_urukul1", + "sync_device": None, + "io_update_device": "ttl_urukul1_io_update", + "refclk": 125000000.0, + "clk_sel": 2 + } +} + +device_db["urukul1_ch0"] = { + "type": "local", + "module": "artiq.coredevice.ad9912", + "class": "AD9912", + "arguments": { + "pll_n": 8, + "chip_select": 4, + "cpld_device": "urukul1_cpld", + "sw_device": "ttl_urukul1_sw0" + } +} + +device_db["urukul1_ch1"] = { + "type": "local", + "module": "artiq.coredevice.ad9912", + "class": "AD9912", + "arguments": { + "pll_n": 8, + "chip_select": 5, + "cpld_device": "urukul1_cpld", + "sw_device": "ttl_urukul1_sw1" + } +} + +device_db["urukul1_ch2"] = { + "type": "local", + "module": "artiq.coredevice.ad9912", + "class": "AD9912", + "arguments": { + "pll_n": 8, + "chip_select": 6, + "cpld_device": "urukul1_cpld", + "sw_device": "ttl_urukul1_sw2" + } +} + +device_db["urukul1_ch3"] = { + "type": "local", + "module": "artiq.coredevice.ad9912", + "class": "AD9912", + "arguments": { + "pll_n": 8, + "chip_select": 7, + "cpld_device": "urukul1_cpld", + "sw_device": "ttl_urukul1_sw3" + } +} + +device_db["spi_sampler0_adc"] = { + "type": "local", + "module": "artiq.coredevice.spi2", + "class": "SPIMaster", + "arguments": {"channel": 0x00001c} +} +device_db["spi_sampler0_pgia"] = { + "type": "local", + "module": "artiq.coredevice.spi2", + "class": "SPIMaster", + "arguments": {"channel": 0x00001d} +} +device_db["spi_sampler0_cnv"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x00001e}, +} +device_db["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" + } +} + +device_db["spi_zotino0"] = { + "type": "local", + "module": "artiq.coredevice.spi2", + "class": "SPIMaster", + "arguments": {"channel": 0x00001f} +} +device_db["ttl_zotino0_ldac"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x000020} +} +device_db["ttl_zotino0_clr"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x000021} +} +device_db["zotino0"] = { + "type": "local", + "module": "artiq.coredevice.zotino", + "class": "Zotino", + "arguments": { + "spi_device": "spi_zotino0", + "ldac_device": "ttl_zotino0_ldac", + "clr_device": "ttl_zotino0_clr" + } +} + +device_db["led0"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x000022} +} + +device_db["led1"] = { + "type": "local", + "module": "artiq.coredevice.ttl", + "class": "TTLOut", + "arguments": {"channel": 0x000023} +} diff --git a/artiq/gateware/targets/kasli.py b/artiq/gateware/targets/kasli.py index 18df5fac8..83535319e 100755 --- a/artiq/gateware/targets/kasli.py +++ b/artiq/gateware/targets/kasli.py @@ -571,6 +571,37 @@ class Berkeley(_StandaloneBase): self.add_rtio(self.rtio_channels) +class NRC(_StandaloneBase): + def __init__(self, hw_rev=None, **kwargs): + if hw_rev is None: + hw_rev = "v1.1" + _StandaloneBase.__init__(self, hw_rev=hw_rev, **kwargs) + + self.config["SI5324_AS_SYNTHESIZER"] = None + self.config["RTIO_FREQUENCY"] = "125.0" + + self.rtio_channels = [] + eem.DIO.add_std(self, 0, + ttl_serdes_7series.InOut_8X, ttl_serdes_7series.Output_8X) + eem.DIO.add_std(self, 1, + ttl_serdes_7series.Output_8X, ttl_serdes_7series.Output_8X) + eem.Urukul.add_std(self, 2, 3, ttl_serdes_7series.Output_8X) + eem.Urukul.add_std(self, 4, 5, ttl_serdes_7series.Output_8X) + eem.Sampler.add_std(self, 6, 7, ttl_serdes_7series.Output_8X) + eem.Zotino.add_std(self, 8, ttl_serdes_7series.Output_8X) + + for i in (1, 2): + sfp_ctl = self.platform.request("sfp_ctl", i) + phy = ttl_simple.Output(sfp_ctl.led) + self.submodules += phy + self.rtio_channels.append(rtio.Channel.from_phy(phy)) + + self.config["HAS_RTIO_LOG"] = None + self.config["RTIO_LOG_CHANNEL"] = len(self.rtio_channels) + self.rtio_channels.append(rtio.LogChannel()) + self.add_rtio(self.rtio_channels) + + class PTB(_StandaloneBase): """PTB Kasli variant @@ -1164,7 +1195,7 @@ class VLBAISatellite(_SatelliteBase): VARIANTS = {cls.__name__.lower(): cls for cls in [ Opticlock, SUServo, PTB, PTB2, HUB, LUH, - SYSU, MITLL, MITLL2, USTC, Tsinghua, Tsinghua2, WIPM, NUDT, Berkeley, + SYSU, MITLL, MITLL2, USTC, Tsinghua, Tsinghua2, WIPM, NUDT, Berkeley, NRC, VLBAIMaster, VLBAISatellite, Tester, Master, Satellite]}