# 01 结构与基本原理

## 1. 先把系统分成四层

| 层 | 做什么 | 可以把它想成 |
|---|---|---|
| 输入层 | 接收摄像头像素、颜色转换、缩放、letterbox、量化 | 工厂的进料口 |
| 计算层 | 执行 Conv、激活、池化、PSA 和检测头 | 四个加工工位 |
| 传输层 | 在 die 之间传送特征图，做 CRC、信用、重试和路由 | 工位之间的传送带 |
| 控制层 | 启动、配置、发 micro-op、管理 frame、处理异常 | 生产调度员 |

这四层必须同时正确。只有算子数学正确，但数据送不到；或者数据链路正确，但 SRAM 不够，都不能称为端到端完成。

## 2. 一帧图像怎样走完整条路径

```text
OV5640/OV2640 DVP 摄像头
  -> 外部 camera bridge
  -> D0 接收 RGB/A8 band
  -> D0: M0-M4，stem 和 P3
  -> D1: M5-M8，P4 和 P5
  -> D2: M9-M18，SPPF、PSA、FPN、PAN 前段
  -> D3: M19-M23，PAN、PSA、e2e Detect
  -> D3 在线维护 Top-300
  -> 结果 FIFO / bridge / CPU
```

当前 MPW 方案锁定 `512x512`、W8/A8、20 FPS、四颗 28 nm 同构 die。摄像头不直接放进 ASIC，而是先经过 FPGA 或小型 bridge，把 DVP 像素整理为稳定的 tensor packet。

## 3. 为什么要四个 die

YOLO26n 在 512 输入下仍有很多卷积和特征图。把全部计算放在一颗 die 上会同时受到计算阵列、片上 SRAM 和布线的限制。四个 die 按模型的阶段切分：

| Die | 模型范围 | 初学者理解 |
|---|---|---|
| D0 | M0-M4 | 读取图像，提取最早期的边缘和纹理，产生 P3。 |
| D1 | M5-M8 | 继续 backbone，产生更深、更小的 P4/P5。 |
| D2 | M9-M18 | 做 SPPF、注意力 PSA 和特征融合。 |
| D3 | M19-M23 | 合并多尺度特征，解码框和类别，并保留前 300 个结果。 |

每颗 die 的硬件结构尽量相同，只由配置和 micro-op 决定自己当前扮演的角色。这便于 MPW 复用版图，也便于做 chain 或 ring 拓扑。

## 4. 数据平面和控制平面

### 数据平面

数据平面搬运 RGB、A8 activation、权重、bias、边界 tensor 和检测结果。主要部件是 DMA、SRAM、packetizer、router 和 RX/TX endpoint。

### 控制平面

控制平面不逐像素计算。CPU 在上电或模型更新时写配置，随后每个 die 的 `local_micro_op_scheduler` 根据依赖关系发出计算、DMA 和 D2D 操作。正常帧内 CPU 不需要逐层轮询。

## 5. 为什么不能把整帧放进 SRAM

当前容量审计给出的 1.45 MiB 是每 die 的规划上限。D1、D2 在同时保留 inbound 和 outbound tensor 时超过上限；D0 的首层输出本身就可能达到 1 MiB。因此方案采用 band streaming：

1. 只接收若干行，例如 32 行。
2. 在本地 line buffer 和 banked SRAM 中完成当前 band。
3. 计算完成就把结果发往下一个 die，或在消费者确认后释放空间。
4. 四个 frame context 只保留 frame_id、epoch、credit 和 descriptor 等元数据，不表示四帧数据都常驻。

当前 32 行方案在静态容量模型下得到：D0 1.020 MiB、D1 1.009 MiB、D2 1.143 MiB、D3 1.255 MiB。它是条件可行的分配，不是已经完成的周期级实现。

## 6. Tensor 的物理格式

模型图通常以 NCHW 表示；硬件更适合使用 `HWC16`：

```text
[row][column][channel_block][16 channels]
```

最后一维固定 16 个 int8 通道，可以让一个 128-bit word 正好装下 16 个 A8 值。16 个 SRAM bank 再把连续访问分散开，减少同一周期多个读请求撞在一个 bank 上。

## 7. D2D packet 的基本结构

- Header：描述源、目的、frame、tensor、offset、长度和序号，并带 CRC8。
- Payload：最多 256 B 的数据，通常是 HWC16 的 16 B word 的整数倍。
- Trailer：结束信息和 CRC16；整个 payload 另外计算 CRC32C。
- VC credit：四个 virtual channel 用累计 credit 防止接收端槽位被写满。

接收端必须先检查 header、范围、序号和 CRC，确认通过后才允许 DMA 写入 SRAM。坏包只能导致当前 frame abort，不能静默写坏下一个 frame。

## 8. 现在做到哪一步

包编解码、CRC、路由、信用、guarded RX endpoint、frame-context scheduler 和多个算子原语已有 XSim 或 Python 回归。全算子 traversal、代表性量化、真实 D2D PHY、ZCU106 板级无 DDR 运行和 28 nm PPA/STA 仍然是后续关口。
