## 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`|
