soc/sw/SOC_TESTPLAN.md

SOC 验证测试计划 (Test Plan)

文档信息

  • 项目: SOC3.0
  • 版本: 1.0
  • 日期: 2024
  • 状态: 进行中

一、测试目标和范围

1.1 测试目标

本测试计划旨在全面验证 SOC3.0 系统的功能正确性、可靠性和性能,确保:

  1. 功能正确性: 所有硬件模块按照设计规范正确工作
  2. 接口兼容性: AHB/APB 总线协议正确实现
  3. 系统集成: 各模块协同工作正常
  4. 边界条件: 异常和边界情况得到正确处理
  5. 覆盖率: 达到功能覆盖率目标(目标: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_testpinmux_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 已知问题

  1. UVM 测试编译失败
  2. 所有 13 个 UVM 测试编译失败
  3. 错误: Cross-module reference resolution error
  4. 状态: 待修复
  5. 影响: 无法运行 UVM 测试

  6. Pinmux 测试不完整

  7. 只有间接测试,无专门测试用例
  8. 状态: 待补充
  9. 影响: Pinmux 覆盖度低

  10. SPI1 UVM 测试缺失

  11. SPI1 只有 C 测试,无 UVM 测试
  12. 状态: 建议补充
  13. 影响: SPI1 覆盖度较低

8.2 限制

  1. GPIO 模块: 代码中已注释,暂不测试
  2. 物理层测试: 需要 FPGA/ASIC 实现,不在本测试范围内
  3. 性能测试: 部分性能测试需要硬件支持

九、测试通过标准

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 - 初始版本,创建完整测试计划

文档结束