The Q1 Sequencer#

A Q1 Sequencer is a processing unit implemented in the FPGA of Qblox modules. Each sequencer operates independently, similar to a core in a CPU. Like a CPU that executes assembly instructions, a sequencer can be programmed using Q1ASM, Qblox’s dedicated assembly language. These Q1ASM instructions are compiled to perform tasks such as signal generation, signal acquisition, and communication with other Q1 sequencers. A single Qblox module contains multiple sequencers, and communication can occur both within a module and across modules or even clusters.

There are 3 types of Q1 Sequencers:

Features that are present in each type of sequencer (control, readout and timetag) are described in their own pages.

A Q1 sequencer is made up of a Q1 core and a real-time (RT) core. The Q1 core processes instructions similar to a CPU and pushes certain instructions to the RT core which performs actions on the signal path. The following diagram describes in detail the parts of all Q1 Sequencers along with examples to illustrate how the parts work together.

<sodipodi:namedview id=”namedview1637” pagecolor=”#ffffff” bordercolor=”#000000” borderopacity=”0.25” inkscape:showpageshadow=”2” inkscape:pageopacity=”0.0” inkscape:pagecheckerboard=”0” inkscape:deskcolor=”#d1d1d1” inkscape:document-units=”mm” showgrid=”false” inkscape:zoom=”5.656854” inkscape:cx=”149.02276” inkscape:cy=”37.388273” inkscape:window-width=”1854” inkscape:window-height=”1011” inkscape:window-x=”0” inkscape:window-y=”0” inkscape:window-maximized=”1” inkscape:current-layer=”layer1”> <inkscape:grid type=”xygrid” id=”grid166” originx=”-3.8483207” originy=”-1.4000917” /> </sodipodi:namedview> <inkscape:path-effect effect=”bspline” id=”path-effect4702” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect29910” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect24178” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-6” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-67” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-67-8” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-8” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-8-7” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-7” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-6-7” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-5” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-7-7” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-8-2” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-8-7-8” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect24178-2” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-67-3” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-67-8-9” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect29910-2” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-50” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-50-6” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4702-4” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-67-8-5” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-9” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-9-4” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-6-75” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-62” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-9-2” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-9-4-9” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-50-0” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-50-6-6” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-7-0” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-8-28” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-8-7-3” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect24178-29” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-67-8-94” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-67-8-5-4” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect29910-5” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-4” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-4-6” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-4-4” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-50-6-0” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-50-6-3” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-50-6-3-9” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> RT CORE LATCHEDREGISTERS awg_offs_0:0awg_offs_1:1000freq:25000000 Q1 CORE real-time? no yes latched arithmetic jump control REGISTERS R0:0x00000000R1:0x00000000R2:0x00000000R63:0x00000000 INSTRUCTION MEMORY move 0, R0move 100, R1move 21, R2add R1, R0, R0loop R2, 4stop RT QUEUE duration SIGNAL PATH CONTROL READOUT TIMETAG TRIGGERNETWORK LATCHEDREGISTERS awg_offs_0:0awg_offs_1:1000freq:25000000 LATCHEDREGISTERS awg_offs_0:0awg_offs_1:1000freq:25000000 LATCHEDREGISTERS awg_offs_0:0awg_offs_1:1000freq:25000000 LATCHEDREGISTERS awg_offs_0:0awg_offs_1:1000freq:25000000 LATCHEDREGISTERS awg_offs_0:0awg_offs_1:1000freq:25000000

