from artiq.experiment import * class SoftwareEdgeCount(EnvExperiment): def build(self): self.setattr_device("core") self.ttlin = self.get_device("ttl0") self.ttlout = self.get_device("ttl7") @kernel def run(self): self.core.reset() gate_start_mu = now_mu() # Start input gate & advance timeline cursor to gate_end_mu gate_end_mu = self.ttlin.gate_rising(1*ms) at_mu(gate_start_mu) for _ in range(64): self.ttlout.pulse(8*ns) delay(8*ns) counts = self.ttlin.count(gate_end_mu) print(counts) class EdgeCounter(EnvExperiment): def build(self): self.setattr_device("core") self.edgecounter0 = self.get_device("ttl0_counter") @kernel def run(self): self.core.reset() self.edgecounter0.gate_rising(1*ms) counts = self.edgecounter0.fetch_count() print(counts) class ExternalTrigger(EnvExperiment): def build(self): self.setattr_device("core") self.ttlin = self.get_device("ttl0") self.ttlout = self.get_device("ttl4") @kernel def run(self): self.core.reset() gate_end_mu = self.ttlin.gate_rising(5*ms) timestamp_mu = self.ttlin.timestamp_mu(gate_end_mu) at_mu(timestamp_mu + self.core.seconds_to_mu(10*ms)) self.ttlout.pulse(1*us)