ISP_Spec与Testplan.md

ISP — 功能 Spec 与验证 Testplan(详细版)

工程路径/project/SOC_V1.1/To_Customer/ISP/
关联IP验证环境资料.md(UVM 环境 / Makefile / Test 运行)


第一部分:功能 Spec

1. 概述

1.1 IP 名称与版本

内容
顶层模块 isp_top
功能 Bayer RAW 视频流 → 可选 数字增益 → 可选 去马赛克 → RGB888(8bit/通道)
时钟域 单时钟 pclk
配置方式 顶层端口(非 APB 寄存器)

1.2 交付范围

本 IP 验证包包含sim/dut.f):

  • isp_top.visp_dgain.visp_demosaic_lite.visp_utils.v

不包含(在 SoC soc/filelist/isp.f):

  • isp_dma.vrdma2isp.visp2wdma.v —— AHB/DMA 灌图与抽数

2. 模块层次

isp_top
├── isp_dgain          # 数字增益(3 拍延迟)
├── vid_mux (BITS)     # dgain 旁路
├── isp_demosaic       # 5×5 Bayer → RGB
├── vid_mux (BITS*3)   # demosaic 旁路
└── (参数 WIDTH/HEIGHT/BITS/BAYER)
子模块 源文件 输入 输出
isp_dgain isp_dgain.v RAW + href/vsync RAW' + href'/vsync'
isp_demosaic isp_demosaic_lite.v RAW' + href/vsync R,G,B + href/vsync
shift_register isp_utils.v 行像素流 5 行窗口 tap
vid_mux isp_top.v 两路数据 + sel 选通输出

3. 参数说明

参数 类型 默认值 合法范围 说明
BITS int 8 8(本工程) 像素位宽
WIDTH int 256(TB)/ 1280(dgain) ≤ 行缓冲深度 每行最大像素数
HEIGHT int 10(TB)/ 960 帧行数上界 与 line buffer 深度相关
BAYER int 0 0~3 见下表

BAYER 模式编码isp_demosaic):

模式 说明
0 RGGB 偶行偶列 R
1 GRBG
2 GBRG
3 BGGR

实际像素类型还受 行奇偶 odd_line列奇偶 odd_pix 影响:
p33_fmt = BAYER[1:0] ^ {odd_line, odd_pix} → 得到 FMT_R / FMT_Gr / FMT_Gb / FMT_B。


4. 端口 Spec

4.1 完整端口表

端口 方向 位宽 同步域 描述
pclk in 1 像素时钟,上升沿采样
rst_n in 1 异步 低有效复位
in_href in 1 pclk 输入行有效,高=有效像素
in_vsync in 1 pclk 帧同步;TB 采用帧首短脉冲高
in_raw in BITS pclk Bayer 原始像素
dm_href_o out 1 pclk 输出行有效
dm_vsync_o out 1 pclk 输出帧同步
dm_r_o out BITS pclk 红通道
dm_g_o out BITS pclk 绿通道
dm_b_o out BITS pclk 蓝通道
dgain_en in 1 pclk 1=启用 dgain 路径
demosic_en in 1 pclk 1=启用 demosaic
dgain_gain in 8 pclk 增益系数(见 5.1)
dgain_offset in BITS pclk 加性偏移

4.2 视频时序 Spec

合法输入波形(验证环境 isp_driver 为参考实现):

阶段 周期数 in_vsync in_href in_raw
帧起始 10 × pclk 1 0 0
有效行 isp_width × pclk 0 1 像素数据
行消隐 isp_dummy_cycle × pclk 0 0 0
重复 isp_height

输出延迟

  • isp_dgainhref/vsync 相对输入延迟 3 拍DLY_CLK=3)。
  • isp_demosaic:含 4 行行缓冲 + 窗口计算,输出相对输入 至少数行延迟;scoreboard 用 行号 + 边界屏蔽 对齐金模型。

5. 算法 Spec

5.1 数字增益 isp_dgain

功能描述:对每个有效像素做线性变换并饱和。

计算步骤(单周期流水线概念):

  1. acc = in_raw × gain(位宽扩展)
  2. acc2 = acc + (offset << 4)
  3. out_raw = sat( acc2 >> 4 ),饱和到 BITS 全 1

复位行为rst_n 低时输出 0;href/vsync 延迟 3 拍输出。

旁路dgain_en=0vid_mux 选通 in_* 直连 demosaic 输入。

5.2 去马赛克 isp_demosaic

功能描述:基于 5×5 空间邻域 的 Bayer 插值,输出 RGB。

关键内部状态

状态 更新条件 用途
odd_pix href 低时清 0;href 高时每拍翻转 列奇偶
odd_line vsync 清 0;href 下降沿翻转 行奇偶
p11…p55 每拍移位 5×5 窗口

输出out_r/out_g/out_bout_href 有效时更新;无效时为 0。

旁路demosic_en=0 时 RGB 三路均赋值为输入 RAW(经 dgain 后)。

5.3 参考模型(C model)

文件 作用
cmodel/isp.cpp 与 RTL 同功能的软件实现
isp_demosaic 可执行文件,读 isp_input.txt,写 result_*.txt

