Extended register forwarding

Status until LabOne 23.02

The PQSC has two feedback units: the register forwarding and the error decoder (see Feedback Tab for more details). The register forwarding unit is intended for simple feedback experiments, where a qubit readout maps directly to a feedback action, like active qubit reset. It can send up to four arbitrary qubit readout results per ZSync port, each one bit in size. Such results are selected from the readout register bank, a temporary storage of readout results populated by the QA units. The user can select the results to forward without constraint. This enable the system to perform a conditional action on a worker device, regardless of the origin of the readout. The number of results that can be forwarded is designed to match the capability of the instruments connected to the PQSC. Typically, an HDAWG8 is used to control up to four qubits, hence the choice of allowing the forwarding of four qubit readout results. The output of the register forwarding unit is multiplexed with the output of the error decoder unit and both are available for the worker instrument in the same message.

Example

In this example, there are two QA channels writing their readout results in register 1 and 29 respectively. The PQSC is configured to forward eight results to two different instruments connected to the first two ZSync ports, as shown in Figure 1. When a QA performs a readout, its results are automatically written in the readout register specified in the fourth argument of the startQA command, and the PQSC automatically forwards the chosen results.

fig reg fwd overview 23 06 old
Figure 1. An example of register forwarding in the PQSC until LabOne 23.02

To configure the PQSC as in Figure 1, its nodes should be programmed as in Table 1.

Table 1. Settings: PQSC register forwarding settings
Node Value

/DEV…​/ZSYNCS/0/OUTPUT/REGISTERBANK/ENABLE

True

/DEV…​/ZSYNCS/0/OUTPUT/REGISTERBANK/SOURCES/*/ENABLE

True

/DEV…​/ZSYNCS/0/OUTPUT/REGISTERBANK/SOURCES/0/REGISTER

29

/DEV…​/ZSYNCS/0/OUTPUT/REGISTERBANK/SOURCES/0/INDEX

14

/DEV…​/ZSYNCS/0/OUTPUT/REGISTERBANK/SOURCES/1/REGISTER

29

/DEV…​/ZSYNCS/0/OUTPUT/REGISTERBANK/SOURCES/1/INDEX

2

/DEV…​/ZSYNCS/0/OUTPUT/REGISTERBANK/SOURCES/2/REGISTER

1

/DEV…​/ZSYNCS/0/OUTPUT/REGISTERBANK/SOURCES/2/INDEX

1

/DEV…​/ZSYNCS/0/OUTPUT/REGISTERBANK/SOURCES/3/REGISTER

1

/DEV…​/ZSYNCS/0/OUTPUT/REGISTERBANK/SOURCES/3/INDEX

10

/DEV…​/ZSYNCS/1/OUTPUT/REGISTERBANK/ENABLE

True

/DEV…​/ZSYNCS/1/OUTPUT/REGISTERBANK/SOURCES/*/ENABLE

True

/DEV…​/ZSYNCS/1/OUTPUT/REGISTERBANK/SOURCES/0/REGISTER

1

/DEV…​/ZSYNCS/1/OUTPUT/REGISTERBANK/SOURCES/0/INDEX

12

/DEV…​/ZSYNCS/1/OUTPUT/REGISTERBANK/SOURCES/1/REGISTER

29

/DEV…​/ZSYNCS/1/OUTPUT/REGISTERBANK/SOURCES/1/INDEX

0

/DEV…​/ZSYNCS/1/OUTPUT/REGISTERBANK/SOURCES/2/REGISTER

1

/DEV…​/ZSYNCS/1/OUTPUT/REGISTERBANK/SOURCES/2/INDEX

15

/DEV…​/ZSYNCS/1/OUTPUT/REGISTERBANK/SOURCES/3/REGISTER

29

/DEV…​/ZSYNCS/1/OUTPUT/REGISTERBANK/SOURCES/3/INDEX

11

The instruments receive a word from the data sources configured in the PQSC. Such words contain the output of both the register forwarding and the error decoder unit. The conditional instruction, either getFeedback or executeTableEntry, should specify the source of feedback with the constant ZSYNC_DATA_PQSC_REGISTER or ZSYNC_DATA_PQSC_DECODER to select the relevant portion of the message. The constant ZSYNC_DATA_RAW provides the full message without any processing. Each sequencer in the instrument can reduce the message to the portion that is relevant for it; for example the state of a qubit to reset. This is done by binary shift and masking. An optional additive offset could be added. In Figure 2 an example of the flow of data to reset four qubits connected to a SHFSG4 is provided.

