# 操作原理

## 架构与模块划分

RBPU16 是一款用于超导量子比特态信息读出的 SoC 基带芯片。芯片模拟部分包含 ADC、DAC、PLL、LVDS、POR 及温度传感器；数字部分包含 DAQ、AWG、PlsGen、Feedback 及 System 模块。

![rbpu_schematic](../assets/rbpu_schematic.png)

### 信号流概述

**激励信号生成路径**：AWG 控制激励通道波形输出 → DAC 转换为基带读出激励信号 → AWG 同步触发 PlsGen 发出脉冲使能外部 Pump 通道。

**回波信号处理路径**：ADC 采集反射的读出基带信号 → DAQ 对基带信号进行分析处理 → 结果通过 LVDS 接口发送 → DAQ 触发 Feedback 模块将部分结果上报或下发到外部芯片。

### 辅助模块

| 模块 | 功能 |
|:-|:-|
| PLL | 管理芯片时钟，为 ADC/DAC/数字模块生成所需频率 |
| POR | 上电复位，保障芯片正常启动 |
| 温度监视 | 实时监测芯片温度变化 |
| System | 管理芯片控制状态，支撑运维和调试 |

<div class="important">
读出芯片支持 ASIC 模式和 FPGA 模式两种工作方式。两种模式受限于资源及外部 ADC/DAC 硬件性能差异，部分功能实现存在不同，阅读时需注意区分。
</div>

## 关键数据路径

### 读出激励输出通道

读出激励输出通道（RO 通道）由 AWG 模块和 Pump 模块协同工作，产生基带读出激励信号和 Pump 使能信号。

#### 编程资源

AWG 模块需编程六类数据资源：

| 资源 | 地址空间 | 说明 |
|:-|:-|:-|
| MCU 指令 (MCU_INS) | `0x700000` | MCU 执行的指令流 |
| MCU 数据 (MCU_DAT) | `0x800000` | 指令引用的初始数据 |
| 控制寄存器 (AWG_REG) | `0x900000` | AWG 工作模式与参数 |
| 波形映射表 (AWG_IDX) | `0xA00000` | 码字 → 波形段映射 |
| 波形数据 (AWG_WVE) | `0xB00000` | 波形采样点存储 |
| 模拟配置 (SYS_ANA) | — | DAC 输出模式与偏置校准 |

#### 波形输出流程

1. MCU 每 3 个时钟周期执行一条指令，发出控制码字
2. `WAVE_ID` 字段经查找表映射为波形段起始地址和长度
3. 波形数据经希尔伯特变换生成 I/Q 两路
4. I/Q 信号与 NCO 混频，实现频率搬移
5. 经数字调幅、半带插值滤波
6. 输出至 DAC 转换为模拟信号

#### 输出模式

| 模式 | 频率范围 | 应用场景 |
|:-|:-|:-|
| **NRZ 直出** | DC–3 GHz | 多音基带信号，多量子比特并行读出 |
| **MIX 混频** | 0.3–2.4 GHz | NCO 精确频点控制，腔频扫描 |
| **NCO Only** | — | 芯片测试，连续波形输出 |
| **HBMIX 半带混频** | 高频段 | 启用半带插值，提升高频信号质量 |

**射频直出**：NRZ 模式下利用高阶奈奎斯特区可实现 6–7 GHz 射频直出，功率平坦度约 2 dB（受 sinc 滚降限制）。

**Pump 通道**：MCU 码字 `PUMP_EN` 位触发 PlsGen 产生可编程脉宽信号，经 `PO_PUMP_EN` 管脚输出使能外部 Pump 上变频通道。

**软复位**：写 AWG_REG 软复位寄存器可复位 AWG 内部状态机和 FIFO，复位后需重新编程所有资源。

### 读出回波信号处理

读出回波输入通道（RI 通道）由 ADC 和 DAQ 模块构成，采集并处理反射基带信号。

#### 模拟前端

RF 回波信号 → 外部混频器下变频为基带 → 巴伦差分转换 → ADC 采样。
FPGA 平台：8 位 @ 4 GSPS；ASIC 平台：8 位 @ 6 GSPS。

