qrm_seq1.q1asm#

qrm_seq1.q1asm#
 1    .DEF  T_TOTAL         {T_TOTAL}
 2    .DEF  TRIG_HIGH       20
 3    .DEF  TRIG_LOW        4
 4    .DEF  TRIG_MRK_MASK   1 # 0b0001 -> marker M1 high
 5
 6    .DEF  ACQ_INDEX       0
 7    .DEF  ACQ_DUR         {ACQ_DUR}     # ns, RT duration of the acquire instruction
 8    .DEF  MEAS_DELTA      {MEAS_DELTA}  # ns, separation between the two sample points
 9
10    .DEF  IQ_ID           {IQ_ID}            # LINQ id for IQ streaming
11    .DEF  IQ_SHIFT        {IQ_SHIFT}         # right-shift IQ before sending (tune for your signal)
12    .DEF  FB_CFG_WAIT     {FB_CFG_WAIT}      # ns, RT wait inside fb_acq_* config
13
14    .DEF  DELAY_ID        40            # QCM brain -> QRM: MEAS_DELAY
15    .DEF  GAIN_ID         41            # QCM brain -> QRM: CURSOR_GAIN
16
17    .DEF  INIT_MEAS_DELAY {INIT_MEAS_DELAY}           # initial guess (ns)
18    .DEF  POST_MULTICAST  {POST_MULTICAST}
19
20    .DEF  ZERO                R0
21    .DEF  MEAS_DELAY          R1
22    .DEF  DUMMY               R2            # to drain the queue
23    .DEF  WAIT_FOR_MULTICAST  R3
24    .DEF  START_ALIGN         R4
25
26    ## --- init ---
27    wait_sync 4
28
29    move  0,  $ZERO                     # ZERO = 0
30    move  $INIT_MEAS_DELAY, $MEAS_DELAY # MEAS_DELAY = INIT_MEAS_DELAY
31    move  0,  $DUMMY                    # DUMMY_GAIN = 0
32
33    ## Enable IQ streaming over LINQ for every acquisition that follows.
34    fb_acq_iq_id     $IQ_ID,    $FB_CFG_WAIT # IQ_ID=36, wait 8 ns
35    fb_acq_iq_shift  $IQ_SHIFT, $FB_CFG_WAIT # right-shift IQ values (reduce resolution), wait 8 ns
36
37    ## Wait for START_ALIGN, including the fb_commands
38    move {START_ALIGN}, $START_ALIGN
39    sub $START_ALIGN, $FB_CFG_WAIT, $START_ALIGN
40    nop
41    sub $START_ALIGN, $FB_CFG_WAIT, $START_ALIGN
42    nop
43
44    shot_loop:
45        wait_trigger    1, 8 # marker M1, timeout 8 ns (minimum is 8 ns)
46        ## Compute WAIT_FOR_MULTICAST = T_TOTAL - trigger - ...
47        ## MEAS_DELAY - ACQ1 - MEAS_DELTA - ACQ2 - POST_MULTICAST
48        move  $T_TOTAL, $WAIT_FOR_MULTICAST
49        nop
50        sub   $WAIT_FOR_MULTICAST, $TRIG_HIGH, $WAIT_FOR_MULTICAST
51        nop
52        sub   $WAIT_FOR_MULTICAST, $TRIG_LOW,  $WAIT_FOR_MULTICAST
53        nop
54        sub   $WAIT_FOR_MULTICAST, $MEAS_DELAY, $WAIT_FOR_MULTICAST
55        nop
56        sub   $WAIT_FOR_MULTICAST, $ACQ_DUR, $WAIT_FOR_MULTICAST
57        nop
58        sub   $WAIT_FOR_MULTICAST, $MEAS_DELTA, $WAIT_FOR_MULTICAST
59        nop
60        sub   $WAIT_FOR_MULTICAST, $ACQ_DUR, $WAIT_FOR_MULTICAST
61        nop
62        sub   $WAIT_FOR_MULTICAST, $POST_MULTICAST, $WAIT_FOR_MULTICAST
63
64        ## Shot trigger marker pulse
65        set_mrk    $TRIG_MRK_MASK # 0b0001 -> marker M1 high
66        upd_param  $TRIG_HIGH     # wait 20 ns
67        set_mrk    0              # Marker low
68        upd_param  $TRIG_LOW      # wait 4 ns
69
70        wait  $MEAS_DELAY
71
72        acquire  $ACQ_INDEX, 0, $ACQ_DUR  # (I1/Q1 will be sent with id IQ_ID)
73        wait  $MEAS_DELTA
74        acquire  $ACQ_INDEX, 1, $ACQ_DUR
75
76        wait  $WAIT_FOR_MULTICAST # this was not here
77        fb_pop_data  $DELAY_ID, $MEAS_DELAY # id, data; I. get next delay
78        fb_pop_data  $GAIN_ID,  $DUMMY # id, data; Q. get next gain; not used
79
80        wait  $POST_MULTICAST 
81        jmp   @shot_loop
82    stop