from artiq import * from artiq.coredevice.runtime_exceptions import RTIOUnderflow class PulseRate(Experiment, AutoDB): """Sustained pulse rate""" class DBKeys: core = Device() ttl0 = Device() pulse_rate = Result() @kernel def run(self): T = time_to_cycles(100*ns) while True: try: for i in range(1000): self.ttl0.pulse(cycles_to_time(T)) delay(cycles_to_time(T)) except RTIOUnderflow: T += 1 self.core.recover_underflow() else: self.pulse_rate = cycles_to_time(2*T) break