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.v、isp_dgain.v、isp_demosaic_lite.v、isp_utils.v
不包含(在 SoC soc/filelist/isp.f):
isp_dma.v、rdma2isp.v、isp2wdma.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_dgain:href/vsync相对输入延迟 3 拍(DLY_CLK=3)。isp_demosaic:含 4 行行缓冲 + 窗口计算,输出相对输入 至少数行延迟;scoreboard 用 行号 + 边界屏蔽 对齐金模型。
5. 算法 Spec
5.1 数字增益 isp_dgain
功能描述:对每个有效像素做线性变换并饱和。
计算步骤(单周期流水线概念):
acc = in_raw × gain(位宽扩展)acc2 = acc + (offset << 4)out_raw = sat( acc2 >> 4 ),饱和到BITS全 1
复位行为:rst_n 低时输出 0;href/vsync 延迟 3 拍输出。
旁路:dgain_en=0 时 vid_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_b 在 out_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 验证目标
- 证明 Demosaic 算法 在典型 Bayer 图样下与参考模型一致。
- 证明 视频时序接口 可被正确驱动与采样。
- 为后续 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=1、dgain_en=0 时整帧 RGB 与 C model 一致。
前置条件:
ISP/sim下已make compcmodel/isp_demosaic存在且可执行
测试数据:
- Bayer RGGB 棋盘;R/B 像素 +0x40
isp_width=256,isp_height=20,isp_dummy_cycle=60
步骤:
| 步 | 操作 | 期望 |
|---|---|---|
| 1 | make run_isp_test |
目录 isp_test/ 生成 |
| 2 | 检查 log 无 UVM_FATAL |
— |
| 3 | 确认生成 isp_input.txt、result_r/g/b.txt |
文件非空 |
| 4 | 检查 UVM_ERROR 计数 |
0 |
| 5 | (可选)Verdi 看 dm_href_o 与 in_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 事务:
frame_start==1→ 打开三个金文件。line_cnt > 1开始按行读 16 像素块。- 比对条件(同时满足才比):
line_cnt > 3pixl_cnt > 3且pixl_cnt < 253c_data != 0且real_data != 0- 通过:
|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。