fig reg fwd shfsg processing 23 06 old
Figure 2. Feedback data flow in a SHFSG4 doing active qubit reset until LabOne 23.02

In order to enable such processing, the instrument nodes should be configured as in Table 2.

Table 2. Settings: SHFSG4 feedback processing settings until LabOne 23.02
Node Value

/DEV…​/SGCHANNELS/0/AWG/ZSYNC/REGISTER/SHIFT

0

/DEV…​/SGCHANNELS/0/AWG/ZSYNC/REGISTER/MASK

0b1

/DEV…​/SGCHANNELS/1/AWG/ZSYNC/REGISTER/SHIFT

1

/DEV…​/SGCHANNELS/1/AWG/ZSYNC/REGISTER/MASK

0b1

/DEV…​/SGCHANNELS/2/AWG/ZSYNC/REGISTER/SHIFT

2

/DEV…​/SGCHANNELS/2/AWG/ZSYNC/REGISTER/MASK

0b1

/DEV…​/SGCHANNELS/3/AWG/ZSYNC/REGISTER/SHIFT

3

/DEV…​/SGCHANNELS/3/AWG/ZSYNC/REGISTER/MASK

0b1

With such settings, each sequencer can get its processed feedback in a variable with var feedback = getFeedback(ZSYNC_DATA_PQSC_REGISTER) or directly play a conditional pulse with executeTableEntry(ZSYNC_DATA_PQSC_REGISTER).

New behavior since LabOne 23.06

The register forwarding unit has been extended and it now supports forwarding of up to eight readout results, each made of up to two bits. This allows the system to perform active qubit/qutrit/ququad reset for each control channel on larger instruments like the SHFSG8 or SHFQC6. To enable that, three main aspects have been changed:

  • The register forward selector picks couples of bits instead of single bits. The index now refers to such couples and it’s equivalent to 2n bits. Allowed values are therefore from 0 to 7 instead of 0 to 15.

  • There are eight selectors instead of four.

  • The data from the register forwarding unit and the decoder unit are not multiplexed anymore. Therefore a port can exclusively send data from register forwarding or the error decoder.

The nodes

  • /DEV…​/ZSYNCS/n/OUTPUT/DECODER/ENABLE

  • /DEV…​/ZSYNCS/n/OUTPUT/REGISTERBANK/ENABLE

on the PQSC have been removed, and their functionality replaced by the nodes

  • /DEV…​/ZSYNCS/n/OUTPUT/ENABLE

  • /DEV…​/ZSYNCS/n/OUTPUT/SOURCE

The ENABLE node is used to enable feedback output on a given port, while the SOURCE node is used to select if a port should send data from the register forwarding unit or from the decoder unit.

Example

Like in the previous example, there are two QA channels writing their readout results in register 1 and 29 respectively. QA1 is configured such that two results (X and Y) are the output of Multi State Discrimination (MSD), so each is composed by two bits, while another (Z) is the result of regular discrimination, so it uses only one bit. The QA2 produces three results (I,J and K) from regular discrimination, so a total of three bits. The PQSC is configured to forward these results to two different instruments connected to the first two ZSync ports, as shown in Figure 1. A third instrument is configured to receive the output of the decoder unit. For clarity in this example, the register forwarding is sending only three results per port instead of the maximum of eight and the configuration of the decoder unit is omitted.

fig reg fwd overview 23 06 new
Figure 3. An example of register forwarding in the PQSC of LabOne 23.06 and above

To configure the PQSC as in Figure 3, its nodes should be programmed as in Table 3.

Table 3. Settings: PQSC register forwarding settings
Node Value

/DEV…​/ZSYNCS/0/OUTPUT/ENABLE

True

/DEV…​/ZSYNCS/0/OUTPUT/SOURCE

"reg"

/DEV…​/ZSYNCS/0/OUTPUT/REGISTERBANK/SOURCES/*/ENABLE

True

/DEV…​/ZSYNCS/0/OUTPUT/REGISTERBANK/SOURCES/1/REGISTER

29

/DEV…​/ZSYNCS/0/OUTPUT/REGISTERBANK/SOURCES/1/INDEX

4

/DEV…​/ZSYNCS/0/OUTPUT/REGISTERBANK/SOURCES/3/REGISTER

1

/DEV…​/ZSYNCS/0/OUTPUT/REGISTERBANK/SOURCES/3/INDEX

3

/DEV…​/ZSYNCS/0/OUTPUT/REGISTERBANK/SOURCES/6/REGISTER

1

/DEV…​/ZSYNCS/0/OUTPUT/REGISTERBANK/SOURCES/6/INDEX

5

/DEV…​/ZSYNCS/1/OUTPUT/ENABLE

True

/DEV…​/ZSYNCS/1/OUTPUT/SOURCE

"reg"

/DEV…​/ZSYNCS/1/OUTPUT/REGISTERBANK/SOURCES/*/ENABLE

