135 lines
4.1 KiB
Python
135 lines
4.1 KiB
Python
from artiq.experiment import *
|
|
from artiq.coredevice.ad9910 import *
|
|
|
|
|
|
class Sinusoid(EnvExperiment):
|
|
def build(self):
|
|
self.setattr_device("core")
|
|
self.cpld = self.get_device("urukul0_cpld")
|
|
self.dds0 = self.get_device("urukul0_ch0")
|
|
|
|
@kernel
|
|
def run(self):
|
|
self.core.reset()
|
|
self.cpld.init()
|
|
self.dds0.init()
|
|
self.dds0.cfg_sw(True)
|
|
self.dds0.set_att(6.*dB)
|
|
self.dds0.set(10*MHz)
|
|
|
|
|
|
class SynchronizedSinusoid(EnvExperiment):
|
|
def build(self):
|
|
self.setattr_device("core")
|
|
self.cpld = self.get_device("urukul0_cpld")
|
|
self.dds0 = self.get_device("urukul0_ch0")
|
|
self.dds1 = self.get_device("urukul0_ch1")
|
|
|
|
@kernel
|
|
def run(self):
|
|
self.core.reset()
|
|
self.cpld.init()
|
|
|
|
self.dds0.init()
|
|
self.dds0.cfg_sw(True)
|
|
self.dds0.set_phase_mode(PHASE_MODE_TRACKING)
|
|
self.dds0.set_att(6.*dB)
|
|
self.dds1.init()
|
|
self.dds1.cfg_sw(True)
|
|
self.dds1.set_phase_mode(PHASE_MODE_TRACKING)
|
|
self.dds1.set_att(6.*dB)
|
|
|
|
self.dds0.set(frequency=10*MHz, phase=0.0)
|
|
self.dds1.set(frequency=10*MHz, phase=0.25) # 0.25 turns phase offset
|
|
|
|
|
|
class PulseRAM(EnvExperiment):
|
|
def build(self):
|
|
self.setattr_device("core")
|
|
self.cpld = self.get_device("urukul0_cpld")
|
|
self.dds0 = self.get_device("urukul0_ch0")
|
|
self.dds1 = self.get_device("urukul0_ch1")
|
|
|
|
def prepare(self):
|
|
self.amp = [0.0, 0.0, 0.0, 0.7, 0.0, 0.7, 0.7] # Reversed Order
|
|
self.asf_ram = [0] * len(self.amp)
|
|
|
|
@kernel
|
|
def init_dds(self, dds):
|
|
self.core.break_realtime()
|
|
dds.init()
|
|
dds.set_att(6.*dB)
|
|
dds.cfg_sw(True)
|
|
|
|
@kernel
|
|
def configure_ram_mode(self, dds):
|
|
self.core.break_realtime()
|
|
dds.set_cfr1(ram_enable=0)
|
|
self.cpld.io_update.pulse_mu(8)
|
|
self.cpld.set_profile(0) # Enable the corresponding RAM profile
|
|
# Profile 0 is the default
|
|
dds.set_profile_ram(start=0, end=len(self.asf_ram)-1,
|
|
step=250, profile=0, mode=RAM_MODE_CONT_RAMPUP)
|
|
self.cpld.io_update.pulse_mu(8)
|
|
dds.amplitude_to_ram(self.amp, self.asf_ram)
|
|
dds.write_ram(self.asf_ram)
|
|
|
|
self.core.break_realtime()
|
|
dds.set(frequency=5*MHz, ram_destination=RAM_DEST_ASF)
|
|
# Pass osk_enable=1 to set_cfr1() if it is not an amplitude RAM
|
|
dds.set_cfr1(ram_enable=1, ram_destination=RAM_DEST_ASF)
|
|
|
|
self.cpld.io_update.pulse_mu(8)
|
|
|
|
@kernel
|
|
def run(self):
|
|
self.core.reset()
|
|
self.core.break_realtime()
|
|
self.cpld.init()
|
|
|
|
self.init_dds(self.dds0)
|
|
self.configure_ram_mode(self.dds0)
|
|
|
|
|
|
class AmpRAM(PulseRAM):
|
|
def prepare(self):
|
|
# Reversed Order
|
|
self.amp = [1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1, 0.0]
|
|
self.asf_ram = [0] * len(self.amp)
|
|
|
|
|
|
class SynchronizedPulseRAM(PulseRAM):
|
|
@kernel
|
|
def configure_ram_mode(self, dds):
|
|
self.core.break_realtime()
|
|
dds.set_cfr1(ram_enable=0)
|
|
self.cpld.io_update.pulse_mu(8)
|
|
self.cpld.set_profile(0) # Enable the corresponding RAM profile
|
|
# Profile 0 is the default
|
|
dds.set_profile_ram(start=0, end=len(self.asf_ram)-1,
|
|
step=250, profile=0, mode=RAM_MODE_CONT_RAMPUP)
|
|
self.cpld.io_update.pulse_mu(8)
|
|
dds.amplitude_to_ram(self.amp, self.asf_ram)
|
|
dds.write_ram(self.asf_ram)
|
|
|
|
self.core.break_realtime()
|
|
dds.set(frequency=5*MHz, phase=0.0, ram_destination=RAM_DEST_ASF)
|
|
# Pass osk_enable=1 to set_cfr1() if it is not an amplitude RAM
|
|
dds.set_cfr1(ram_enable=1, ram_destination=RAM_DEST_ASF)
|
|
|
|
self.cpld.io_update.pulse_mu(8)
|
|
|
|
@kernel
|
|
def run(self):
|
|
self.core.reset()
|
|
self.core.break_realtime()
|
|
self.cpld.init()
|
|
|
|
self.init_dds(self.dds0)
|
|
self.init_dds(self.dds1)
|
|
self.dds0.set_phase_mode(PHASE_MODE_TRACKING)
|
|
self.dds1.set_phase_mode(PHASE_MODE_TRACKING)
|
|
|
|
self.configure_ram_mode(self.dds0)
|
|
self.configure_ram_mode(self.dds1)
|