readout_program/chapters/05-07-exc-pipeline-demo.md

163 lines
6.4 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.

## 5.7. EXC-Pump通道全流程控制示例
本节通过一个完整的端到端示例说明EXC-Pump通道的编程配置流程。
示例基于 **ASIC 平台**(DAC 8 bit@6 Gsps,8 采样点/时钟周期),场景为输出一个 6.7 GHz 读出激励脉冲,同时触发 Pump 使能信号。
### 5.7.1. 端到端配置流程
EXC-Pump通道的工作流程如下:
|阶段|操作|说明|
|:-|:-|:-|
|初始化|加载波形数据、配置索引表、配置寄存器、配置上变频、配置Pump|通过SPI写入,步骤1~5无先后顺序要求|
|初始化|加载MCU程序|写入MCU_INS,定义触发后要发出的码字|
|运行|外部触发 → MCU执行 → 产生码字|触发由其它硬件发出,MCU响应后执行程序并生成13位码字|
|运行|码字解码 → 波形输出 + Pump脉冲|硬件自动流水线执行,输出RF信号和使能脉冲|
```
关键理解:
触发信号来自外部硬件(非MCU),MCU是被动响应方。
MCU 程序加载到 MCU_INS 后处于待命状态,收到触发后执行并生成码字。
初始化配置可在任意时刻通过 SPI 完成,只需在触发前生效即可。
```
### 5.7.2. 地址空间速查
以下配置基于EXC通道0(Exaddr=0),各模块基地址如下(完整地址映射见 [附录A.1.2](#a12-exc)):
|模块|基地址|用途|
|:-|:-|:-|
|MCU_INS|`0x00700000`|MCU指令存储|
|MCU_DAT|`0x00800000`|MCU数据存储|
|AWG_REG|`0x00900000`|AWG控制寄存器|
|AWG_IDX|`0x00A00000`|波形索引表(256条 × 32位)|
|AWG_WVE|`0x00B00000`|波形仓库(128 KB)|
|MIXER_REG|`0x00100000`|混频板本振配置|
|PUMP_REG|`0x00000000`|Pump通道寄存器(ch0基址)|
### 5.7.3. 步骤1:加载波形数据
将预计算的基带波形采样点写入 AWG_WVE:
|参数|值|说明|
|:-|:-|:-|
|基带频率|1.2 GHz|$F_{baseband} = 6.7 - 5.5$ GHz|
|波形长度|256 采样点|ASIC: 32 cycles × 8 samples/cycle|
|写入地址|`0x00B00000` 起|AWG_WVE 基地址,连续写入 256 × 16 bit|
```
ASIC 平台每时钟周期 8 个采样点(6 Gsps),采样点个数需为 8 的整数倍。
FPGA 平台每时钟周期 16 个采样点(4 Gsps),采样点个数需为 16 的整数倍。
每个采样点为 16 位有符号整数(二进制补码),大端字节序。
波形仓库总容量 128 KB。
```
### 5.7.4. 步骤2:配置波形索引表
在 AWG_IDX 中建立波形ID到存储参数的映射(深度256条,每条32位):
|WAVE_ID|AWG_IDX地址|addr [31:16]|len [15:0]|说明|
|:-|:-|:-|:-|:-|
|0|`0x00A00000`|`0x0000`|`0x0020`|起始地址 0x0000,长度 32 cycles|
|1|`0x00A00004`|`0x0020`|`0x0010`|起始地址 0x0020,长度 16 cycles|
```
addr 和 len 均以时钟周期为单位。
AWG_IDX 每条目占用 4 字节,WAVE_ID=N 的地址 = 0x00A00000 + N × 4。
```
### 5.7.5. 步骤3:配置EXC寄存器
通过SPI写AWG控制寄存器(基带直出NRZ模式):
|地址|寄存器|字段|值|说明|
|:-|:-|:-|:-|:-|
|`0x00900034`|amplitude|acw [31:16]|`16384`|归一化幅度 $16384 / 2^{14} = 1$|
|`0x00900038`|frequency|fcw [31:0]|`0`|基带直出模式NCO不生效|
|`0x0090003C`|phase|pcw [31:16]|`0`|基带直出模式NCO不生效|
|`0x00900044`|func_ctrl|awg_mode [1:0]|`0`(直出)|原始波形不经调制|
|`0x00900044`|func_ctrl|mix_mode [2]|`0`(基带)|使用外部模拟混频|
|`0x00900044`|func_ctrl|intp_sel [3]|`0`(邻近插值)|ASIC 可设为 `1` 使用半带插值优化平坦度|
|`0x00900048`|pump_ctrl|delay [31:16]|`2`|Pump 脉冲延迟(单位时钟周期)|
|`0x00900048`|pump_ctrl|width [15:0]|`32`|Pump 脉冲持续宽度(与波形长度对齐)|
> 若需正交调制模式(如扫频应用),将 `awg_mode` 设为 `1`(调制),并配置 `frequency` 和 `phase`。详见 [§5.2](#52-寄存器功能定义)。
### 5.7.6. 步骤4:配置上变频
通过SPI写混频板本振频率寄存器:
|地址|寄存器|字段|值|说明|
|:-|:-|:-|:-|:-|
|`0x00100000`|lo_freq|fcw [31:0]|`5_500_000`|本振 5.5 GHz,单位 kHz|
同一混频板4个通道共享本振。输出频率 = 基带频率 + 本振频率 = 6.7 GHz。
### 5.7.7. 步骤5:配置Pump
配置泵浦板寄存器(ch0基址 `0x00000000`):
|地址|寄存器|字段|值|说明|
|:-|:-|:-|:-|:-|
|`0x00200000`|pump_freq|pump_freq [31:0]|`7_800_000`|Pump 频率 7.8 GHz,单位 kHz|
|`0x00300000`|pump_power|pump_power [31:0]|`-600`|功率设定(具体映射取决于硬件校准)|
|`0x00400000`|pump_enable|pump_enable [31:0]|`32'h11`|硬件级使能(`32'h00` = 关闭)|
```
pump_enable = 32'h11 为硬件级使能,配置后方可响应码字 PUMP_EN 位。
pump_enable = 32'h00 时,无论码字如何设置,Pump 均无输出。
```
### 5.7.8. 步骤6:MCU程序与触发
MCU程序加载到 MCU_INS(`0x00700000`),触发后MCU执行程序并生成13位码字。
**触发信号由外部硬件发出**,MCU响应后自动执行。
**场景A:同时输出波形和Pump脉冲**
|位段|字段名|值|说明|
|:-|:-|:-|:-|
|[12]|PULSE_ONLY|`0`|正常输出波形|
|[11]|PARAMETER_SEL|`0`|波形索引来自查找表|
|[10]|NCO_CLR_EN|`0`|不复位NCO|
|[9]|MARK_EN|`0`|不触发Marker|
|[8]|PUMP_EN|`1`|触发Pump脉冲|
|[7:0]|WAVE_ID|`0`|索引波形ID=0(32 cycles 读出脉冲)|
完整码字值:**`0x0100`**
**场景B:仅输出Pump脉冲(无波形)**
|位段|字段名|值|说明|
|:-|:-|:-|:-|
|[12]|PULSE_ONLY|`1`|禁用波形输出|
|[11:9]|—|`0`|—|
|[8]|PUMP_EN|`1`|触发Pump脉冲|
|[7:0]|WAVE_ID|`0`|被忽略(PULSE_ONLY=1)|
完整码字值:**`0x1100`**
```
注意事项:
1. 连续触发时需确保前一码字的波形输出完成,否则波形索引表可能被覆盖。
2. 调试阶段建议使用 MARK_EN 触发Marker脉冲辅助示波器触发捕获。
3. 码字字段定义详见 [§5.1](#51-码字功能定义),具体 MCU 指令编程参见《量子编程指令集》。
```
### 5.7.9. 配置清单汇总
|步骤|地址|寄存器|关键字段|值|
|:-|:-|:-|:-|:-|
|1|`0x00B00000`|AWG_WVE|波形采样点|256 × 16 bit|
|2|`0x00A00000`|AWG_IDX[0]|addr / len|`0x0000` / `0x0020`|
|3|`0x00900034`|amplitude|acw|`16384`|
|3|`0x00900038`|frequency|fcw|`0`|
|3|`0x0090003C`|phase|pcw|`0`|
|3|`0x00900044`|func_ctrl|awg_mode, mix_mode, intp_sel|`0x0`|
|3|`0x00900048`|pump_ctrl|delay / width|`2` / `32`|
|4|`0x00100000`|lo_freq|fcw|`5_500_000`|
|5|`0x00200000`|pump_freq|pump_freq|`7_800_000`|
|5|`0x00300000`|pump_power|pump_power|`-600`|
|5|`0x00400000`|pump_enable|pump_enable|`32'h11`|
|6|`0x00700000`|MCU_INS|MCU程序|产生码字 `0x0100`|