rbpu_datasheet/CLAUDE.md

144 lines
6.0 KiB
Markdown
Raw Permalink Normal View History

2026-07-18 00:51:43 +08:00
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
本项目是 **RBPU16 读出基带处理芯片** 的数据手册datasheet/user manual。RBPU16 是一款用于超导量子比特态信息读出的 SoC 芯片,最大支持 16 个量子比特并行读出,内部集成 PLL、ADC、DAC、DSP 等模块。
手册基于纯文本管理,通过 Python 脚本生成精美的 HTML 和 PDF 报告(参考 AD9164 数据手册风格)。
## 文件结构
| 路径 | 用途 |
|------|------|
| `chapters/*.md` | 手册章节源文件Markdown按章节拆分纯文本 git 友好) |
| `chapters/appendix/*.md` | 附录(运维手册、配置用例) |
| `data/pin_name.csv` | 管脚定义表(编号、名称、类型、描述) |
| `data/pin_loc.csv` | 管脚物理位置网格表(行×列 → 信号名) |
| `data/seg_define.csv` | 寄存器地址段定义(功能模块→子模块→起始地址→大小) |
| `data/ids.json` | 寄存器详细定义 JSON由 XLS 生成,供脚本读取) |
| `assets/` | 手册内嵌图片(框图、管脚图、协议图等 PNG/JPG 文件) |
| `templates/` | Jinja2 模板base HTML + macros + CSS |
| `templates/css/report.css` | 报告样式表AD9164 风格,支持打印和屏幕) |
| `templates/macros/` | 可复用 Jinja2 宏(管脚表、寄存器表、地址映射表) |
| `build.py` | 主构建脚本(一键生成 HTML + PDF |
| `requirements.txt` | Python 依赖Jinja2, markdown, Pygments, WeasyPrint |
| `output/` | 构建产物gitignore |
| `script/ids_import.ipynb` | Jupyter notebook解析 `读出子系统IDS表.xls` 生成 `data/ids.json` |
| `script/读出子系统IDS表.xls` | 寄存器详细定义 Excel多 sheet |
### 旧文件(过渡期保留)
| 路径 | 说明 |
|------|------|
| `读出芯片用户使用手册.md` | 旧 MPE 单文件手册(过渡期保留,不再更新) |
| `读出芯片用户使用手册.html` | 旧 MPE 导出 HTML |
| `specification.md` | 旧 SPI/LVDS 规格(内容已合并到 chapters/ |
| `pin_name.csv` (root) | 旧位置(已复制到 data/ |
| `pin_loc.csv` (root) | 旧位置(已复制到 data/ |
| `seg_define.csv` (root) | 旧位置(已复制到 data/ |
| `ids/` | 旧位置JSON 已复制到 data/ids.json |
| `pin_loc.xlsx` | 旧 Excel 文件 |
## 构建流程
### 一键构建
```bash
# 安装依赖
pip install -r requirements.txt
# 构建 HTML + PDF
python build.py
```
产物输出到 `output/` 目录:
- `output/RBPU16 读出基带处理芯片_数据手册.html`
- `output/RBPU16 读出基带处理芯片_数据手册.pdf`
### 构建步骤build.py 内部流程)
1. 加载数据源:`data/*.csv` + `data/ids.json`
2. 初始化 Jinja2 模板引擎
3. 处理章节文件:`chapters/*.md`
- 识别 `<!-- MACRO: xxx -->` 标记并替换为 Jinja2 宏渲染的 HTML
- Python-Markdown 将 Markdown 转为 HTML
4. 生成目录 (TOC)
5. 渲染完整 HTML封面 + TOC + 章节 + 修订历史)
6. WeasyPrint 将 HTML 转为 PDF
### 宏标记说明
章节 Markdown 文件中使用 `<!-- MACRO: xxx -->` 注释标记来指示脚本动态生成表格:
| 宏标记 | 功能 | 数据源 |
|--------|------|--------|
| `<!-- MACRO: pin_table -->` | 渲染管脚描述表 | `data/pin_name.csv` |
| `<!-- MACRO: pin_loc_grid -->` | 渲染 BGA 焊球网格 | `data/pin_loc.csv` |
| `<!-- MACRO: address_map -->` | 渲染地址映射总表 | `data/seg_define.csv` |
| `<!-- MACRO: register_table -->` | 渲染完整寄存器定义 | `data/ids.json` |
### 寄存器定义更新流程
当 XLS 寄存器定义文件更新后:
1. 在 VS Code 中打开 `script/ids_import.ipynb`,运行所有 cell
2. notebook 解析 `script/读出子系统IDS表.xls` 的多个 sheet
3. 输出为 `data/ids.json`
4. 运行 `python build.py` 重新构建手册
## 章节编辑指南
### 添加新章节
1.`chapters/` 下创建新 `.md` 文件
2. 文件名格式:`{序号}_{英文名}.md`(如 `10_timing_diagrams.md`
3. 文件以 `# 章节标题` 开头
4. 运行 `python build.py` 验证
### 修改管脚定义
1. 编辑 `data/pin_name.csv`(或根目录 `pin_name.csv`,然后复制到 data/
2. 运行 `python build.py`,管脚表自动更新
### 修改寄存器定义
1. 编辑 `script/读出子系统IDS表.xls`
2. 运行 `script/ids_import.ipynb` 更新 `data/ids.json`
3. 运行 `python build.py`,寄存器表自动更新
### 修改样式
编辑 `templates/css/report.css`
- CSS 变量(颜色、字体、间距)在 `:root` 块中
- 打印样式使用 `@page` 规则
- 屏幕样式使用 `@media screen`
## 技术栈
- **模板引擎**: Jinja2 — Python 标准Flask 生态
- **Markdown 解析**: Python-Markdown + extensions (tables, codehilite, toc, fenced_code)
- **HTML→PDF**: WeasyPrint — 纯 PythonCSS Paged Media
- **代码高亮**: Pygments — Python-Markdown codehilite 依赖
- **数学公式**: KaTeX — CDN 加载HTML 中动态渲染
- **图表**: Mermaid — CDN 加载(当前手册未使用)
## 关键约定
- 所有文档内容为中文技术术语保留英文缩写ADC、DAC、PLL、LVDS、SPI、AWG、DAQ、MCU、NCO 等)
- 管脚编号采用 BGA 网格命名(字母行 + 数字列,如 F4、G7
- 地址和寄存器偏移使用 24 位十六进制表示(如 `0x100000`
- SPI 协议格式1 bit R/W + 25 bit addr + 5 bit chip_id + 1 bit reserved + N×32 bit data
- LVDS 协议帧格式4 bit header + 16/32/64/128 bit payload + 8 bit CRC8
- 章节文件命名:`{序号}_{英文名}.md`,序号决定章节顺序
- 图片路径:相对于 repo 根目录,从 `assets/` 引用
## PDF 生成注意事项
WeasyPrint 需要系统依赖:
- **Windows**: 通常开箱即用
- **macOS**: `brew install pango cairo`
- **Linux**: `apt install libpango-1.0-0 libpangocairo-1.0-0`
中文 PDF 字体:若系统缺少中文字体,可在 CSS `:root` 中调整 `--font-body``--font-heading` 变量,使用系统可用字体。