diff --git a/chapters/04-06-acq-pipeline-demo.md b/chapters/04-06-acq-pipeline-demo.md new file mode 100644 index 0000000..6d6ee91 --- /dev/null +++ b/chapters/04-06-acq-pipeline-demo.md @@ -0,0 +1,134 @@ +## 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, q1(bit0=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|使用参数组0(q0参数)| + +完整码字值:`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。 +``` diff --git a/chapters/05-07-exc-pipeline-demo.md b/chapters/05-07-exc-pipeline-demo.md new file mode 100644 index 0000000..32bfc8d --- /dev/null +++ b/chapters/05-07-exc-pipeline-demo.md @@ -0,0 +1,182 @@ +## 5.7. EXC-Pump通道全流程控制示例 + +本节通过一个完整的示例演示EXC-Pump通道从码字生成到激励信号与Pump信号输出的全流程编程控制。 +示例场景:输出一个6.7 GHz读出激励脉冲,同时触发Pump使能信号。 + +### 5.7.1. 流程总览 + +EXC-Pump通道全流程包含以下步骤: + +1. **加载波形数据** — 将波形采样点写入波形仓库 +2. **配置波形索引表** — 建立波形ID到地址/长度的映射 +3. **配置EXC寄存器** — 设置NCO参数、幅度、工作模式 +4. **配置上变频电路** — 设置混频板本振频率 +5. **配置Pump模拟电路** — 设置Pump频率、功率 +6. **生成并发送码字** — MCU发出波形触发码字 + Pump使能 +7. **输出激励信号与Pump脉冲** — 硬件执行,输出RF信号和使能脉冲 + +![EXC-Pump全流程控制](../assets/readout_ri.png) + +### 5.7.2. 步骤1:加载波形数据到波形仓库 + +将预计算的基带波形采样点写入波形仓库SRAM: + +|参数|值|说明| +|:-|:-|:-| +|基带频率|1.2 GHz|$F_s = 6.7 - 5.5$ GHz| +|采样率|4 GSps (FPGA)|16采样点/时钟周期| +|波形长度|256 采样点|16个时钟周期(FPGA),$256 \times 250\text{ps} = 64\text{ns}$| +|起始地址|`0x0000`|波形仓库中的偏移地址| + +波形采样点数据示例(16位有符号整数,大端字节序): + +``` +地址 0x0000: 0x0000, 0x0C8C, 0x18C8, 0x2400, ... (共256个采样点) +``` + +``` +ASIC平台下每个时钟周期对应8个采样点,采样点个数需为8的整数倍。 +FPGA平台下每个时钟周期对应16个采样点,采样点个数需为16的整数倍。 +波形仓库总容量128 KB,FPGA平台最大支持16 μs输出,ASIC平台最大支持10 μs输出。 +``` + +### 5.7.3. 步骤2:配置波形索引表 + +在波形索引表(LUT)中建立波形ID到波形参数的映射: + +|波形ID (WAVE_ID)|addr (高16位)|len (低16位)|说明| +|:-|:-|:-|:-| +|0|`0x0000`|`0x0010`|起始地址0x0000,长度16个时钟周期| +|1|`0x0010`|`0x0008`|起始地址0x0010,长度8个时钟周期| + +``` +波形索引表深度256条(1 kB),每条目录宽32位。 +addr 和 len 均以时钟周期为单位。 +通过切换 WAVE_ID 可以在不同波形之间快速切换。 +``` + +### 5.7.4. 步骤3:配置EXC寄存器 + +配置AWG模块寄存器(通过SPI或MCU写入): + +|寄存器|值|说明| +|:-|:-|:-| +|`amplitude`|`acw = 8192`|归一化幅度 $8192 / 2^{16} \approx 0.125$| +|`frequency`|`fcw = 0`|NCO频率控制字(基带直出模式NCO不生效)| +|`phase`|`pcw = 0`|NCO相位控制字(基带直出模式不生效)| +|`function`|`0x0` (INTP_SEL=0, MIX_MODE=0, AWG_MODE=00)|基带直出模式(NRZ)| + +``` +function 寄存器模式选择: + [3] INTP_SEL=0: 邻近插值(FPGA平台仅支持此模式) + [2] MIX_MODE=0: 基带模式(使用外部模拟混频) + [1:0] AWG_MODE=00: 直出模式(原始波形不经调制) +``` + +若需要使用正交调制模式(扫频应用),配置如下: + +|寄存器|值|说明| +|:-|:-|:-| +|`amplitude`|`acw = 16384`|归一化幅度 0.25| +|`frequency`|`fcw` = $F_{mod} / F_s \times 2^{32}$|调制频率控制字| +|`phase`|`pcw = 0`|初始相位 0| +|`function`|`0x1` (INTP_SEL=0, MIX_MODE=0, AWG_MODE=01)|正交调制模式| + +### 5.7.5. 步骤4:配置上变频电路 + +设置混频板本振频率: + +|配置项|值|说明| +|:-|:-|:-| +|lo_freq|5_500_000|本振频率 5.5 GHz,单位 kHz| + +``` +同一个混频板上4个通道共享同一个本振信号。 +输出频率 = 基带频率 + 本振频率。 +本例: 1.2 GHz + 5.5 GHz = 6.7 GHz。 +``` + +### 5.7.6. 步骤5:配置Pump模拟电路 + +配置Pump通道输出参数: + +|配置项|值|说明| +|:-|:-|:-| +|pump_freq|7_800_000|Pump信号频率 7.8 GHz,单位 kHz| +|pump_power|-600|Pump信号功率(具体映射关系取决于硬件校准)| +|pump_enable|0x11|Pump输出使能(需先配置再使能,否则输出无效)| + +``` +Pump信号为连续波单音信号,其开关由MCU码字的PUMP_EN比特实时控制。 +pump_enable = 0x11 为硬件级使能,配置后方可响应PUMP_EN码字位。 +pump_enable = 0x00 时,无论码字如何设置,Pump均无输出。 +``` + +### 5.7.7. 步骤6:生成并发送码字 + +MCU生成码字,同时触发波形输出和Pump脉冲: + +**场景A:同时输出波形和Pump脉冲** + +|码字位段|字段名|配置值|说明| +|:-|:-|:-|:-| +|[12]|PULSE_ONLY|0|正常输出波形| +|[11]|PARAMETER_SEL|0|波形索引来自查找表(WAVE_ID)| +|[10]|NCO_CLR_EN|0|不复位NCO| +|[9]|MARK_EN|0|不触发Marker脉冲| +|[8]|PUMP_EN|1|触发Pump脉冲输出| +|[7:0]|WAVE_ID|0|索引波形ID=0(16个时钟周期的读出脉冲)| + +完整码字值:`0x0100` + +**场景B:仅输出Pump脉冲(不输出波形)** + +|码字位段|字段名|配置值|说明| +|:-|:-|:-|:-| +|[12]|PULSE_ONLY|1|禁用波形输出| +|[11:9]|-|0|—| +|[8]|PUMP_EN|1|触发Pump脉冲输出| +|[7:0]|WAVE_ID|0|波形索引(PULSE_ONLY=1时被忽略)| + +完整码字值:`0x1100` + +``` +PUMP_EN 触发后,Pump使能脉冲由 pump_ctrl 寄存器的延迟和持续参数控制: + - 高16位(延迟): 脉冲在码字解码后延迟N个时钟周期开始 + - 低16位(持续): 脉冲持续M个时钟周期 +将延迟和持续设为相同值可实现"跟随波形长度"的效果。 +``` + +### 5.7.8. 步骤7:硬件执行与输出 + +码字解码后,硬件按以下流水线执行: + +1. **T0**: MCU 发出码字 `0x0100` +2. **T0 + 1 cycle**: 码字解码 — WAVE_ID=0 索引波形索引表 → 获取 addr=0x0000, len=16 +3. **T0 + 2 cycle**: 波形仓库从 addr=0x0000 开始读取,持续 len=16 个时钟周期 +4. **T0 + 2~17 cycles**: 原始波形数据流经模式选择器(直出模式,旁路希尔伯特和NCO) +5. **T0 + 3 cycle**: 幅度调制 → 半带插值(FPGA旁路)→ MIX模块(基带模式旁路)→ DAC +6. **T0 + 4 cycle**: Pump脉冲开始输出(假设pump_ctrl延迟=2) +7. **T0 + 18 cycle**: 波形输出完成 +8. **T0 + 20 cycle**: Pump脉冲结束(假设pump_ctrl持续=16) + +最终射频输出:基带波形经DAC转换后通过混频板与本振(5.5 GHz)模拟混频,产生6.7 GHz读出激励信号。 + +### 5.7.9. 时序图 + +``` +CLK : _/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_ +码字 : ___/────────‾‾‾‾‾‾‾‾\_______________________________________________ +WAVE_ID: ___/────0────\_____________________________________________________ +波形输出: _____________/─────── 16 cycles 波形 ──────\_______________________ +Pump脉冲: ______________________/─ delay ─\_________/─ 持续 ─\_____________ +RF_OUT : _______________________/──── 6.7 GHz 激励脉冲 ────\________________ +``` + +``` +注意事项: +1. Pump使能脉冲的延迟参数需确保与波形输出上升沿对齐。 +2. 多个码字连续发送时,需确保前一码字的波形输出完成后再发下一码字, + 否则波形索引表可能被覆盖导致输出异常。 +3. 调试阶段建议使用 MARK_EN 触发Marker脉冲来辅助示波器触发捕获。 +```