qat.experimental.conversion.pulse_to_q1.sequence_convention module

Materialise Qblox whole-sequence initialisation after hardware binding.

class QbloxSequenceInitialisationPass(target_data=QbloxTargetDescription(q1asm=Q1AsmSpec(min_gain=-32768, max_gain=32767, min_offset=-32768, max_offset=32767, rt_duration_resolution_ns=1, min_rt_duration_ns=4, max_rt_duration_ns=65535, min_wait_immediate_ns=0, max_wait_immediate_ns=65535, register_size=4294967295), sequencer_specs=frozendict.frozendict({<Q1SequencerType.control: 'control'>: Q1SequencerSpec(type=<Q1SequencerType.control: 'control'>, instruction_capacity=16384, q1_core_clock_period_ns=4, sample_period_ns=1, min_waveform_sample=-1.0, max_waveform_sample=1.0, nco_min_frequency_hz=-500000000.0, nco_max_frequency_hz=500000000.0, nco_phase_steps=1000000000, nco_phase_steps_per_degree=2777777.777777778, nco_frequency_steps_per_hz=4, nco_frequency_limit_steps=2000000000, register_count=64, waveform_sample_capacity=16384, readout=None), <Q1SequencerType.readout: 'readout'>: Q1SequencerSpec(type=<Q1SequencerType.readout: 'readout'>, instruction_capacity=12288, q1_core_clock_period_ns=4, sample_period_ns=1, min_waveform_sample=-1.0, max_waveform_sample=1.0, nco_min_frequency_hz=-500000000.0, nco_max_frequency_hz=500000000.0, nco_phase_steps=1000000000, nco_phase_steps_per_degree=2777777.777777778, nco_frequency_steps_per_hz=4, nco_frequency_limit_steps=2000000000, register_count=64, waveform_sample_capacity=16384, readout=ReadoutSpec(min_integration_length_samples=4, max_integration_length_samples=16777212, integration_length_step_samples=4, integration_sample_period_ns=1, weight_sample_period_ns=1, min_acquisition_threshold=-16777212, max_acquisition_threshold=16777212, weight_sample_capacity=16384))}), module_specs=frozendict.frozendict({<QbloxModuleKind.qcm: 'qcm'>: ModuleSpec(kind=<QbloxModuleKind.qcm: 'qcm'>, sequencers=(<Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>), output_count=4, input_count=0, output_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5), 1: (0, 1, 2, 3, 4, 5), 2: (0, 1, 2, 3, 4, 5), 3: (0, 1, 2, 3, 4, 5)}), marker_bit_0=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=0), marker_bit_1=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=1), marker_bit_2=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=2), marker_bit_3=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=3), input_channel_map=frozendict.frozendict({}), acquisition_memory_bins=None, supports_mixer_correction=True, supports_local_oscillator_enable=True, supports_awg_modulation=True, supports_acquisition_demodulation=True, output_path_components=frozenset({<SignalPath.q: 'Q'>, <SignalPath.i: 'I'>}), acquisition_connection_mode=<AcquisitionConnectionMode.none: 'none'>, is_rf=False, local_oscillator=None), <QbloxModuleKind.qcm_rf: 'qcm_rf'>: ModuleSpec(kind=<QbloxModuleKind.qcm_rf: 'qcm_rf'>, sequencers=(<Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>), output_count=2, input_count=0, output_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5), 1: (0, 1, 2, 3, 4, 5)}), marker_bit_0=MarkerBitTarget(role=<MarkerBitRole.output_switch: 'output_switch'>, channel=0), marker_bit_1=MarkerBitTarget(role=<MarkerBitRole.output_switch: 'output_switch'>, channel=1), marker_bit_2=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=1), marker_bit_3=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=0), input_channel_map=frozendict.frozendict({}), acquisition_memory_bins=None, supports_mixer_correction=True, supports_local_oscillator_enable=True, supports_awg_modulation=True, supports_acquisition_demodulation=True, output_path_components=frozenset({<SignalPath.iq: 'IQ'>}), acquisition_connection_mode=<AcquisitionConnectionMode.none: 'none'>, is_rf=True, local_oscillator=LocalOscillatorSpec(min_frequency_hz=2000000000, max_frequency_hz=18000000000, frequency_step_hz=1)), <QbloxModuleKind.qrm: 'qrm'>: ModuleSpec(kind=<QbloxModuleKind.qrm: 'qrm'>, sequencers=(<Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>), output_count=2, input_count=2, output_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5), 1: (0, 1, 2, 3, 4, 5)}), marker_bit_0=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=0), marker_bit_1=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=1), marker_bit_2=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=2), marker_bit_3=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=3), input_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5), 1: (0, 1, 2, 3, 4, 5)}), acquisition_memory_bins=3000000, supports_mixer_correction=True, supports_local_oscillator_enable=True, supports_awg_modulation=True, supports_acquisition_demodulation=True, output_path_components=frozenset({<SignalPath.q: 'Q'>, <SignalPath.i: 'I'>}), acquisition_connection_mode=<AcquisitionConnectionMode.components: 'components'>, is_rf=False, local_oscillator=None), <QbloxModuleKind.qrm_rf: 'qrm_rf'>: ModuleSpec(kind=<QbloxModuleKind.qrm_rf: 'qrm_rf'>, sequencers=(<Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>), output_count=1, input_count=1, output_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5)}), marker_bit_0=None, marker_bit_1=MarkerBitTarget(role=<MarkerBitRole.output_switch: 'output_switch'>, channel=0), marker_bit_2=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=0), marker_bit_3=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=1), input_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5)}), acquisition_memory_bins=3000000, supports_mixer_correction=True, supports_local_oscillator_enable=True, supports_awg_modulation=True, supports_acquisition_demodulation=True, output_path_components=frozenset({<SignalPath.iq: 'IQ'>}), acquisition_connection_mode=<AcquisitionConnectionMode.combined: 'combined'>, is_rf=True, local_oscillator=LocalOscillatorSpec(min_frequency_hz=2000000000, max_frequency_hz=18000000000, frequency_step_hz=1)), <QbloxModuleKind.qrc: 'qrc'>: ModuleSpec(kind=<QbloxModuleKind.qrc: 'qrc'>, sequencers=(<Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>), output_count=6, input_count=2, output_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5, 6, 7), 1: (0, 1, 2, 3, 4, 5, 6, 7), 2: (0, 4, 8, 9, 10, 11), 3: (1, 5, 8, 9, 10, 11), 4: (2, 6, 8, 9, 10, 11), 5: (3, 7, 8, 9, 10, 11)}), marker_bit_0=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=0), marker_bit_1=None, marker_bit_2=None, marker_bit_3=None, input_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5, 6, 7), 1: (0, 1, 2, 3, 4, 5, 6, 7)}), acquisition_memory_bins=7000000, supports_mixer_correction=False, supports_local_oscillator_enable=False, supports_awg_modulation=False, supports_acquisition_demodulation=False, output_path_components=frozenset({<SignalPath.iq: 'IQ'>}), acquisition_connection_mode=<AcquisitionConnectionMode.combined: 'combined'>, is_rf=True, local_oscillator=LocalOscillatorSpec(min_frequency_hz=500000000, max_frequency_hz=10100000000, frequency_step_hz=100000000))}), min_module_slot=1, max_module_slot=20))

