soc/sw/SOC_TESTPLAN.md
SOC 验证测试计划 (Test Plan)
文档信息
- 项目: SOC3.0
- 版本: 1.0
- 日期: 2024
- 状态: 进行中
一、测试目标和范围
1.1 测试目标
本测试计划旨在全面验证 SOC3.0 系统的功能正确性、可靠性和性能,确保:
- 功能正确性: 所有硬件模块按照设计规范正确工作
- 接口兼容性: AHB/APB 总线协议正确实现
- 系统集成: 各模块协同工作正常
- 边界条件: 异常和边界情况得到正确处理
- 覆盖率: 达到功能覆盖率目标(目标:95%+)
1.2 测试范围
包含模块:
- ✅ RISC-V Ibex 处理器核心
- ✅ AHB 总线系统
- ✅ APB 子系统及所有外设
- ✅ SRAM 存储器
- ✅ DMA 控制器
- ✅ CNN 神经网络加速器
- ✅ ISP 图像信号处理器
- ✅ JTAG 调试接口
不包含:
- ❌ GPIO 模块(代码中已注释,暂不测试)
- ❌ 物理层测试(需要 FPGA/ASIC 实现)
二、SOC 架构概述
2.1 系统架构
┌─────────────────────────────────────────────────┐
│ SOC3.0 Top Level │
├─────────────────────────────────────────────────┤
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Ibex Core │─────────│ AHB Bus │ │
│ │ (RISC-V) │ │ Controller │ │
│ └──────────────┘ └──────┬───────┘ │
│ │ │
│ ┌─────────────────────────┼──────────┐ │
│ │ │ │ │
│ ┌────▼────┐ ┌─────▼─────┐ │ │
│ │ SRAM │ │ AHB2APB │ │ │
│ │ (AHB) │ │ Bridge │ │ │
│ └─────────┘ └─────┬─────┘ │ │
│ │ │ │
│ ┌────────▼────────┐ │ │
│ │ APB Subsystem │ │ │
│ ├────────────────┤ │ │
│ │ SPI0, SPI1 │ │ │
│ │ UART0 │ │ │
│ │ I2C0, I2C1 │ │ │
│ │ PWM │ │ │
│ │ Pinmux │ │ │
│ └────────────────┘ │ │
│ │ │
│ ┌──────────┐ ┌──────────┐ │ │
│ │ DMA │ │ CNN │ │ │
│ │ (AHB) │ │ (AHB) │ │ │
│ └──────────┘ └──────────┘ │ │
│ │ │
│ ┌──────────┐ ┌──────────┐ │ │
│ │ ISP │ │ JTAG │ │ │
│ │ (AHB) │ │ │ │ │
│ └──────────┘ └──────────┘ │ │
└─────────────────────────────────────────────────┘
2.2 地址映射
| 模块 | 基地址 | 地址范围 | 接口类型 |
|---|---|---|---|
| SRAM | 0x10000 | 0x10000-0x1FFFF | AHB |
| SPI0 | 0x20000000 | 0x20000000-0x2000FFFF | APB |
| UART0 | 0x20010000 | 0x20010000-0x2001FFFF | APB |
| SPI1 | 0x20040000 | 0x20040000-0x2004FFFF | APB |
| I2C0 | 0x20020000 | 0x20020000-0x2002FFFF | APB |
| I2C1 | 0x20030000 | 0x20030000-0x2003FFFF | APB |
| PWM | 0x20050000 | 0x20050000-0x2005FFFF | APB |
| Pinmux | 0x20060000 | 0x20060000-0x2006FFFF | APB |
三、测试分类
3.1 测试类型
| 测试类型 | 说明 | 优先级 | 测试方法 |
|---|---|---|---|
| 功能测试 | 验证模块基本功能 | P0 | C测试 + UVM测试 |
| 接口测试 | 验证总线协议正确性 | P0 | UVM测试 |
| 边界测试 | 测试边界条件和极限值 | P1 | C测试 + UVM测试 |
| 错误处理 | 测试异常和错误恢复 | P1 | UVM测试 |
| 性能测试 | 测试吞吐量和延迟 | P2 | C测试 |
| 集成测试 | 测试多模块协同工作 | P0 | C测试 + UVM测试 |
3.2 测试方法
- C 测试: 运行在 Ibex 核心上的裸机程序,验证软件可见功能
- UVM 测试: 基于 UVM 框架的系统级验证,验证硬件行为
四、详细测试计划
4.1 处理器核心 (Ibex Core)
测试点
| ID | 测试点 | 描述 | 测试用例 | 状态 |
|---|---|---|---|---|
| IBX-001 | 指令执行 | 验证基本指令正确执行 | soc_base_test |
✅ |
| IBX-002 | 中断处理 | 验证中断响应和处理 | 间接测试 | ⚠️ |
| IBX-003 | 异常处理 | 验证异常和陷阱处理 | 间接测试 | ⚠️ |
| IBX-004 | 流水线 | 验证流水线正确性 | 间接测试 | ⚠️ |
| IBX-005 | 调试接口 | 验证 JTAG 调试功能 | jtag_test, jtag_uvm_test |
✅ |
覆盖度: 间接测试(通过其他模块测试验证)
4.2 存储器系统
4.2.1 SRAM
| ID | 测试点 | 描述 | 测试用例 | 状态 |
|---|---|---|---|---|
| SRAM-001 | 基本读写 | 验证 SRAM 基本读写功能 | sram_test, sram_uvm_test |
✅ |
| SRAM-002 | 地址边界 | 测试地址边界条件 | sram_test |
✅ |
| SRAM-003 | 数据宽度 | 测试不同数据宽度访问 | sram_uvm_test |
✅ |
| SRAM-004 | 并发访问 | 测试指令和数据并发访问 | 间接测试 | ⚠️ |
| SRAM-005 | 错误响应 | 测试非法地址访问 | sram_uvm_test |
✅ |
覆盖度: 85% ✅
4.3 总线系统
4.3.1 AHB 总线
| ID | 测试点 | 描述 | 测试用例 | 状态 |
|---|---|---|---|---|
| AHB-001 | 基本传输 | 验证 AHB 基本读写传输 | 间接测试 | ✅ |
| AHB-002 | 突发传输 | 测试 AHB 突发传输 | soc_dma_test* |
✅ |
| AHB-003 | 仲裁 | 测试多主设备仲裁 | 间接测试 | ⚠️ |
| AHB-004 | 错误响应 | 测试 AHB 错误响应 | 间接测试 | ⚠️ |
覆盖度: 间接测试(通过模块测试验证)
4.3.2 APB 总线
| ID | 测试点 | 描述 | 测试用例 | 状态 |
|---|---|---|---|---|
| APB-001 | 基本传输 | 验证 APB 基本读写传输 | 所有 APB 外设测试 | ✅ |
| APB-002 | 等待状态 | 测试 APB 等待状态处理 | 间接测试 | ⚠️ |
| APB-003 | 错误响应 | 测试 APB 错误响应 | 间接测试 | ⚠️ |
覆盖度: 间接测试(通过外设测试验证)
4.4 通信接口
4.4.1 SPI 控制器
SPI0
| ID | 测试点 | 描述 | 测试用例 | 状态 |
|---|---|---|---|---|
| SPI0-001 | 标准模式 | 验证标准 SPI 模式 | spi_test, spi_uvm_test |
✅ |
| SPI0-002 | Quad 模式 | 验证 Quad SPI 模式 | spi1_test |
✅ |
| SPI0-003 | 片选信号 | 测试 CS0-CS3 片选 | spi_uvm_test |
✅ |
| SPI0-004 | FIFO 操作 | 测试 TX/RX FIFO | spi_uvm_test |
✅ |
| SPI0-005 | 时钟分频 | 测试不同时钟分频 | spi_uvm_test |
✅ |
| SPI0-006 | 中断处理 | 测试 SPI 中断 | spi_uvm_test |
✅ |
覆盖度: 90% ✅
SPI1
| ID | 测试点 | 描述 | 测试用例 | 状态 |
|---|---|---|---|---|
| SPI1-001 | 基本功能 | 验证 SPI1 基本功能 | spi2_test |
✅ |
| SPI1-002 | 独立工作 | 测试 SPI0/SPI1 独立工作 | spi2_test |
✅ |
覆盖度: 70% ⚠️
建议: 添加 SPI1 的 UVM 测试
4.4.2 UART 控制器
| ID | 测试点 | 描述 | 测试用例 | 状态 |
|---|---|---|---|---|
| UART-001 | 发送功能 | 验证 UART 发送 | uart_test, uart_uvm_test |
✅ |
| UART-002 | 接收功能 | 验证 UART 接收 | uart_test, uart_uvm_test |
✅ |
| UART-003 | 波特率 | 测试不同波特率 | uart_uvm_test |
✅ |
| UART-004 | 数据格式 | 测试数据位、停止位、校验位 | uart_uvm_test |
✅ |
| UART-005 | FIFO 操作 | 测试 TX/RX FIFO | uart_uvm_test |
✅ |
| UART-006 | 中断处理 | 测试 UART 中断 | uart_uvm_test |
✅ |
覆盖度: 85% ✅
4.4.3 I2C 控制器
I2C0
| ID | 测试点 | 描述 | 测试用例 | 状态 |
|---|---|---|---|---|
| I2C0-001 | 写操作 | 验证 I2C 写操作 | i2c_write_test, i2c_write_uvm_test |
✅ |
| I2C0-002 | 读操作 | 验证 I2C 读操作 | i2c_read_test, i2c_read_uvm_test |
✅ |
| I2C0-003 | 地址匹配 | 测试从设备地址匹配 | i2c_*_uvm_test |
✅ |
| I2C0-004 | 时钟拉伸 | 测试时钟拉伸功能 | i2c_*_uvm_test |
✅ |
| I2C0-005 | 错误处理 | 测试 ACK/NACK 处理 | i2c_*_uvm_test |
✅ |
覆盖度: 85% ✅
I2C1
| ID | 测试点 | 描述 | 测试用例 | 状态 |
|---|---|---|---|---|
| I2C1-001 | 写操作 | 验证 I2C1 写操作 | i2c1_write_test, i2c1_write_uvm_test |
✅ |
| I2C1-002 | 读操作 | 验证 I2C1 读操作 | i2c1_read_test, i2c1_read_uvm_test |
✅ |
| I2C1-003 | 独立工作 | 测试 I2C0/I2C1 独立工作 | i2c1_*_test |
✅ |
覆盖度: 80% ✅
4.4.4 PWM 控制器
| ID | 测试点 | 描述 | 测试用例 | 状态 |
|---|---|---|---|---|
| PWM-001 | 基本输出 | 验证 PWM 基本输出 | pwm_test, pwm_uvm_test |
✅ |
| PWM-002 | 占空比 | 测试不同占空比设置 | pwm_test, pwm_uvm_test |
✅ |
| PWM-003 | 频率设置 | 测试不同频率设置 | pwm_uvm_test |
✅ |
| PWM-004 | 多通道 | 测试多通道独立工作 | pwm_uvm_test |
✅ |
覆盖度: 80% ✅
4.5 加速器和专用模块
4.5.1 DMA 控制器
| ID | 测试点 | 描述 | 测试用例 | 状态 |
|---|---|---|---|---|
| DMA-001 | 基本传输 | 验证 DMA 基本传输 | soc_dma_test, soc_dma_uvm_test |
✅ |
| DMA-002 | 内存到内存 | 测试内存到内存传输 | soc_dma_test1, soc_dma_uvm_test1 |
✅ |
| DMA-003 | 外设到内存 | 测试外设到内存传输 | soc_dma_test2, soc_dma_uvm_test2 |
✅ |
| DMA-004 | 传输长度 | 测试不同传输长度 | soc_dma_test* |
✅ |
| DMA-005 | 中断处理 | 测试 DMA 完成中断 | soc_dma_uvm_test* |
✅ |
| DMA-006 | 错误处理 | 测试 DMA 错误处理 | soc_dma_uvm_test* |
✅ |
覆盖度: 90% ✅
4.5.2 CNN 加速器
| ID | 测试点 | 描述 | 测试用例 | 状态 |
|---|---|---|---|---|
| CNN-001 | 基本推理 | 验证 CNN 基本推理功能 | cnn_test, cnn_uvm_test |
✅ |
| CNN-002 | 卷积运算 | 测试卷积层运算 | cnn_test, cnn_uvm_test |
✅ |
| CNN-003 | 激活函数 | 测试激活函数处理 | cnn_uvm_test |
✅ |
| CNN-004 | 数据格式 | 测试不同数据格式 | cnn_uvm_test |
✅ |
覆盖度: 75% ⚠️
4.5.3 ISP 图像处理器
| ID | 测试点 | 描述 | 测试用例 | 状态 |
|---|---|---|---|---|
| ISP-001 | 基本处理 | 验证 ISP 基本图像处理 | isp_test, isp_uvm_test |
✅ |
| ISP-002 | 图像格式 | 测试不同图像格式处理 | isp_uvm_test |
✅ |
| ISP-003 | 处理流水线 | 测试 ISP 处理流水线 | isp_uvm_test |
✅ |
覆盖度: 70% ⚠️
4.5.4 JTAG 调试接口
| ID | 测试点 | 描述 | 测试用例 | 状态 |
|---|---|---|---|---|
| JTAG-001 | 基本调试 | 验证 JTAG 基本调试功能 | jtag_test, jtag_uvm_test |
✅ |
| JTAG-002 | 寄存器访问 | 测试通过 JTAG 访问寄存器 | jtag_uvm_test |
✅ |
| JTAG-003 | 断点设置 | 测试断点设置和触发 | jtag_uvm_test |
✅ |
覆盖度: 75% ⚠️
4.6 系统配置模块
4.6.1 Pinmux (引脚复用)
| ID | 测试点 | 描述 | 测试用例 | 状态 |
|---|---|---|---|---|
| PINMUX-001 | 引脚配置 | 验证引脚复用配置 | 间接测试(spi2_test) |
⚠️ |
| PINMUX-002 | 多路复用 | 测试多个功能复用同一引脚 | 间接测试 | ⚠️ |
| PINMUX-003 | 配置锁定 | 测试配置锁定功能 | 未测试 | ❌ |
覆盖度: 30% ❌
建议: 添加专门的 pinmux_test 和 pinmux_uvm_test
五、测试用例映射表
5.1 C 测试用例
| 测试用例 | 对应测试点 | 优先级 | 状态 |
|---|---|---|---|
soc_base_test |
IBX-001 | P0 | ✅ |
sram_test |
SRAM-001, SRAM-002 | P0 | ✅ |
spi_test |
SPI0-001 | P0 | ✅ |
spi1_test |
SPI0-002 | P0 | ✅ |
spi2_test |
SPI1-001, SPI1-002 | P0 | ✅ |
uart_test |
UART-001, UART-002 | P0 | ✅ |
i2c_read_test |
I2C0-002 | P0 | ✅ |
i2c_write_test |
I2C0-001 | P0 | ✅ |
i2c1_read_test |
I2C1-002 | P0 | ✅ |
i2c1_write_test |
I2C1-001 | P0 | ✅ |
pwm_test |
PWM-001, PWM-002 | P0 | ✅ |
soc_dma_test |
DMA-001 | P0 | ✅ |
soc_dma_test1 |
DMA-002 | P0 | ✅ |
soc_dma_test2 |
DMA-003 | P0 | ✅ |
cnn_test |
CNN-001, CNN-002 | P0 | ✅ |
isp_test |
ISP-001 | P0 | ✅ |
jtag_test |
JTAG-001 | P0 | ✅ |
led |
GPIO? | P2 | ⚠️ |
总计: 18 个 C 测试用例
5.2 UVM 测试用例
| 测试用例 | 对应测试点 | 优先级 | 状态 |
|---|---|---|---|
soc_base_test |
IBX-001, AHB-001 | P0 | ✅ |
sram_uvm_test |
SRAM-001~005 | P0 | ✅ |
spi_uvm_test |
SPI0-001~006 | P0 | ✅ |
uart_uvm_test |
UART-001~006 | P0 | ✅ |
i2c_read_uvm_test |
I2C0-002, I2C0-003~005 | P0 | ✅ |
i2c_write_uvm_test |
I2C0-001, I2C0-003~005 | P0 | ✅ |
i2c1_read_uvm_test |
I2C1-002, I2C1-003 | P0 | ✅ |
i2c1_write_uvm_test |
I2C1-001, I2C1-003 | P0 | ✅ |
pwm_uvm_test |
PWM-001~004 | P0 | ✅ |
soc_dma_uvm_test |
DMA-001, DMA-004~006 | P0 | ✅ |
soc_dma_uvm_test1 |
DMA-002, DMA-004~006 | P0 | ✅ |
soc_dma_uvm_test2 |
DMA-003, DMA-004~006 | P0 | ✅ |
cnn_uvm_test |
CNN-001~004 | P0 | ✅ |
isp_uvm_test |
ISP-001~003 | P0 | ✅ |
jtag_uvm_test |
JTAG-001~003 | P0 | ✅ |
总计: 15 个 UVM 测试用例
六、覆盖度要求
6.1 功能覆盖度目标
| 模块类别 | 目标覆盖度 | 当前覆盖度 | 状态 |
|---|---|---|---|
| 处理器核心 | 90% | 60% (间接) | ⚠️ |
| 存储器系统 | 95% | 85% | ⚠️ |
| 总线系统 | 90% | 70% (间接) | ⚠️ |
| 通信接口 | 95% | 85% | ⚠️ |
| 加速器模块 | 90% | 80% | ⚠️ |
| 系统配置 | 80% | 30% | ❌ |
| 总体目标 | 95% | ~85% | ⚠️ |
6.2 代码覆盖度目标
- 行覆盖度 (Line Coverage): ≥ 95%
- 条件覆盖度 (Condition Coverage): ≥ 90%
- 翻转覆盖度 (Toggle Coverage): ≥ 90%
七、测试执行计划
7.1 测试阶段
| 阶段 | 描述 | 测试类型 | 预计时间 |
|---|---|---|---|
| Phase 1: 单元测试 | 各模块独立功能测试 | C测试 + UVM测试 | 2周 |
| Phase 2: 集成测试 | 模块间协同工作测试 | C测试 + UVM测试 | 1周 |
| Phase 3: 系统测试 | 完整系统功能测试 | C测试 | 1周 |
| Phase 4: 回归测试 | 完整回归测试套件 | 所有测试 | 持续 |
7.2 测试优先级
- P0 (必须): 所有基本功能测试,确保系统正常工作
- P1 (重要): 边界条件和错误处理测试
- P2 (可选): 性能测试和压力测试
八、已知问题和限制
8.1 已知问题
- UVM 测试编译失败
- 所有 13 个 UVM 测试编译失败
- 错误:
Cross-module reference resolution error - 状态: 待修复
-
影响: 无法运行 UVM 测试
-
Pinmux 测试不完整
- 只有间接测试,无专门测试用例
- 状态: 待补充
-
影响: Pinmux 覆盖度低
-
SPI1 UVM 测试缺失
- SPI1 只有 C 测试,无 UVM 测试
- 状态: 建议补充
- 影响: SPI1 覆盖度较低
8.2 限制
- GPIO 模块: 代码中已注释,暂不测试
- 物理层测试: 需要 FPGA/ASIC 实现,不在本测试范围内
- 性能测试: 部分性能测试需要硬件支持
九、测试通过标准
9.1 功能测试通过标准
- ✅ 所有 P0 优先级测试用例通过
- ✅ 功能覆盖度达到 95%+
- ✅ 代码覆盖度达到目标要求
- ✅ 无关键缺陷(Critical/High Severity)
9.2 回归测试通过标准
- ✅ 所有测试用例通过率 ≥ 95%
- ✅ 无新增回归缺陷
- ✅ 覆盖度不下降
十、测试维护
10.1 测试用例维护
- 新增功能需要添加对应测试用例
- 修复缺陷需要添加回归测试用例
- 定期审查和更新测试用例
10.2 覆盖度监控
- 每次回归测试后更新覆盖度报告
- 覆盖度下降时需要分析原因并补充测试
十一、附录
11.1 测试用例统计
| 类别 | 数量 | 通过 | 失败 | 待运行 |
|---|---|---|---|---|
| C 测试 | 18 | 17 | 1 | 0 |
| UVM 测试 | 15 | 0 | 15 | 0 |
| 总计 | 33 | 17 | 16 | 0 |
11.2 测试文件位置
- C 测试:
/root/project/yueanic_code_lj_debug/SOC3.0/soc/sw/soc_test_c/ - UVM 测试:
/root/project/yueanic_code_lj_debug/SOC3.0/soc/sw/soc_test_uvm/ - 验证脚本:
/root/project/yueanic_code_lj_debug/SOC3.0/soc/sim/test_lib/test_simlist/soc_test.py
11.3 相关文档
TEST_COVERAGE_ANALYSIS.md- 测试覆盖分析报告VERIFICATION_SUMMARY.md- 验证总结报告VERIFICATION_SCRIPT_ANALYSIS.md- 验证脚本分析
十二、更新历史
| 版本 | 日期 | 作者 | 更新内容 |
|---|---|---|---|
| 1.0 | 2024 | - | 初始版本,创建完整测试计划 |
文档结束