<sodipodi:namedview id=”namedview1637” pagecolor=”#ffffff” bordercolor=”#000000” borderopacity=”0.25” inkscape:showpageshadow=”2” inkscape:pageopacity=”0.0” inkscape:pagecheckerboard=”0” inkscape:deskcolor=”#d1d1d1” inkscape:document-units=”mm” showgrid=”false” inkscape:zoom=”5.656854” inkscape:cx=”94.575536” inkscape:cy=”38.272156” inkscape:window-width=”1854” inkscape:window-height=”1011” inkscape:window-x=”0” inkscape:window-y=”0” inkscape:window-maximized=”1” inkscape:current-layer=”layer1”> <inkscape:grid type=”xygrid” id=”grid166” originx=”-3.8483207” originy=”-1.4000917” /> </sodipodi:namedview> <inkscape:path-effect effect=”bspline” id=”path-effect4702” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect29910” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect24178” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-6” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-67” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-67-8” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-8” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-8-7” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-7” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-6-7” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-5” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-7-7” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-8-2” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-8-7-8” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect24178-2” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-67-3” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-67-8-9” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect29910-2” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-50” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-50-6” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4702-4” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-67-8-5” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-9” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-9-4” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-6-75” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-62” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-9-2” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-9-4-9” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-50-0” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-50-6-6” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-7-0” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-8-28” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-8-7-3” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect24178-29” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-67-8-94” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-67-8-5-4” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect29910-5” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-4” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-4-6” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-4-4” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-50-6-0” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-50-6-3” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-50-6-3-9” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-6-3” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-2” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-4-2” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-4-4-5” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-50-6-4” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-50-6-3-1” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-50-6-3-9-7” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-50-6-0-0” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-7-2” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-8-8” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect4777-8-7-2” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> <inkscape:path-effect effect=”bspline” id=”path-effect29910-29” is_visible=”true” lpeversion=”1” weight=”33.333333” steps=”2” helper_size=”0” apply_no_weight=”true” apply_with_weight=”true” only_selected=”false” /> RT CORE LATCHEDREGISTERS awg_offs_0:0awg_offs_1:1000freq:25000000 Q1 CORE real-time? no yes latched arithmetic jump control REGISTERS R0:0x00000000R1:0x00000000R2:0x00000000R63:0x00000000 INSTRUCTION MEMORY move 0, R0move 100, R1move 21, R2add R1, R0, R0loop R2, 4stop RT QUEUE duration SIGNAL PATH CONTROL READOUT TIMETAG TRIGGERNETWORK LATCHEDREGISTERS awg_offs_0:0awg_offs_1:1000freq:25000000 LATCHEDREGISTERS awg_offs_0:0awg_offs_1:1000freq:25000000 LATCHEDREGISTERS awg_offs_0:0awg_offs_1:1000freq:25000000 LATCHEDREGISTERS awg_offs_0:0awg_offs_1:1000freq:25000000 LATCHEDREGISTERS awg_offs_0:0awg_offs_1:1000freq:25000000

Diagram of a running Q1 Sequencer. Click on the heading of each block to learn more about each block. The arrows indicate information flow.

The Q1 core executes program logic (arithmetic, branching, and scheduling) while the RT core generates or modifies the signal in real time.

1. Instruction memory#

Each sequencer has an instruction memory where the Q1ASM instructions are uploaded to, using the sequencer.sequence() function. Each Q1ASM instruction is either classical or real-time (RT) and each type is explained in the following sections. Examples of classical instructions are add, jmp and set_awg_offs. RT instructions as these dictate the timing of operations. Example of RT instructions are play, acquire and wait. The full list of instructions and their use is shown here.

A control or timetag sequencer can store 16384 instructions, while a readout sequencer can store 12288 instructions. Note that these are instructions as counted by the stripped Q1ASM program as described in the “Example: My first sequence” in the Q1 core section below.

Warning

Every Sequence of instructions must end with the stop instruction.

2. Registers#

Each Q1 processor contains 64 user programmable 32 bit registers (named R0 through R63) in each sequencer. Instructions in the Instruction Memory interact with registers. For example, add R0, R1, R2 adds the value in R0 to the value in R1 and stores the result in R2. Other instructions only read from registers. For example, wait R7 instructs the RT core to wait for R7 nanoseconds before proceeding to the next instruction in the queue.

Important

Each register may be updated/read no more than once every two instructions. A nop instruction may be used if the register value needs to be used immediately. As an example, the following Q1ASM program may lead to undefined behavior because R1 is used immediately after writing to it.

move 2, R0
move 3, R1
add  R0, R1, R2
stop 

