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