readout_program/chapters/81-appendix-troubleshooting.md

111 lines
6.1 KiB
Markdown
Raw Permalink 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.

# 附录B. 故障排查
本附录汇总了读出子系统编程中的常见问题、可能原因及排查步骤。
## B.1. 解模结果异常
### B.1.1. 解模 IQ 数据全为零
| 可能原因 | 排查步骤 |
|:---|:---|
| 本振频率未配置或配置错误 | 检查混频板 `lo_freq` 寄存器(`0x00100000`)是否正确写入 |
| 码字未使能解模功能 | 检查码字 `DEMOD_SUM_VAL`bit[4])是否为 1 |
| 匹配滤波器参数未加载 | 检查 DAQ_PAR 中目标 PARA_ID 对应的 `dds_fpw``mtf_idx` 是否已正确写入 |
| `IQ_SCALE` 选择不当导致截位全零 | 尝试切换 `IQ_SCALE` 位(见 [§4.3 参数选择指南](04-03-acq-registers.md)),观察是否有非零输出 |
| DAQ_REG 寄存器未复位 | 执行软复位后重新加载配置(见 [§B.4](#b4-软复位) |
| 输入信号功率过低 | 检查射频线缆连接,确认混频板输入端有信号 |
### B.1.2. 解模 IQ 数据幅值异常(过大或过小)
| 可能原因 | 排查步骤 |
|:---|:---|
| 解模频率与输入信号频率不匹配 | 验证 `dds_fpw.fcw` 计算公式:$F_c = fcw / 2^{20} \times F_s$,确保 $F_c$ 等于输入中频 $F_{IF}$ |
| 权重系数幅度不合理 | 检查 DAQ_PAR 权重区数据,权重系数为 8 位有符号数(范围 -128~127 |
| `IQ_SCALE` 位置不当 | 幅值过大时切到 `IQ_SCALE=1`(截高位),过小时切到 `IQ_SCALE=0` |
| `STEP_CTRL` 不匹配 | 若 `STEP_CTRL` 过大导致权重点稀疏,解模 SNR 下降,表现为幅值抖动增大 |
### B.1.3. FPGA 平台解模结果与 ASIC 平台不一致
| 可能原因 | 排查步骤 |
|:---|:---|
| 系数直读模式 vs 计算模式的固有差异 | 验证两个平台使用相同的权重数据和频率参数 |
| DAQ_FLT 系数计算方式错误 | FPGA 平台需预计算 I/Q 系数(见 [§4.4.3](04-04-acq-matched-filter.md)),检查系数是否按公式 $\text{Weight}[n] \times e^{j\omega n}$ 生成 |
| 采样点/时钟周期差异 | FPGA 每周期 16 采样点ASIC 每周期 8 采样点,确保 `mtf_idx.addr``mtf_idx.len` 单位一致 |
## B.2. 态判断异常
### B.2.1. 频繁出现错误态(态值 = 3
| 可能原因 | 排查步骤 |
|:---|:---|
| 三条直线不交于同一点 | 检查 line0/line1/line2 的系数a, b, c是否满足共点条件。若仅需两态判断设置 `TWO_STA_EN=1` |
| IQ 平面分布漂移 | 量子比特状态分布可能随时间漂移,需重新校准直线方程系数 |
| 解模 IQ 数据 SNR 不足 | 检查权重设计是否合理、解模长度是否足够(见 [§B.1.2](#b12-解模-iq-数据幅值异常过大或过小) |
### B.2.2. 两态模式下态值始终为 0 或 1
| 可能原因 | 排查步骤 |
|:---|:---|
| 直线方程系数未校准 | line0 的 (a, b, c) 需通过校准实验确定,不能使用默认值 0 |
| `TWO_STA_EN` 未正确设置 | 确认 `func_ctrl` 寄存器 bit[2] 为 1 |
## B.3. MCU 与触发问题
### B.3.1. MCU 程序不生效(无输出、无数据)
| 可能原因 | 排查步骤 |
|:---|:---|
| MCU 程序未正确加载 | 验证 MCU_INS 基地址ACQ: `0x00200000`, EXC: `0x00700000`)已写入正确的指令序列 |
| 触发信号未到达 | 确认外部触发源已正确连接和使能。MCU 是被动响应方——无触发则无执行 |
| 码字位段值错误 | 逐位检查码字定义ACQ: 32 位EXC: 低 13 位),确保关键使能位(如 `DEMOD_SUM_VAL`、`PUMP_EN`)正确设置 |
| 软复位未执行 | 异常中断后需先执行软复位(见 [§B.4](#b4-软复位)),再加载 MCU 程序 |
| 寄存器配置未在触发前完成 | SPI 配置和 MCU 程序加载存在时序要求——配置必须在触发到达前完成(见 [§4.6.1](04-06-acq-pipeline-demo.md) / [§5.7.1](05-07-exc-pipeline-demo.md) 流程表) |
### B.3.2. MCU 执行正常但数据推送异常
| 可能原因 | 排查步骤 |
|:---|:---|
| 码字使能了多种存储类型 | 同时使能多种存储导致数据帧变长、解析复杂。建议仅使能一种存储类型进行调试 |
| 数据帧解析顺序错误 | 多 qubit + 多存储类型时,确认帧内数据顺序(波形 → IQ → 态 → 计数)与码字使能位一致 |
## B.4. 软复位
ACQ 和 EXC-Pump 通道均提供软复位功能,用于从上位机强制中断或 MCU 错误指令导致的异常状态中恢复。
| 通道 | 复位方式 | 复位范围 |
|:---|:---|:---|
| ACQ | 调用驱动 API 复位函数 | 状态机 + 部分寄存器默认值(详见 IDS 表中各寄存器的复位值列) |
| EXC-Pump | 调用驱动 API 复位函数 | 状态机 + 部分寄存器默认值(详见 IDS 表中各寄存器的复位值列) |
**复位后恢复流程**
1. 执行软复位
2. 验证关键寄存器值是否正确
3. 重新加载 MCU 程序
4. 发送测试触发,验证数据通路正常工作
> **注意**:软复位不会恢复所有寄存器到上电默认值。对于被复位的寄存器,需在复位后重新配置。建议在每次软复位后执行完整的初始化序列。
## B.5. Pump 通道问题
### B.5.1. Pump 无输出
| 可能原因 | 排查步骤 |
|:---|:---|
| 硬件使能未打开 | 检查 `pump_enable` 寄存器是否为 `32'h11``32'h00` 时完全关闭) |
| MCU 码字 `PUMP_EN` 位未置 1 | 检查码字 bit[8] 是否为 1 |
| `pump_ctrl` 配置不当 | 检查 `delay``width` 参数,确保 width > 0 且 delay 不过大 |
| `pump_freq``pump_power` 未配置 | 这两个寄存器需要在 Pump 触发前通过 SPI 写入有效值 |
## B.6. 数据帧解析
### B.6.1. 数据帧解析错位
| 可能原因 | 排查步骤 |
|:---|:---|
| 码字使能的存储类型与解析代码不匹配 | 确保解析代码的数据类型顺序与码字使能位WAVE→IQ→STATE→COUNT一致 |
| 多 qubit 数据顺序混淆 | IQ 数据按 qubit 序号从小到大排列q0 → q1 → ... → q15验证解析代码的偏移计算 |
| 字节序错误 | 所有数据采用大端字节序Big-Endian确认解析代码的字节序设置正确 |
| 帧头/帧尾未正确识别 | 确认上位机驱动解帧逻辑与硬件推送的帧格式一致 |
**调试方法**:先使能单一存储类型 + 单 qubit 确认帧格式,再逐步增加复杂度。