Adding a nop will pass a single cycle in the Q1 core which in this case ensures that register R1 is written successfully. Any other instruction that does not interact with the R1 register will also do the same.

move 2, R0
move 3, R1
nop
add  R0, R1, R2
stop

3. Q1 core#

The Q1 core is the part of the sequencer that processes the instructions, in the Instruction memory. Once the sequencer is started (Sequencer.start_sequencer()), the Q1 core executes every instruction one by one. The Q1 core fully executes classical instructions, and pushes the RT instructions to the RT queue. If the RT queue is full, the Q1 core pauses or stalls its execution until a spot is empty.

Execution times for all instructions on the Q1 core are listed in the table of instructions.

Note

For RT instructions, the execution time indicates how long the Q1 core takes to fill the RT queue.

3.1 Latched instructions#

Some classical instructions like set_awg_offs and set_freq change special latched registers in the FPGA. These registers hold or latch the value until a RT instruction (such as upd_param or play) applies them to the parts of the sequencer that deal with signals.

For example, the set_awg_offs instruction latches a value for an output offset for a control or readout sequencer. The output offset does not change when the Q1 core executes this instruction. The output offset will only change when a RT instruction is executed. In the “Example: Square pulse” below, you can see how values latched by the Q1 core affect the behavior of the RT-core during execution.

Multiple Q1 instructions can be executed before a single RT instruction, allowing all parameters to take effect simultaneously. This enables gapless signal generation, as Q1 processing occurs in parallel with RT execution.

Special mentions

  1. The set_cond latched instruction affects following RT instructions.

  2. The wait RT instruction does not update latched parameters.

4. Real-Time core#

RT instructions pushed from the Q1 core arrive one by one to the RT queue, which holds 32 RT instructions. Every time a RT instruction is pushed to the RT queue by the Q1 core, a copy of the latched registers is also pushed to the queue. To see the list of RT instructions, see here. Each RT instruction contains an integer argument(duration) specified in units of ns. The minimum value for duration is 4 ns.

The RT core pops (or removes) the next RT instruction from the RT queue and starts the execution of the instruction. Starting execution of the RT instruction also involves updating the signal path with the latched parameters that are attached to the RT instruction. This updates the relevant part of the signal path. After starting the execution, the RT core then waits exactly duration ns of physical time before executing the next RT instruction.

Important

The next instruction in the RT queue will always be executed after duration ns. This may interrupt waveform playback or stop a running acquisition if the next instruction is a play or acquire respectively.

If there is no instruction in the RT queue to execute next, the sequencer will raise the SEQUENCE_PROCESSOR_RT_EXEC_COMMAND_UNDERFLOW error flag. A typical cause of underflow is a loop with a very short real-time run-time, since the jump of a loop takes some cycles to be executed by the Q1 core. See the column Execution time of Instructions for execution times in the Q1 core for each instruction.

4.1 wait_sync#

The wait_sync instruction stops the RT core until all sequencers that have sequencer.sync_en(True) arrive at a wait_sync instruction and the SYNQ protocol is executed to synchronize all of the above sequencers. After this, the RT core waits for duration ns before executing the next RT instruction in the RT queue.

Warning

This means that the time required to execute a wait_sync instruction is not deterministic.

Warning

If multiple sequencers have the sequencer.sync_en(True), either all or none of the sequencers should have the wait_sync instruction. Otherwise, the sequencers that execute wait_sync will wait forever for the other sequencers to execute wait_sync.

5. Trigger handling#

Every Q1 sequencer is connected to the trigger network on the backplane, which can be used to:

  • Pause the sequencer until a trigger is received on a specific address using wait_trigger or,

  • Execute RT instructions conditionally using set_cond

Trigger handling is explained in detail in its own page.

5. Signal path#

The signal path is the part of the Q1 sequencer that either plays or acquires a signal. The parts of the sequencer above all work together to instruct or modify the signal path.

There are 3 types of Q1 sequencers each have different signal paths:

The output of the signal path from each sequencer is connected to the channel map, which is module specific. For example, see QCM channel map