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