Shuttler: Patch ddb entries in the example code

This commit is contained in:
linuswck 2023-09-26 11:08:16 +08:00 committed by Sébastien Bourdeauducq
parent a61bbf5618
commit eedac7cf71
1 changed files with 37 additions and 37 deletions

View File

@ -57,13 +57,13 @@ class Shuttler(EnvExperiment):
self.setattr_device("core") self.setattr_device("core")
self.setattr_device("core_dma") self.setattr_device("core_dma")
self.setattr_device("scheduler") self.setattr_device("scheduler")
self.leds = [ self.get_device("efc_led{}".format(i)) for i in range(2) ] self.efc0_leds = [ self.get_device("efc0_led{}".format(i)) for i in range(2) ]
self.setattr_device("pdq_config") self.setattr_device("shuttler0_config")
self.setattr_device("pdq_trigger") self.setattr_device("shuttler0_trigger")
self.pdq_volt = [ self.get_device("pdq{}_volt".format(i)) for i in range(16) ] self.shuttler0_volt = [ self.get_device("shuttler0_volt{}".format(i)) for i in range(16) ]
self.pdq_dds = [ self.get_device("pdq{}_dds".format(i)) for i in range(16) ] self.shuttler0_dds = [ self.get_device("shuttler0_dds{}".format(i)) for i in range(16) ]
self.setattr_device("afe_relay") self.setattr_device("shuttler0_relay")
self.setattr_device("afe_adc") self.setattr_device("shuttler0_adc")
@kernel @kernel
@ -102,13 +102,13 @@ class Shuttler(EnvExperiment):
@kernel @kernel
def pdq_channel_reset(self, ch): def pdq_channel_reset(self, ch):
self.pdq_volt[ch].set_waveform( self.shuttler0_volt[ch].set_waveform(
a0=0, a0=0,
a1=0, a1=0,
a2=0, a2=0,
a3=0, a3=0,
) )
self.pdq_dds[ch].set_waveform( self.shuttler0_dds[ch].set_waveform(
b0=0, b0=0,
b1=0, b1=0,
b2=0, b2=0,
@ -117,7 +117,7 @@ class Shuttler(EnvExperiment):
c1=0, c1=0,
c2=0, c2=0,
) )
self.pdq_trigger.trigger(1 << ch) self.shuttler0_trigger.trigger(1 << ch)
@kernel @kernel
def example_waveform(self): def example_waveform(self):
@ -158,14 +158,14 @@ class Shuttler(EnvExperiment):
# Reset OUT0 and OUT1 # Reset OUT0 and OUT1
## Step 1 ## ## Step 1 ##
self.afe_relay.enable(0b11) self.shuttler0_relay.enable(0b11)
## Step 2 ## ## Step 2 ##
start_f_MHz = 0.01 start_f_MHz = 0.01
end_f_MHz = 0.05 end_f_MHz = 0.05
duration_us = 500 duration_us = 500
# OUT0 and OUT1 have their frequency and phase aligned at 500us # OUT0 and OUT1 have their frequency and phase aligned at 500us
self.pdq_dds[0].set_waveform( self.shuttler0_dds[0].set_waveform(
b0=pdq_dds_amp_mu(1.0), b0=pdq_dds_amp_mu(1.0),
b1=0, b1=0,
b2=0, b2=0,
@ -174,7 +174,7 @@ class Shuttler(EnvExperiment):
c1=pdq_freq_mu(start_f_MHz), c1=pdq_freq_mu(start_f_MHz),
c2=pdq_freq_sweep(start_f_MHz, end_f_MHz, duration_us), c2=pdq_freq_sweep(start_f_MHz, end_f_MHz, duration_us),
) )
self.pdq_dds[1].set_waveform( self.shuttler0_dds[1].set_waveform(
b0=pdq_dds_amp_mu(1.0), b0=pdq_dds_amp_mu(1.0),
b1=0, b1=0,
b2=0, b2=0,
@ -183,12 +183,12 @@ class Shuttler(EnvExperiment):
c1=pdq_freq_mu(end_f_MHz), c1=pdq_freq_mu(end_f_MHz),
c2=0, c2=0,
) )
self.pdq_trigger.trigger(0b11) self.shuttler0_trigger.trigger(0b11)
delay(500*us) delay(500*us)
## Step 3 ## ## Step 3 ##
# OUT0 and OUT1 has 180 degree phase difference # OUT0 and OUT1 has 180 degree phase difference
self.pdq_dds[0].set_waveform( self.shuttler0_dds[0].set_waveform(
b0=pdq_dds_amp_mu(1.0), b0=pdq_dds_amp_mu(1.0),
b1=0, b1=0,
b2=0, b2=0,
@ -199,12 +199,12 @@ class Shuttler(EnvExperiment):
) )
# Phase and Output Setting of OUT1 is retained # Phase and Output Setting of OUT1 is retained
# if the channel is not triggered or config is not cleared # if the channel is not triggered or config is not cleared
self.pdq_trigger.trigger(0b1) self.shuttler0_trigger.trigger(0b1)
delay(500*us) delay(500*us)
## Step 4 ## ## Step 4 ##
# b(0) = 0, b(250) = 8.545, b(500) = 0 # b(0) = 0, b(250) = 8.545, b(500) = 0
self.pdq_dds[0].set_waveform( self.shuttler0_dds[0].set_waveform(
b0=0, b0=0,
b1=pdq_dds_damp_mu(0.06835937), b1=pdq_dds_damp_mu(0.06835937),
b2=pdq_dds_ddamp_mu(-0.0001367187), b2=pdq_dds_ddamp_mu(-0.0001367187),
@ -213,7 +213,7 @@ class Shuttler(EnvExperiment):
c1=pdq_freq_mu(end_f_MHz), c1=pdq_freq_mu(end_f_MHz),
c2=0, c2=0,
) )
self.pdq_dds[1].set_waveform( self.shuttler0_dds[1].set_waveform(
b0=0, b0=0,
b1=pdq_dds_damp_mu(0.06835937), b1=pdq_dds_damp_mu(0.06835937),
b2=pdq_dds_ddamp_mu(-0.0001367187), b2=pdq_dds_ddamp_mu(-0.0001367187),
@ -222,17 +222,17 @@ class Shuttler(EnvExperiment):
c1=0, c1=0,
c2=0, c2=0,
) )
self.pdq_trigger.trigger(0b11) self.shuttler0_trigger.trigger(0b11)
delay(500*us) delay(500*us)
## Step 5 ## ## Step 5 ##
self.pdq_volt[0].set_waveform( self.shuttler0_volt[0].set_waveform(
a0=pdq_volt_amp_mu(-5.0), a0=pdq_volt_amp_mu(-5.0),
a1=int32(pdq_volt_damp_mu(0.01)), a1=int32(pdq_volt_damp_mu(0.01)),
a2=0, a2=0,
a3=0, a3=0,
) )
self.pdq_dds[0].set_waveform( self.shuttler0_dds[0].set_waveform(
b0=pdq_dds_amp_mu(1.0), b0=pdq_dds_amp_mu(1.0),
b1=0, b1=0,
b2=0, b2=0,
@ -241,13 +241,13 @@ class Shuttler(EnvExperiment):
c1=pdq_freq_mu(end_f_MHz), c1=pdq_freq_mu(end_f_MHz),
c2=0, c2=0,
) )
self.pdq_volt[1].set_waveform( self.shuttler0_volt[1].set_waveform(
a0=pdq_volt_amp_mu(-5.0), a0=pdq_volt_amp_mu(-5.0),
a1=int32(pdq_volt_damp_mu(0.01)), a1=int32(pdq_volt_damp_mu(0.01)),
a2=0, a2=0,
a3=0, a3=0,
) )
self.pdq_dds[1].set_waveform( self.shuttler0_dds[1].set_waveform(
b0=0, b0=0,
b1=0, b1=0,
b2=0, b2=0,
@ -256,17 +256,17 @@ class Shuttler(EnvExperiment):
c1=0, c1=0,
c2=0, c2=0,
) )
self.pdq_trigger.trigger(0b11) self.shuttler0_trigger.trigger(0b11)
delay(1000*us) delay(1000*us)
## Step 6 ## ## Step 6 ##
self.pdq_volt[0].set_waveform( self.shuttler0_volt[0].set_waveform(
a0=pdq_volt_amp_mu(-2.5), a0=pdq_volt_amp_mu(-2.5),
a1=int32(pdq_volt_damp_mu(0.01)), a1=int32(pdq_volt_damp_mu(0.01)),
a2=0, a2=0,
a3=0, a3=0,
) )
self.pdq_dds[0].set_waveform( self.shuttler0_dds[0].set_waveform(
b0=0, b0=0,
b1=pdq_dds_damp_mu(0.06835937), b1=pdq_dds_damp_mu(0.06835937),
b2=pdq_dds_ddamp_mu(-0.0001367187), b2=pdq_dds_ddamp_mu(-0.0001367187),
@ -275,18 +275,18 @@ class Shuttler(EnvExperiment):
c1=pdq_freq_mu(start_f_MHz), c1=pdq_freq_mu(start_f_MHz),
c2=pdq_freq_sweep(start_f_MHz, end_f_MHz, duration_us), c2=pdq_freq_sweep(start_f_MHz, end_f_MHz, duration_us),
) )
self.pdq_trigger.trigger(0b1) self.shuttler0_trigger.trigger(0b1)
self.pdq_channel_reset(1) self.pdq_channel_reset(1)
delay(500*us) delay(500*us)
## Step 7 ## ## Step 7 ##
self.pdq_volt[0].set_waveform( self.shuttler0_volt[0].set_waveform(
a0=pdq_volt_amp_mu(2.5), a0=pdq_volt_amp_mu(2.5),
a1=int32(pdq_volt_damp_mu(-0.01)), a1=int32(pdq_volt_damp_mu(-0.01)),
a2=0, a2=0,
a3=0, a3=0,
) )
self.pdq_dds[0].set_waveform( self.shuttler0_dds[0].set_waveform(
b0=0, b0=0,
b1=pdq_dds_damp_mu(-0.06835937), b1=pdq_dds_damp_mu(-0.06835937),
b2=pdq_dds_ddamp_mu(0.0001367187), b2=pdq_dds_ddamp_mu(0.0001367187),
@ -295,11 +295,11 @@ class Shuttler(EnvExperiment):
c1=pdq_freq_mu(end_f_MHz), c1=pdq_freq_mu(end_f_MHz),
c2=pdq_freq_sweep(end_f_MHz, start_f_MHz, duration_us), c2=pdq_freq_sweep(end_f_MHz, start_f_MHz, duration_us),
) )
self.pdq_trigger.trigger(0b1) self.shuttler0_trigger.trigger(0b1)
delay(500*us) delay(500*us)
## Step 8 ## ## Step 8 ##
self.afe_relay.enable(0) self.shuttler0_relay.enable(0)
self.pdq_channel_reset(0) self.pdq_channel_reset(0)
self.pdq_channel_reset(1) self.pdq_channel_reset(1)
@ -307,24 +307,24 @@ class Shuttler(EnvExperiment):
def led(self): def led(self):
for i in range(2): for i in range(2):
for j in range(3): for j in range(3):
self.leds[i].pulse(.1*s) self.efc0_leds[i].pulse(.1*s)
delay(.1*s) delay(.1*s)
@kernel @kernel
def relay_init(self): def relay_init(self):
self.afe_relay.init() self.shuttler0_relay.init()
self.afe_relay.enable(0x0000) self.shuttler0_relay.enable(0x0000)
@kernel @kernel
def adc_init(self): def adc_init(self):
delay_mu(int64(self.core.ref_multiplier)) delay_mu(int64(self.core.ref_multiplier))
self.afe_adc.power_up() self.shuttler0_adc.power_up()
delay_mu(int64(self.core.ref_multiplier)) delay_mu(int64(self.core.ref_multiplier))
assert self.afe_adc.read_id() >> 4 == 0x038d assert self.shuttler0_adc.read_id() >> 4 == 0x038d
delay_mu(int64(self.core.ref_multiplier)) delay_mu(int64(self.core.ref_multiplier))
# The actual output voltage is limited by the hardware, the calculated calibration gain and offset. # The actual output voltage is limited by the hardware, the calculated calibration gain and offset.
# For example, if the system has a calibration gain of 1.06, then the max output voltage = 10 / 1.06 = 9.43V. # For example, if the system has a calibration gain of 1.06, then the max output voltage = 10 / 1.06 = 9.43V.
# Setting a value larger than 9.43V will result in overflow. # Setting a value larger than 9.43V will result in overflow.
self.afe_adc.calibrate(self.pdq_volt, self.pdq_trigger, self.pdq_config) self.shuttler0_adc.calibrate(self.shuttler0_volt, self.shuttler0_trigger, self.shuttler0_config)