readout_program/chapters/04-06-acq-pipeline-demo.md

135 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 4.6. ACQ通道全流程控制示例
本节通过一个完整的示例演示ACQ通道从码字生成到采集数据获取的全流程编程控制。
示例场景对2个量子比特q0, q1执行单次读出采集解模IQ数据。
### 4.6.1. 流程总览
ACQ通道读出全流程包含以下步骤
1. **配置模拟前端** — 设置下变频本振频率
2. **加载解模参数** — 配置匹配滤波器权重和DDS参数查找表
3. **配置ACQ寄存器** — 设置解模频率/相位/缩放等控制参数
4. **生成并发送码字** — MCU发出采集触发码字
5. **接收处理数据** — 固件打包上传上位机解帧获取IQ数据
![ACQ全流程控制](../assets/readout_ro.png)
### 4.6.2. 步骤1配置模拟前端
配置混频板下变频本振频率,将射频信号转换到中频:
|配置项|值|说明|
|:-|:-|:-|
|lo_freq|5_500_000|本振频率 5.5 GHz单位 kHz|
```
本振频率需根据目标量子比特频率确定。
例如量子比特频率为 6.7 GHz则下变频后中频为 1.2 GHz。
```
### 4.6.3. 步骤2加载解模参数
将解模参数匹配滤波器权重、DDS频率/相位控制字)写入参数查找表。
本例配置2组参数对应2个量子比特
**权重数据(匹配滤波器系数)**
|参数索引|目标比特|权重长度|iw示例 |qw示例 |
|:-|:-|:-|:-|:-|
|0|q0|128 采样点|`cos(ω·t)` 包络采样|`sin(ω·t)` 包络采样|
|1|q1|128 采样点|`cos(ω·t)` 包络采样|`sin(ω·t)` 包络采样|
**DDS参数频率/相位控制字)**
|参数索引|fcw (频率控制字)|pcw (相位控制字)|scale|
|:-|:-|:-|:-|
|0|`fcw_q0` = $F_{if} / F_s \times 2^{32}$|0|1|
|1|`fcw_q1` = $F_{if} / F_s \times 2^{32}$|0|1|
```
参数查找表共支持16组参数PARA_ID = 0~15
每组包含独立的权重系数和DDS参数。
MCU可通过修改PARA_ID在运行时快速切换目标比特。
```
### 4.6.4. 步骤3配置ACQ寄存器
配置解模相关寄存器通过SPI或MCU写入
|寄存器|值|说明|
|:-|:-|:-|
|`demod_len`|128|解模采样点数,与权重长度一致|
|`result_scale`|1|解模结果缩放因子1 或 16|
|`dds_fcw`|`fcw_q0`|初始DDS频率控制字可通过查找表覆盖|
|`dds_pcw`|0|初始DDS相位控制字可通过查找表覆盖|
```
当码字中 DDS_FPW_SEL = 0查找表模式
实际解模参数由 PARA_ID 索引的查找表决定,
寄存器中的初始值作为 fallback。
```
### 4.6.5. 步骤4生成并发送码字
MCU生成32位ACQ码字触发一次完整的读出采集
|码字位段|字段名|配置值|说明|
|:-|:-|:-|:-|
|[31:16]|QUBIT_EN|`0x0003`|使能 q0, q1bit0=1, bit1=1|
|[15]|COUNT_SAVE_EN|0|不存储态计数|
|[14]|STATE_SAVE_EN|0|不存储态数据|
|[13]|IQ_SAVE_EN|1|存储解模IQ数据|
|[12]|WAVE_SAVE_EN|0|不存储原始波形|
|[11]|MTF_IDX_SEL|0|匹配滤波器参数来自查找表|
|[10]|DDS_FPW_SEL|0|DDS参数来自查找表|
|[9]|STATE_CLR_VAL|0|不清理态计数|
|[8]|DEMOD_CLR_VAL|0|不清理解模求和|
|[7:4]|FB/STATE/SUM|0|不触发反馈/态统计/求和|
|[3:0]|PARA_ID|0|使用参数组0q0参数|
完整码字值:`0x0003_2000`
```
上述码字使能了 q0 和 q1 同时解模并仅存储 IQ 数据。
若需对不同比特使用不同参数,需发送多个码字并切换 PARA_ID。
例如:
码字1: PARA_ID=0, QUBIT_EN=q0 → 使用参数组0读出q0
码字2: PARA_ID=1, QUBIT_EN=q1 → 使用参数组1读出q1
```
### 4.6.6. 步骤5接收处理数据
ACQ通道完成采集后将数据打包成帧通过`rslt_push`接口推送上位机。
上位机驱动解帧后按流模式返回:
**IQ数据帧格式**
|字节偏移|字段|长度|格式|
|:-|:-|:-|:-|
|0|I (q0)|4 字节|32位有符号整数大端|
|4|Q (q0)|4 字节|32位有符号整数大端|
|8|I (q1)|4 字节|32位有符号整数大端|
|12|Q (q1)|4 字节|32位有符号整数大端|
```
若码字同时使能多种数据存储,帧内数据按以下顺序排列:
波形数据 → 解模IQ数据 → 态判断数据 → 态计数数据
推荐每次仅使能一种数据类型以简化上位机解析。
```
### 4.6.7. 时序总结
单次ACQ读出的完整时序
1. **T0**: MCU 发出32位码字 `0x0003_2000`
2. **T0 + 1 cycle**: 码字解码,使能 q0, q1 的解模通路
3. **T0 + 2~129 cycles**: ADC采集128个采样点并行送入匹配滤波器
4. **T0 + 130 cycle**: 解模完成IQ数据写入结果缓存
5. **T0 + 131 cycle**: 数据打包,通过 `rslt_push` 推送上位机
```
实际解模时间取决于使能比特中最长的解模长度。
若 q0 解模128点、q1 解模256点则解模耗时 = 256 cycles。
```