输入文件格式:文本,每行 16 个十六进制字节,空格分隔,如:
0x12 0x34 ...(共 16 个)


6. 性能与边界

说明
最大行宽 WIDTH 参数与 shift_register 限制,TB 约束到 512
增益范围 dgain_gain 约束 [1,100];过大导致饱和
边界像素 窗口不足时插值精度下降 → scoreboard 屏蔽前几行/列
仿真超时 isp_tb_top 固定 #100000ns,超大帧需改 testbench

第二部分:验证 Testplan

7. 验证目标与策略

7.1 验证目标

  1. 证明 Demosaic 算法 在典型 Bayer 图样下与参考模型一致。
  2. 证明 视频时序接口 可被正确驱动与采样。
  3. 为后续 SoC 集成提供 像素级金标准 基线。

7.2 验证方法

方法 说明
参考模型比对 主方法;容差 ±2
UVM 约束随机 帧尺寸、dummy、gain
断言 本包未单独 SVA;依赖 SB
覆盖率 VCS line/cond/tgl

7.3 不在范围

  • DMA 描述符、AHB 带宽、多时钟
  • dgain_en=1 的系统性随机(可扩展用例)
  • 四种 BAYER 模式全覆盖(当前 TB 固定 RGGB 图样)

8. 需求跟踪

Req ID 需求 优先级 验证方法
ISP-R001 复位后无 X P0 波形 + log
ISP-R002 href/vsync 符合 4.2 节 P0 波形
ISP-R003 demosaic 输出正确 P0 SB vs C model
ISP-R004 可配置宽高 P1 randomize
ISP-R005 dgain 路径可仿真 P2 扩展 sequence
ISP-R006 覆盖率达标 P2 URG/Verdi

9. 测试用例矩阵

Case ID 名称 UVM Test Sequence 优先级 自动化
ISP-T01 基本 Demosaic isp_test isp_basic_sequence P0 make run_isp_test
ISP-T02 大帧随机 (扩展) isp_height/width P1 手工改约束
ISP-T03 dgain 使能 (扩展) dgain_en==1 P2 待建

10. 用例详细步骤

ISP-T01 — 基本 Demosaic(主回归用例)

目的:验证 demosic_en=1dgain_en=0 时整帧 RGB 与 C model 一致。

前置条件

  • ISP/sim 下已 make comp
  • cmodel/isp_demosaic 存在且可执行

测试数据

  • Bayer RGGB 棋盘;R/B 像素 +0x40
  • isp_width=256isp_height=20isp_dummy_cycle=60

步骤

操作 期望
1 make run_isp_test 目录 isp_test/ 生成
2 检查 log 无 UVM_FATAL
3 确认生成 isp_input.txtresult_r/g/b.txt 文件非空
4 检查 UVM_ERROR 计数 0
5 (可选)Verdi 看 dm_href_oin_href 行数 20 行有效输出

通过准则:0 UVM_ERROR;仿真正常结束。

失败分析

现象 可能原因
找不到 isp_demosaic 未 cp 到 run 目录
大量 SB mismatch 金文件未更新或 Bayer 图样与 model 不一致
超时 帧太大或 driver 死循环

ISP-T02 — 参数随机(建议扩展)

目的:覆盖 isp_txn 约束空间。

约束isp_txn.sv):

  • isp_width ∈ [10, 512]
  • isp_height ∈ [10, 512]
  • isp_dummy_cycle ∈ [50, 512]
  • dgain_gain ∈ [1, 100]

步骤:复制 isp_test,循环 N 次 randomize;或命令行改 seed。

通过准则:全部随机化成功且 0 error。


11. Scoreboard 规则(判定依据)

对每个 isp_line 事务:

  1. frame_start==1 → 打开三个金文件。
  2. line_cnt > 1 开始按行读 16 像素块。
  3. 比对条件(同时满足才比):
  4. line_cnt > 3
  5. pixl_cnt > 3pixl_cnt < 253
  6. c_data != 0real_data != 0
  7. 通过:|real_data - c_data| ≤ 2(R/G/B 分别)。

12. 覆盖率计划

层次 目标 采集
isp_demosaic 分支:四种 FMT_* 路径 line+cond
isp_dgain 饱和路径 tgl
isp_top mux sel 0/1 cond
vid_mux 旁路/使能 line

合并:多次 run_isp_test 后 merge coverage.vdb(课程工具链为准)。


13. 出口准则

# 准则
1 ISP-T01 连续 3 次回归 PASS
2 0 UVM_FATAL / UVM_ERROR
3 核心模块 line coverage ≥ 课程要求(由讲师定义)
4 已知限制已文档化(dgain 随机、BAYER 模式未全扫)

14. 与 SoC 集成的 Testplan 衔接

SoC 场景 本 IP 包关系
soc/sw/isp_test 增加 DMA/AHB;像素算法应与本包结论一致
调试建议 IP 台 PASS 后再查 SoC 的 DMA 地址与 isp_dma 寄存器

详见 SOC验证环境详解.md