qrm_seq0.q1asm#

qrm_seq0.q1asm#
 1    .DEF  T_TOTAL            {T_TOTAL}
 2    .DEF  START_ALIGN        {START_ALIGN}
 3
 4    .DEF  TRIG_HIGH          20
 5    .DEF  TRIG_LOW           4
 6    .DEF  TRIG_MRK_MASK      1
 7
 8    .DEF  CURSOR_DUR         {CURSOR_DUR} # ns, visible cursor pulse width
 9    .DEF  ACQ_DUR            {ACQ_DUR}
10    .DEF  CURSOR_W0          0            # square waveform index on path 0
11    .DEF  CURSOR_W1          0            # unused (gain=0)
12
13    .DEF  DELAY_ID           {DELAY_ID}
14    .DEF  GAIN_ID            {GAIN_ID}
15
16    .DEF  INIT_MEAS_DELAY    {INIT_MEAS_DELAY}
17    .DEF  INIT_CURSOR_GAIN   12000       # visible initial cursor height
18    .DEF  POST_MULTICAST     {POST_MULTICAST}
19    .DEF  TIME_OF_FLIGHT     {TIME_OF_FLIGHT}
20    .DEF  MIN_CURSOR_DELAY   4
21
22    .DEF  ZERO                R0
23    .DEF  MEAS_DELAY          R1
24    .DEF  CURSOR_GAIN         R2
25    .DEF  WAIT_FOR_MULTICAST  R3
26    .DEF  CURSOR_DELAY        R4
27
28
29    ## --- init ---
30    wait_sync 4
31
32    move  0,  $ZERO
33    move  $INIT_MEAS_DELAY,  $MEAS_DELAY
34    move  $INIT_CURSOR_GAIN, $CURSOR_GAIN
35
36    wait $START_ALIGN
37
38    shot_loop:
39        wait_trigger    1, 8 # marker M1, timeout 8 ns (minimum is 8 ns)
40
41        move $MEAS_DELAY, $CURSOR_DELAY
42        nop
43        jlt $CURSOR_DELAY, $TIME_OF_FLIGHT, @tof_under
44        nop
45        sub $CURSOR_DELAY, $TIME_OF_FLIGHT, $CURSOR_DELAY
46        jmp @tof_ok
47        nop
48    tof_under:
49        nop
50        move $MIN_CURSOR_DELAY, $CURSOR_DELAY
51    tof_ok:
52        nop
53
54        ## Compute WAIT_FOR_MULTICAST = T_TOTAL - trigger - MEAS_DELAY - ACQ_DUR - CURSOR_DUR - POST_MULTICAST
55        move  $T_TOTAL, $WAIT_FOR_MULTICAST
56        nop
57        sub   $WAIT_FOR_MULTICAST, $TRIG_HIGH,  $WAIT_FOR_MULTICAST
58        nop
59        sub   $WAIT_FOR_MULTICAST, $TRIG_LOW,   $WAIT_FOR_MULTICAST
60        nop
61        sub   $WAIT_FOR_MULTICAST, $CURSOR_DELAY, $WAIT_FOR_MULTICAST
62        nop
63        sub   $WAIT_FOR_MULTICAST, $ACQ_DUR, $WAIT_FOR_MULTICAST
64        nop
65        sub   $WAIT_FOR_MULTICAST, $CURSOR_DUR, $WAIT_FOR_MULTICAST
66        nop
67        sub   $WAIT_FOR_MULTICAST, $POST_MULTICAST, $WAIT_FOR_MULTICAST
68
69        ## Trigger marker pulse
70        set_mrk    $TRIG_MRK_MASK
71        upd_param  $TRIG_HIGH
72        set_mrk    0
73        upd_param  $TRIG_LOW
74
75        wait  $CURSOR_DELAY # cannot be upd_param
76        wait  $ACQ_DUR
77
78        ## set_awg_gain is latched; play updates/commits it and starts playback.
79        set_awg_gain  $CURSOR_GAIN, $ZERO
80        play          $CURSOR_W0, $CURSOR_W1, $CURSOR_DUR # square wave, zero, duration
81
82        ## fetch NEXT-shot MEAS_DELAY and CURSOR_GAIN
83        wait $WAIT_FOR_MULTICAST
84        fb_pop_data  $DELAY_ID, $MEAS_DELAY # get next delay
85        fb_pop_data  $GAIN_ID,  $CURSOR_GAIN # get next gain
86
87        wait  $POST_MULTICAST
88        jmp  @shot_loop
89    stop