Source code for zhinst.toolkit.driver.devices.hdawg
"""HDAWG Instrument Driver."""
import typing as t
from zhinst.toolkit.driver.devices.base import BaseInstrument
from zhinst.toolkit.driver.nodes.awg import AWG
from zhinst.toolkit.nodetree.helper import (
create_or_append_set_transaction,
lazy_property,
)
from zhinst.toolkit.nodetree.node import NodeList
[docs]class HDAWG(BaseInstrument):
"""High-level driver for the Zurich Instruments HDAWG."""
[docs] def enable_qccs_mode(self) -> None:
"""Configure the instrument to work with PQSC.
This method sets the reference clock source to
connect the instrument to the PQSC.
Info:
Use ``factory_reset`` to reset the changes if necessary
"""
with create_or_append_set_transaction(self._root):
# Set ZSync clock to be used as reference
self.system.clocks.referenceclock.source("zsync")
# Configure DIO
# Set interface standard to use on the 32-bit DIO to LVCMOS
self.dios[0].interface(0)
# Set DIO output values to ZSync input values.
# Forward the ZSync input values to the AWG sequencer.
# Forward the DIO input values to the ZSync output.
self.dios[0].mode("qccs")
# Drive the two most significant bytes of the DIO port
self.dios[0].drive(0b1100)
# Disable DIO triggering on the AWGs,
# since it's not needed for ZSync messages
self.awgs["*"].dio.strobe.slope("off")
self.awgs["*"].dio.valid.polarity("none")
@lazy_property
def awgs(self) -> t.Sequence[AWG]:
"""A Sequence of AWG Cores."""
return NodeList(
[
AWG(
self.root,
self._tree + ("awgs", str(i)),
self.serial,
i,
self.device_type,
self.device_options,
)
for i in range(len(self["awgs"]))
],
self._root,
self._tree + ("awgs",),
)