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 Gsps8 采样点/时钟周期),场景为输出一个 6.7 GHz 读出激励脉冲,同时触发 Pump 使能信号。
### 5.7.1. 端到端配置流程
EXC-Pump通道的工作流程如下
|阶段|操作|说明|
|:-|:-|:-|
|初始化|加载波形数据、配置索引表、配置寄存器、配置上变频、配置Pump|通过SPI写入步骤1~5无先后顺序要求|
|初始化|加载MCU程序|写入MCU_INS定义触发后要发出的码字|
|运行|外部触发 → MCU执行 → 产生码字|触发由其它硬件发出MCU响应后执行程序并生成13位码字|
|运行|码字解码 → 波形输出 + Pump脉冲|硬件自动流水线执行输出RF信号和使能脉冲|
```
关键理解:
触发信号来自外部硬件非MCUMCU是被动响应方。
MCU 程序加载到 MCU_INS 后处于待命状态,收到触发后执行并生成码字。
初始化配置可在任意时刻通过 SPI 完成,只需在触发前生效即可。
```
### 5.7.2. 地址空间速查
以下配置基于EXC通道0Exaddr=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. 步骤6MCU程序与触发
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=032 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`|