Bases: OrderedPass, ModulePass

Materialise Qblox whole-sequence initialisation.

The pass owns the sequence layout [prologue, payload, epilogue, q1.stop]. It derives the initial marker state from the bound module’s physical marker routing, then inserts the marker, latch-enable, and applying update prologue before the outlined payload. q1.stop remains the final structural terminator. A future convention epilogue would be materialised by this pass immediately before that terminator; the epilogue is empty today.

Variables:

target_data – Qblox marker routing and instruction timing.

apply(ctx, op)

Materialise the lowering convention in every bound sequence.

Parameters:
  • ctx (Context) – The xDSL context, unused but required by the pass interface.

  • op (ModuleOp) – Module containing outlined and bound Q1 sequences.

Raises:

PassFailedException – If a sequence is empty, unbound, or does not end in q1.stop.

Return type:

None

name: ClassVar[str] = 'qblox-sequence-initialisation'
required_predecessors()

Return the pass that must bind physical hardware before this pass.

Return type:

frozenset[type[ModulePass]]

Returns:

The physical hardware-binding pass.

runs_before()

Return the validation pass that must run after this pass.

Return type:

frozenset[type[ModulePass]]

Returns:

The Q1 Pulse validation pass.

target_data: QbloxTargetDescription = QbloxTargetDescription(q1asm=Q1AsmSpec(min_gain=-32768, max_gain=32767, min_offset=-32768, max_offset=32767, rt_duration_resolution_ns=1, min_rt_duration_ns=4, max_rt_duration_ns=65535, min_wait_immediate_ns=0, max_wait_immediate_ns=65535, register_size=4294967295), sequencer_specs=frozendict.frozendict({<Q1SequencerType.control: 'control'>: Q1SequencerSpec(type=<Q1SequencerType.control: 'control'>, instruction_capacity=16384, q1_core_clock_period_ns=4, sample_period_ns=1, min_waveform_sample=-1.0, max_waveform_sample=1.0, nco_min_frequency_hz=-500000000.0, nco_max_frequency_hz=500000000.0, nco_phase_steps=1000000000, nco_phase_steps_per_degree=2777777.777777778, nco_frequency_steps_per_hz=4, nco_frequency_limit_steps=2000000000, register_count=64, waveform_sample_capacity=16384, readout=None), <Q1SequencerType.readout: 'readout'>: Q1SequencerSpec(type=<Q1SequencerType.readout: 'readout'>, instruction_capacity=12288, q1_core_clock_period_ns=4, sample_period_ns=1, min_waveform_sample=-1.0, max_waveform_sample=1.0, nco_min_frequency_hz=-500000000.0, nco_max_frequency_hz=500000000.0, nco_phase_steps=1000000000, nco_phase_steps_per_degree=2777777.777777778, nco_frequency_steps_per_hz=4, nco_frequency_limit_steps=2000000000, register_count=64, waveform_sample_capacity=16384, readout=ReadoutSpec(min_integration_length_samples=4, max_integration_length_samples=16777212, integration_length_step_samples=4, integration_sample_period_ns=1, weight_sample_period_ns=1, min_acquisition_threshold=-16777212, max_acquisition_threshold=16777212, weight_sample_capacity=16384))}), module_specs=frozendict.frozendict({<QbloxModuleKind.qcm: 'qcm'>: ModuleSpec(kind=<QbloxModuleKind.qcm: 'qcm'>, sequencers=(<Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>), output_count=4, input_count=0, output_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5), 1: (0, 1, 2, 3, 4, 5), 2: (0, 1, 2, 3, 4, 5), 3: (0, 1, 2, 3, 4, 5)}), marker_bit_0=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=0), marker_bit_1=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=1), marker_bit_2=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=2), marker_bit_3=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=3), input_channel_map=frozendict.frozendict({}), acquisition_memory_bins=None, supports_mixer_correction=True, supports_local_oscillator_enable=True, supports_awg_modulation=True, supports_acquisition_demodulation=True, output_path_components=frozenset({<SignalPath.q: 'Q'>, <SignalPath.i: 'I'>}), acquisition_connection_mode=<AcquisitionConnectionMode.none: 'none'>, is_rf=False, local_oscillator=None), <QbloxModuleKind.qcm_rf: 'qcm_rf'>: ModuleSpec(kind=<QbloxModuleKind.qcm_rf: 'qcm_rf'>, sequencers=(<Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>), output_count=2, input_count=0, output_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5), 1: (0, 1, 2, 3, 4, 5)}), marker_bit_0=MarkerBitTarget(role=<MarkerBitRole.output_switch: 'output_switch'>, channel=0), marker_bit_1=MarkerBitTarget(role=<MarkerBitRole.output_switch: 'output_switch'>, channel=1), marker_bit_2=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=1), marker_bit_3=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=0), input_channel_map=frozendict.frozendict({}), acquisition_memory_bins=None, supports_mixer_correction=True, supports_local_oscillator_enable=True, supports_awg_modulation=True, supports_acquisition_demodulation=True, output_path_components=frozenset({<SignalPath.iq: 'IQ'>}), acquisition_connection_mode=<AcquisitionConnectionMode.none: 'none'>, is_rf=True, local_oscillator=LocalOscillatorSpec(min_frequency_hz=2000000000, max_frequency_hz=18000000000, frequency_step_hz=1)), <QbloxModuleKind.qrm: 'qrm'>: ModuleSpec(kind=<QbloxModuleKind.qrm: 'qrm'>, sequencers=(<Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>), output_count=2, input_count=2, output_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5), 1: (0, 1, 2, 3, 4, 5)}), marker_bit_0=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=0), marker_bit_1=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=1), marker_bit_2=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=2), marker_bit_3=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=3), input_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5), 1: (0, 1, 2, 3, 4, 5)}), acquisition_memory_bins=3000000, supports_mixer_correction=True, supports_local_oscillator_enable=True, supports_awg_modulation=True, supports_acquisition_demodulation=True, output_path_components=frozenset({<SignalPath.q: 'Q'>, <SignalPath.i: 'I'>}), acquisition_connection_mode=<AcquisitionConnectionMode.components: 'components'>, is_rf=False, local_oscillator=None), <QbloxModuleKind.qrm_rf: 'qrm_rf'>: ModuleSpec(kind=<QbloxModuleKind.qrm_rf: 'qrm_rf'>, sequencers=(<Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>), output_count=1, input_count=1, output_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5)}), marker_bit_0=None, marker_bit_1=MarkerBitTarget(role=<MarkerBitRole.output_switch: 'output_switch'>, channel=0), marker_bit_2=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=0), marker_bit_3=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=1), input_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5)}), acquisition_memory_bins=3000000, supports_mixer_correction=True, supports_local_oscillator_enable=True, supports_awg_modulation=True, supports_acquisition_demodulation=True, output_path_components=frozenset({<SignalPath.iq: 'IQ'>}), acquisition_connection_mode=<AcquisitionConnectionMode.combined: 'combined'>, is_rf=True, local_oscillator=LocalOscillatorSpec(min_frequency_hz=2000000000, max_frequency_hz=18000000000, frequency_step_hz=1)), <QbloxModuleKind.qrc: 'qrc'>: ModuleSpec(kind=<QbloxModuleKind.qrc: 'qrc'>, sequencers=(<Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>), output_count=6, input_count=2, output_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5, 6, 7), 1: (0, 1, 2, 3, 4, 5, 6, 7), 2: (0, 4, 8, 9, 10, 11), 3: (1, 5, 8, 9, 10, 11), 4: (2, 6, 8, 9, 10, 11), 5: (3, 7, 8, 9, 10, 11)}), marker_bit_0=MarkerBitTarget(role=<MarkerBitRole.marker_output: 'marker_output'>, channel=0), marker_bit_1=None, marker_bit_2=None, marker_bit_3=None, input_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5, 6, 7), 1: (0, 1, 2, 3, 4, 5, 6, 7)}), acquisition_memory_bins=7000000, supports_mixer_correction=False, supports_local_oscillator_enable=False, supports_awg_modulation=False, supports_acquisition_demodulation=False, output_path_components=frozenset({<SignalPath.iq: 'IQ'>}), acquisition_connection_mode=<AcquisitionConnectionMode.combined: 'combined'>, is_rf=True, local_oscillator=LocalOscillatorSpec(min_frequency_hz=500000000, max_frequency_hz=10100000000, frequency_step_hz=100000000))}), min_module_slot=1, max_module_slot=20)