soc/sw/TEST_COVERAGE_ANALYSIS.md
SOC 软件测试覆盖分析报告
一、SOC 硬件模块清单
1.1 APB 子系统外设
根据 apb_subsystem.v 分析,APB 子系统包含以下外设:
| 外设模块 | 实例名 | 说明 | 状态 |
|---|---|---|---|
| SPI0 | u_apb_spi_master_0 |
QSPI 控制器 0 | ✅ 已测试 |
| SPI1 | u_apb_spi_master_1 |
QSPI 控制器 1 | ✅ 已测试 |
| UART0 | i_uart_apb |
UART 控制器 | ✅ 已测试 |
| PWM | i_pwm_apb |
PWM 控制器 | ✅ 已测试 |
| I2C0 | i_i2c_master0_top |
I2C 主控制器 0 | ✅ 已测试 |
| I2C1 | i_i2c_master1_top |
I2C 主控制器 1 | ⚠️ 部分测试 |
| GPIO | i_gpio |
GPIO 控制器 | ❌ 已注释,未测试 |
| Pinmux | apb2pinmux |
引脚复用控制器 | ⚠️ 间接测试 |
1.2 其他 SOC 模块
| 模块 | 说明 | 测试状态 |
|---|---|---|
| SRAM | 静态存储器 | ✅ 已测试 |
| DMA | 直接内存访问 | ✅ 已测试(3个测试) |
| CNN | 神经网络加速器 | ✅ 已测试 |
| ISP | 图像信号处理器 | ✅ 已测试 |
| JTAG | 调试接口 | ✅ 已测试 |
| Ibex Core | RISC-V 处理器核心 | ⚠️ 间接测试 |
二、现有测试用例分析
2.1 C 语言测试 (soc_test_c/)
| 测试用例 | 测试模块 | 基地址 | 状态 | 备注 |
|---|---|---|---|---|
sram_test |
SRAM | 0x10000 | ✅ | 基本读写测试 |
pwm_test |
PWM | - | ✅ | PWM 功能测试 |
i2c_read_test |
I2C0 | - | ✅ | I2C0 读测试 |
i2c_write_test |
I2C0 | - | ✅ | I2C0 写测试 |
uart_test |
UART0 | 0x20010000 | ✅ | UART 通信测试 |
spi1_test |
SPI0 | 0x20000000 | ✅ | 注意:名称是 spi1_test,但测试的是 SPI0 |
spi2_test |
SPI1 | 0x20040000 | ✅ | 测试 SPI1 |
soc_dma_test |
DMA | - | ✅ | DMA 基本测试 |
soc_dma_test1 |
DMA | - | ✅ | DMA 测试变体 1 |
soc_dma_test2 |
DMA | - | ✅ | DMA 测试变体 2 |
cnn_test |
CNN | - | ✅ | CNN 加速器测试 |
isp_test |
ISP | - | ✅ | ISP 功能测试 |
jtag_test |
JTAG | - | ✅ | JTAG 调试测试 |
led |
GPIO? | - | ⚠️ | 可能是简单的 GPIO 测试 |
2.2 UVM 测试 (soc_test_uvm/)
| 测试用例 | 测试模块 | 状态 | 备注 |
|---|---|---|---|
sram_uvm_test |
SRAM | ✅ | UVM 验证环境 |
pwm_uvm_test |
PWM | ✅ | UVM 验证环境 |
i2c_read_uvm_test |
I2C0 | ✅ | UVM 验证环境 |
i2c_write_uvm_test |
I2C0 | ✅ | UVM 验证环境 |
uart_uvm_test |
UART0 | ✅ | UVM 验证环境 |
spi_uvm_test |
SPI | ✅ | UVM 验证环境(可能测试 SPI0) |
soc_dma_uvm_test |
DMA | ✅ | UVM 验证环境 |
soc_dma_uvm_test1 |
DMA | ✅ | UVM 验证环境 |
soc_dma_uvm_test2 |
DMA | ✅ | UVM 验证环境 |
cnn_uvm_test |
CNN | ✅ | UVM 验证环境 |
isp_uvm_test |
ISP | ✅ | UVM 验证环境 |
jtag_uvm_test |
JTAG | ✅ | UVM 验证环境 |
soc_base_test |
SOC 基础 | ✅ | SOC 基础测试 |
三、测试覆盖度分析
3.1 已覆盖模块 ✅
- ✅ SRAM - 完整测试(C + UVM)
- ✅ SPI0 - 完整测试(C: spi1_test + UVM)
- ✅ SPI1 - 完整测试(C: spi2_test)
- ✅ UART0 - 完整测试(C + UVM)
- ✅ PWM - 完整测试(C + UVM)
- ✅ I2C0 - 完整测试(C: read/write + UVM: read/write)
- ✅ DMA - 完整测试(C: 3个测试 + UVM: 3个测试)
- ✅ CNN - 完整测试(C + UVM)
- ✅ ISP - 完整测试(C + UVM)
- ✅ JTAG - 完整测试(C + UVM)
3.2 部分覆盖模块 ⚠️
- ⚠️ I2C1 - 缺失测试
- 只有 I2C0 的测试
- 建议: 添加
i2c1_read_test和i2c1_write_test -
建议: 添加
i2c1_read_uvm_test和i2c1_write_uvm_test -
⚠️ Pinmux - 间接测试
- 在
spi2_test.c中有 Pinmux 配置 - 建议: 添加专门的
pinmux_test测试所有引脚复用功能
3.3 未覆盖模块 ❌
- ❌ GPIO - 完全缺失
- GPIO 模块在代码中被注释掉(
apb_subsystem.v第 541-552 行) - 只有
led测试,可能不是完整的 GPIO 测试 -
建议: 如果 GPIO 功能需要,应取消注释并添加完整测试
-
❌ SPI0 UVM 测试 - 可能缺失
spi_uvm_test可能只测试了 SPI0,需要确认是否也测试 SPI1- 建议: 添加
spi0_uvm_test和spi1_uvm_test明确区分
四、测试命名问题
4.1 命名混淆
问题: spi1_test 实际上测试的是 SPI0,spi2_test 测试的是 SPI1
原因分析:
- SPI0 基地址: 0x20000000 (在 spi1_test.c 中使用)
- SPI1 基地址: 0x20040000 (在 spi2_test.c 中使用)
建议:
- 重命名 spi1_test → spi0_test 或 qspi0_test
- 重命名 spi2_test → spi1_test 或 qspi1_test
- 或者添加注释说明命名规则
五、测试完整性评估
5.1 总体覆盖度: 约 85%
已覆盖: 10/12 主要模块 (83%)
- SRAM, SPI0, SPI1, UART0, PWM, I2C0, DMA, CNN, ISP, JTAG
部分覆盖: 1/12 模块 (8%)
- I2C1 (缺失)
未覆盖: 1/12 模块 (8%)
- GPIO (已注释,可能不需要)
5.2 测试类型覆盖
| 测试类型 | C 测试 | UVM 测试 | 状态 |
|---|---|---|---|
| 功能测试 | ✅ | ✅ | 完整 |
| 边界测试 | ⚠️ | ⚠️ | 部分 |
| 错误处理 | ⚠️ | ⚠️ | 部分 |
| 性能测试 | ❌ | ❌ | 缺失 |
| 压力测试 | ❌ | ❌ | 缺失 |
六、建议补充的测试
6.1 高优先级(必须补充)
- I2C1 测试
i2c1_read_test.c/i2c1_write_test.ci2c1_read_uvm_test.sv/i2c1_write_uvm_test.sv-
原因: I2C1 是硬件中存在的模块,应该有独立测试
-
Pinmux 专门测试
pinmux_test.cpinmux_uvm_test.sv- 原因: Pinmux 是重要的配置模块,需要完整测试
6.2 中优先级(建议补充)
- SPI 测试明确化
- 重命名或添加
spi0_test和spi1_test - 添加
spi0_uvm_test和spi1_uvm_test -
原因: 避免命名混淆,确保两个 SPI 都有完整测试
-
GPIO 测试(如果启用)
- 如果 GPIO 功能需要启用,应取消注释并添加测试
gpio_test.c/gpio_uvm_test.sv
6.3 低优先级(可选补充)
- 边界和错误处理测试
- 各模块的边界条件测试
-
错误注入测试
-
性能和压力测试
- 各模块的性能基准测试
- 长时间运行压力测试
七、总结
7.1 测试覆盖情况
- 核心功能: ✅ 已基本覆盖
- 主要外设: ✅ 已基本覆盖(除 I2C1)
- 特殊功能: ✅ CNN、ISP 已覆盖
- 调试接口: ✅ JTAG 已覆盖
7.2 主要问题
- I2C1 测试缺失 - 硬件存在但无测试
- 命名混淆 -
spi1_test实际测试 SPI0 - GPIO 未测试 - 模块被注释,如需要应启用并测试
- Pinmux 测试不完整 - 只有间接测试
7.3 建议
立即补充:
- I2C1 的 C 和 UVM 测试
- Pinmux 专门测试
改进建议:
- 统一测试命名规范
- 添加测试文档说明各测试对应的硬件模块
- 考虑添加测试覆盖率统计
总体评价: 测试覆盖度较好(约 85%),主要缺失 I2C1 测试。建议补充后可达 95%+ 覆盖度。