#### 编程资源

DAQ 模块需编程五类数据资源：

| 资源 | 地址空间 | 说明 |
|:-|:-|:-|
| MCU 指令 (MCU_INS) | `0x200000` | DAQ MCU 执行指令流 |
| MCU 数据 (MCU_DAT) | `0x300000` | 指令引用的初始数据 |
| 控制寄存器 (DAQ_REG) | `0x400000` | DAQ 工作模式与参数 |
| 读出参数 (DAQ_PAR) | `0x500000` | 解模参数 |
| 匹配滤波器系数 (DAQ_FLT) | `0x580000` | 匹配滤波器权重（ASIC 模式） |
| 模拟配置 (SYS_ANA) | — | ADC 参考电压选择 |

#### 数据处理流程

1. ADC 采集原始波形
2. 数字解模：原始波形与匹配滤波器相关运算 → I/Q 复数数据
3. 态判定：根据 I/Q 判定量子态（0 / 1 / 2 / 未定义）
4. 态统计：多次测量结果计数
5. 结果输出：经 `RSLT_PUSH` LVDS 接口发送

#### 采集模式

| 模式 | 输出数据量 | 应用场景 |
|:-|:-|:-|
| 原始波形 | 最大 | 调试与原始数据分析 |
| IQ 数据 | 64 bit × N | 解模结果分析 |
| 态数据 | 2 bit × N | 高速态读出 |
| 态统计 | 最小 | 多次测量汇总 |

**软复位**：写 DAQ_REG 软复位寄存器可复位 DAQ 状态机。

## 接口控制协议

### SPI 配置协议

SPI 采用四线模式，CPOL = 1（空闲高电平），CPHA = 1（首沿输出、次沿采样）。

![spi_prot](../assets/spi_prot.png)

**帧格式：**

| 字段 | RW | ADDR | CHIP_ID | RSV | DATA |
|:-:|:-:|:-:|:-:|:-:|:-:|
| 位宽 | 1 | 25 | 5 | 1 | 32 × N |
| 说明 | 0: 读, 1: 写 | 32 MB 地址空间 | 片选 ID | 保留 | 数据 (N ≥ 1) |

协议以流模式传输：先发送 1 bit 读写标志 + 25 bit 地址 + 5 bit 片选 ID，之后发送/接收 N × 32 bit 数据，直至主控端拉低 CSN 结束通信。每完成 32 bit 后地址自动递增 4 字节。

### LVDS 通信协议

芯片数据推送 (`rslt_push_[p,n]`)、反馈上报 (`glb_tx_[p,n]`) 和反馈下发 (`glb_rx_[p,n]`) 接口采用定制 LVDS 协议。

**帧格式：**

```
    +---------------------------------------+
    |           LVDS DATA FRAME             |
    +------+-------------------+------------+
    |  4   |    16/32/64/128   |     8      |
    +------+-------------------+------------+
    | HEAD |       Payload     |    CRC8    |
    +------+-------------------+------------+
    MSB                                   LSB
```

HEAD 字段定义：

| Bit | 说明 |
|:-|:-|
| [3] | 启动标志（1 = 启动传输） |
| [2] | 保留（置 0） |
| [1:0] | 载荷长度：0 = 16 bit，1 = 32 bit，2 = 64 bit，3 = 128 bit |

CRC8 多项式：

$$x^8 + x^2 + x + 1$$

![lvds_prot](../assets/lvds_prot.png)

**同步机制**：接收端必须先与发送端同步方可接收数据。发送端发送同步码 `hfnl`（32 bit），达到设定次数后发送结束码 `exit`（32 bit）。接收端状态转移：

* 初始 → **未同步**：等待同步码
* **未同步** → **确认**：收到足够次数的同步码
* **确认** → **就绪**：收到结束码
* **就绪** → **未同步**：数据接收中 CRC8 校验错误

**空闲**：无数据传输时 LVDS 电平拉高；发送数据时拉低两个数据周期后开始发送。
