Recent interface changes

Unreleased: Setting input/output gain and attenuation parameters

This change makes quantify-scheduler be able to set input/output gain/attenuation parameters through the hardware configuration for Qblox hardware. Note, that not every combination of input/output gain/attenuation 0/1 is possible. The following parameters are possible for each device type.

  • QRM (baseband)

    • input_gain_I (for complex_output_0) or input_gain (for real_output_0)

    • input_gain_Q (for complex_output_0) or input_gain (for real_output_1)

  • QRM-RF

    • output_att (for complex_output_0)

    • input_att (for complex_output_0)

  • QCM-RF

    • output_att (for complex_output_0)

    • output_att (for complex_output_1)

See quantify_scheduler/schemas/examples/qblox_test_mapping.json for concrete examples (see Usage of the backend).

0.8.0: Dynamic Sequencer Allocation

The Qblox backend now dynamically allocates sequencers to port-clock combinations as required. This enables the user to target an arbitrary number of port-clock combinations using the same module, as long as they are not being simultaneously targeted. Given that Qblox instruments have 6 sequencers, up to 6 port-clock combinations may be simultaneously targeted.

This change has introduced new syntax for the hardware configuration file:

  1. We now specify a list of portclock_configs instead of sequencers.

  2. Furthermore, we moved latency correction to top-level key latency_corrections

  3. We provide a helper function that may be used to convert from old to new syntax:

Old syntax:

hardware_cfg = {
    "backend": "quantify_scheduler.backends.qblox_backend.hardware_compile",
    "qcm0": {
        "instrument_type": "Pulsar_QCM",
        "ref": "internal",
        "complex_output_0": {
            "lo_name": "lo0",
            "seq0": {
                "port": "q0:mw",
                "clock": "q0.01",
                "interm_freq": 50e6,
                "latency_correction" : 4e-9
            },
            "seq1": {
                "port": "q1:mw",
                "clock": "q1.01",
                "interm_freq": 100e6
            }
        },
        "complex_output_1": {
            "lo_name": "lo1",
            "seq2": {
                "port": "q2:mw",
                "clock": "q2.01",
                "interm_freq": None
            }
        }
    },
    "lo0": {"instrument_type": "LocalOscillator", "frequency": None, "power": 20},
    "lo1": {"instrument_type": "LocalOscillator", "frequency": 7.2e9, "power": 20}
}

New syntax:

hardware_cfg = {
    "backend": "quantify_scheduler.backends.qblox_backend.hardware_compile",
    "latency_corrections": {
        "q0:mw-q0.01": 4e-9
    },
    "qcm0": {
        "instrument_type": "Pulsar_QCM",
        "ref": "internal",
        "complex_output_0": {
            "lo_name": "lo0",
            "portclock_configs": [
                {
                    "port": "q0:mw",
                    "clock": "q0.01",
                    "interm_freq": 50e6
                },
                {
                    "port": "q1:mw",
                    "clock": "q1.01",
                    "interm_freq": 100e6
                }
            ]
        },
        "complex_output_1": {
            "lo_name": "lo1",
            "portclock_configs": [
                {
                    "port": "q2:mw",
                    "clock": "q2.01",
                    "interm_freq": None
                }
            ]
        }
    },
    "lo0": {"instrument_type": "LocalOscillator", "frequency": None, "power": 20},
    "lo1": {"instrument_type": "LocalOscillator", "frequency": 7.2e9, "power": 20}
}