# Board Bringup

> FPGA原型和板级bringup技能 - 从静态检查到系统测试，完整板级验证指导

- Skill: `tangyangchao578-art/board-bringup` (Agent Skill)
- Install (CLI): `npx skillmds@latest add tangyangchao578-art/board-bringup`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tangyangchao578-art/board-bringup/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tangyangchao578-art (https://skillmd.com/u/tangyangchao578-art)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tangyangchao578-art/board-bringup

---


# FPGA 原型和板级 Bringup 技能

当用户需要进行 FPGA 原型验证或硅后板级验证时，启用此技能。提供从静态检查到系统测试的完整 bringup 流程和问题调试方法。

## When to Activate

- 新 FPGA 原型项目启动
- 新 PCB 第一次上电 bringup
- 硅后芯片第一次测试
- 板级功能问题调试
- 量产前验证测试

---

## 步骤 1：静态检查（不开电）

**一定要做，不开电检查出问题比上电烧器件好。**

### 1.1 目视检查

**做什么：** 检查 PCB 外观和器件焊接。

**检查项：**
- [ ] PCB 有没有明显损伤、划痕
- [ ] 器件有没有焊反、焊歪
- [ ] 极性器件（电容、二极管）方向正确
- [ ] 芯片方向正确（引脚 1 位置）
- [ ] 有没有少件、多件
- [ ] 有没有连锡短路

### 1.2 电源短路检查

**做什么：** 确认电源和地之间没有短路。

**怎么做：**
```
1. 万用表设置电阻档
2. 测量每个电源轨到地的电阻
3. 记录电阻值
4. 电阻 < 10Ω 可能短路，需要排查
```

**输出：** 电源电阻表

| 电源轨 | 电阻值 | 状态 |
|--------|--------|------|
| VCC_3V3 | 1.2kΩ | 正常 |
| VCC_1V8 | 800Ω | 正常 |
| VCC_1V0 | 50Ω | ⚠️ 检查 |

### 1.3 导通性检查

**做什么：** 确认所有关键网络连通。

**检查项：**
- [ ] 电源轨从电源到芯片引脚导通
- [ ] 地网络导通
- [ ] 时钟信号从源到芯片导通
- [ ] JTAG 信号导通
- [ ] 复位信号导通

### 1.4 无源器件检查

**做什么：** 检查关键无源器件值正确。

**检查项：**
- [ ] 电源去耦电容值正确
- [ ] 晶振负载电容正确
- [ ] 复位上拉/下拉电阻正确
- [ ] 终端电阻正确

**检查清单：**
- [ ] 目视检查完成
- [ ] 电源无短路
- [ ] 导通性检查完成
- [ ] 无源器件检查完成

---

## 步骤 2：第一次上电

**安全第一，电流限制，慢慢升压。**

### 2.1 设置电源保护

**做什么：** 设置电源电流限制，防止烧坏。

**怎么做：**
```
1. 可编程电源设置电流限制
   - 起始限制：100mA - 500mA（根据预期电流）
   - 电压：从 0V 开始
2. 连接电源到板子
3. 准备万用表和示波器
```

### 2.2 缓慢上电

**做什么：** 缓慢升压，观察电流。

**怎么做：**
```
1. 从 0V 开始，缓慢升压
2. 观察电流变化
3. 每升 0.1V 停顿，观察
4. 到达目标电压后稳定
```

**正常现象：**
- 电流平滑上升
- 达到预期静态电流后稳定
- 没有突然跳变

**异常现象：**
- 电流突然跳变 → 立即断电
- 电流超过限制 → 立即断电
- 有冒烟/异味 → 立即断电

### 2.3 测量电源轨电压

**做什么：** 测量每个电源轨电压正确。

**输出：** 电源电压表

| 电源轨 | 预期值 | 实测值 | 压降 | 状态 |
|--------|--------|--------|------|------|
| VCC_3V3 | 3.3V | 3.28V | 0.02V | 正常 |
| VCC_1V8 | 1.8V | 1.75V | 0.05V | ⚠️ 压降大 |
| VCC_1V0 | 1.0V | 1.01V | 0.01V | 正常 |

### 2.4 检查器件温度

**做什么：** 手摸或热像仪检查器件温度。

**检查项：**
- [ ] 所有器件温度正常
- [ ] 没有异常发热器件
- [ ] 电源芯片温升合理

**检查清单：**
- [ ] 电流限制设置正确
- [ ] 上电过程顺利
- [ ] 静态电流正常
- [ ] 电源电压正确
- [ ] 器件温度正常

---

## 步骤 3：时钟和复位测试

### 3.1 测量参考时钟

**做什么：** 示波器测量参考时钟。

**测量项：**
- 频率是否正确
- 幅度是否正确
- 占空比是否正确
- 边沿是否干净

**输出：** 时钟测量表

| 时钟 | 预期频率 | 实测频率 | 幅度 | 状态 |
|------|----------|----------|------|------|
| REF_CLK | 25MHz | 25.01MHz | 3.2V | 正常 |
| SYS_CLK | 50MHz | 49.98MHz | 3.3V | 正常 |

### 3.2 配置并测试 PLL

**做什么：** 配置 PLL，检查锁定。

**步骤：**
1. 配置 PLL 分频系数
2. 使能 PLL
3. 等待锁定
4. 测量输出频率

**检查项：**
- [ ] PLL 能够锁定
- [ ] 输出频率正确
- [ ] 锁定时间符合规格

### 3.3 测试复位

**做什么：** 测试复位信号时序正确。

**测量项：**
- 复位有效电平正确
- 复位释放电平正确
- 复位持续时间符合规格
- 复位释放顺序正确

**检查清单：**
- [ ] 参考时钟正确
- [ ] PLL 锁定正确
- [ ] 各时钟频率正确
- [ ] 复位时序正确

---

## 步骤 4：配置接口测试

### 4.1 连接调试接口

**做什么：** 连接 JTAG/SWD 调试接口。

**步骤：**
1. 连接调试器到板子
2. 打开调试软件
3. 尝试连接

**检查项：**
- [ ] 调试器能够连接
- [ ] 能够识别芯片 ID
- [ ] ID 码正确

### 4.2 基本寄存器测试

**做什么：** 测试寄存器读写正确。

**测试项：**
```
1. 读取 ID 寄存器 → 值正确
2. 写入测试寄存器 → 写入成功
3. 回读测试寄存器 → 读出正确
4. 写入另一个值 → 读出正确
```

### 4.3 加载配置（FPGA）

**做什么：** 加载配置比特流。

**步骤：**
1. 加载比特流到 FPGA
2. 检查加载成功状态
3. 检查 DONE 引脚状态

**检查项：**
- [ ] 比特流加载成功
- [ ] DONE 引脚变高
- [ ] FPGA 进入工作状态

**⚠️ 如果这一步过不去，不要往下走，一定先解决。**

**检查清单：**
- [ ] 调试接口连接正常
- [ ] 芯片 ID 识别正确
- [ ] 寄存器读写正确
- [ ] 配置加载成功（FPGA）

---

## 步骤 5：模块逐个测试

**从最简单到最复杂，一个模块测试通过再下一个。**

### 5.1 GPIO 测试

**测试项：**
- [ ] GPIO 输出高低电平正确
- [ ] GPIO 输入读取正确
- [ ] GPIO 方向控制正确

### 5.2 UART 测试

**测试项：**
- [ ] 能够发送数据
- [ ] 能够接收数据
- [ ] 波特率正确
- [ ] 回环测试通过

### 5.3 I2C/SPI 测试

**测试项：**
- [ ] 能够检测到从设备
- [ ] 能够读写从设备寄存器
- [ ] 波特率正确

### 5.4 存储器测试

**测试项：**
- [ ] 能够写入数据
- [ ] 能够读出数据
- [ ] 写入和读出一致
- [ ] 遍历所有地址测试

### 5.5 DDR 测试

**测试项：**
- [ ] DDR 初始化成功
- [ ] 写入数据正确
- [ ] 读取数据正确
- [ ] 带宽测试符合预期

### 5.6 核心功能测试

**测试项：**
- [ ] 核心功能正常工作
- [ ] 数据通路正确
- [ ] 控制通路正确

**检查清单：**
- [ ] GPIO 测试通过
- [ ] UART 测试通过
- [ ] I2C/SPI 测试通过
- [ ] 存储器测试通过
- [ ] DDR 测试通过
- [ ] 核心功能测试通过

---

## 步骤 6：系统集成测试

### 6.1 模块间接口测试

**测试项：**
- [ ] 模块间数据传输正确
- [ ] 模块间控制信号正确
- [ ] 模块间时序正确

### 6.2 完整应用测试

**测试项：**
- [ ] 完整应用场景运行正常
- [ ] 数据端到端正确
- [ ] 性能满足要求

### 6.3 压力测试

**测试项：**
- [ ] 长时间运行（24小时+）
- [ ] 高负载运行
- [ ] 温度升高后运行正常

### 6.4 极限测试

**测试项：**
- [ ] 最高频率测试
- [ ] 最低电压测试
- [ ] 高温测试
- [ ] 低温测试

**检查清单：**
- [ ] 模块间接口测试通过
- [ ] 完整应用测试通过
- [ ] 压力测试通过
- [ ] 极限测试通过

---

## 常见问题定位

### 问题 1：电源电流过大

**可能原因：**
- 电源地短路
- 器件焊错
- 芯片损坏

**排查步骤：**
1. 断电，测量电源地电阻
2. 逐个断开电源域
3. 找到短路区域
4. 定位短路器件

### 问题 2：JTAG 连接不上

**可能原因：**
- 接线错误
- 电源不对
- 复位不对
- 速度太快

**排查步骤：**
1. 测量每个信号线
2. 测量电源电压
3. 测量复位电平
4. 降低 JTAG 速度

### 问题 3：PLL 不锁定

**可能原因：**
- 参考时钟不对
- 配置不对
- 电压不对

**排查步骤：**
1. 示波器测量参考时钟
2. 检查配置寄存器
3. 测量 PLL 电源

### 问题 4：功能偶发错误

**可能原因：**
- 时序余量不够
- 跨时钟域问题
- 电源噪声

**排查步骤：**
1. 降低工作频率
2. 增加同步级数
3. 测量电源纹波

---

## 调试方法论

### 二分法

1. 问题在前半还是后半
2. 砍掉一半
3. 重复，缩小范围

### 隔离法

1. 禁用所有无关模块
2. 只保留问题相关模块
3. 排除其他影响

### 对比法

1. 和仿真波形对比
2. 和已知好的板子对比
3. 找出差异

---

## 文档要求

记录每次 bringup：

| 测试项 | 环境 | 结果 | 问题 | 根因 | 修复 |
|--------|------|------|------|------|------|
| 电源检查 | 25°C | PASS | - | - | - |
| 时钟测试 | 25°C | FAIL | 频率偏 | 晶振错 | 更换 |
| ... | ... | ... | ... | ... | ... |

---

## 反模式（要避免）

❌ **上来就跑完整系统** → 不知道哪里错了
❌ **不记录结果** → 忘了做到哪了
❌ **电流过大继续加电** → 烧坏器件
❌ **跳过分步测试** → 找不到问题

---

## 代理协作

- 使用 `validation-engineer` 代理进行板级验证
- 自动化测试脚本使用 `eda-scripting` 技能开发