True

/DEV…​/ZSYNCS/1/OUTPUT/REGISTERBANK/SOURCES/0/REGISTER

29

/DEV…​/ZSYNCS/1/OUTPUT/REGISTERBANK/SOURCES/0/INDEX

0

/DEV…​/ZSYNCS/1/OUTPUT/REGISTERBANK/SOURCES/4/REGISTER

1

/DEV…​/ZSYNCS/1/OUTPUT/REGISTERBANK/SOURCES/4/INDEX

6

/DEV…​/ZSYNCS/1/OUTPUT/REGISTERBANK/SOURCES/7/REGISTER

29

/DEV…​/ZSYNCS/1/OUTPUT/REGISTERBANK/SOURCES/7/INDEX

4

/DEV…​/ZSYNCS/2/OUTPUT/ENABLE

True

/DEV…​/ZSYNCS/2/OUTPUT/SOURCE

"decoder"

Like in the previous example, each sequencer in the instrument can reduce the message to the portion that is relevant for it by binary shift and masking. In Figure 4, there is an example of the flow of data of the SHFSG8 connected to the first ZSync port of the PQSC; it reset three qubits (channels 2 and 3) and one qutrit. Similarly, in Figure 5, the same goes for the SHFSG8 connected to the second ZSync port of the PQSC.

fig reg fwd shfsg1 processing 23 06 new
Figure 4. Feedback data flow in the first SHFSG8 doing active qubit and qutrit reset with LabOne 23.06 and above
fig reg fwd shfsg2 processing 23 06 new
Figure 5. Feedback data flow in the second SHFSG8 doing active qubit and qutrit reset with LabOne 23.06 and above

In order to enable such processing, the instrument nodes should be configured as in Table 4 and Table 5. It should be noted that the shift is still expressed in bits, not couples of bits like in the register selector of the PQSC. This allows for finer granularity in the selection of the interesting portion of the message. It also allows for the execution of feedback on a single bit, even if the PQSC register forwarding unit sent two bits, like in channel 2 and 3 of the first SHFSG.

Table 4. Settings: First SHFSG8 feedback processing settings in LabOne 23.06 and above
Node Value

/DEV…​/SGCHANNELS/2/AWG/ZSYNC/REGISTER/SHIFT

3

/DEV…​/SGCHANNELS/2/AWG/ZSYNC/REGISTER/MASK

0b1

/DEV…​/SGCHANNELS/3/AWG/ZSYNC/REGISTER/SHIFT

6

/DEV…​/SGCHANNELS/3/AWG/ZSYNC/REGISTER/MASK

0b1

/DEV…​/SGCHANNELS/4/AWG/ZSYNC/REGISTER/SHIFT

2

/DEV…​/SGCHANNELS/4/AWG/ZSYNC/REGISTER/MASK

0b1

/DEV…​/SGCHANNELS/6/AWG/ZSYNC/REGISTER/SHIFT

12

/DEV…​/SGCHANNELS/6/AWG/ZSYNC/REGISTER/MASK

0b11

Table 5. Settings: Second SHFSG8 feedback processing settings in LabOne 23.06 and above
Node Value

/DEV…​/SGCHANNELS/0/AWG/ZSYNC/REGISTER/SHIFT

8

/DEV…​/SGCHANNELS/0/AWG/ZSYNC/REGISTER/MASK

0b11

/DEV…​/SGCHANNELS/1/AWG/ZSYNC/REGISTER/SHIFT

14

/DEV…​/SGCHANNELS/1/AWG/ZSYNC/REGISTER/MASK

0b1

/DEV…​/SGCHANNELS/4/AWG/ZSYNC/REGISTER/SHIFT

1

/DEV…​/SGCHANNELS/4/AWG/ZSYNC/REGISTER/MASK

0b1

/DEV…​/SGCHANNELS/7/AWG/ZSYNC/REGISTER/SHIFT

15

/DEV…​/SGCHANNELS/7/AWG/ZSYNC/REGISTER/MASK

0b1

Like before, the sequencers can acquire their feedback in a variable with var feedback = getFeedback(ZSYNC_DATA_PQSC_REGISTER), or directly play a conditional pulse with executeTableEntry(ZSYNC_DATA_PQSC_REGISTER), so no changes there.