HI,
I’ve posted an error before, but have since discovered a problem that is likely its root cause and just wanted to simplify down to that exact issue.
In its simplest form, I receive an RTIOunderflow error in this setup below, where I am just switching off a TTL inside a for loop more than 18 times. This, as I understand it, shouldn’t be the case as the TTL.off() function should have zero time delay. It may be the case that this is just how Artiq functions, but it does lead to a further problem down the line in what we'd like to achieve with our setup (below).
from artiq.experiment import *
class Exp_MS_TTLRTIOunderflow_Test(EnvExperiment):
"""Exp MS TTLTRIOunderflow Test"""
def build(self):
self.setattr_device("core")
self.s7 = self.get_device("ttl7")
self.s9 = self.get_device("ttl9")
self.t4 = self.get_device("ttl20")
self.t15 = self.get_device("ttl31")
@kernel
def run(self):
self.core.reset()
self.s7.output()
self.s9.output()
self.t4.output()
self.t15.output()
while(True):
for i in range(19):
self.s9.off()
delay(10*us)
Below is the while loop we wish to use. It’s a series of synchronised 250ns pulses with a 50% duty cycle (We use this for holding atom traps). After 28us of running this sequence with receive an RTIOunderflow error. I believe this is related to the error above.
while(True):
self.s7.on()
self.t4.off()
delay(250*ns)
self.s9.on()
self.t15.off()
delay(250*ns)
self.s7.off()
self.t4.on()
delay(250*ns)
self.s9.off()
self.t15.on()
delay(250*ns)
I’ve attached another setup we’re interested in using here with the same set of pulses, but these have a 10us delay between sets of 10 pulses. (We’d use this for system gates). Again an RTIO underflow error occurs, but after 65us.
while(True):
for i in range(10):
self.s7.on()
self.t4.off()
delay(250*ns)
self.s9.on()
self.t15.off()
delay(250*ns)
self.s7.off()
self.t4.on()
delay(250*ns)
self.s9.off()
self.t15.on()
delay(250*ns)
delay(10*us)
I have two crude images of the pulses patterns and the moment the RTIOunderflow error occurs recorded on a GHz oscilloscope, here.
For reference, I’ve managed to reproduce this RTIOunderflow error on different Kasli boards (Rev.1.1) and with different Artiq firmware and conda environment versions (5.7108.ced5b938 and 6.7345.5f6aa02b.beta).
This could just be how Artiq operates and we’ll have to find a way to work around it, but I need some help in figuring out how to either:
- Fix this problem, so the TTL.off() doesn’t produce a time delay (If this is the error).
- Find a way to change how I program with Artiq so we can run the pulse patterns above without an RTIOunderflow occurring.
Thanks in advance,
Luke