1 DV Goal
1.1 功能验证
描述功能验证所使用的方法学:
基于UVM的动态仿真
基于assertion的形式验证
1.2 性能验证
描述性能验证的场景(诸如吞吐率,帧率,分辨率等等)
1.3 硬件加速(fpga/emulator平台)
描述使用硬件加速平台验证的场景(对算法效果的验证)
1.4 功耗验证
使用PTPX做功耗分析,以验证是否符合要求
2 Design Feature
2.1 IP function
IP的主要功能描述
IP在系统中的位置描述
IP的实际应用场景描述
2.2 Block diagram
描述IP的框图,理清数据流,找出验证重难点。
2.3 Interface
描述所有接口的特性,对于时钟,总线和中断需要详细说明。
![](/images/dv-uvm-testplan/1.jpg)
3 Verification Feature
3.1 基于接口
- RTL需要驱动什么样的transaction
- transaction中value的random范围和weight
- transaction的sequence如何
- transaction的密度
- transaction违例情况(注错和illegal test)
- interface transaction之间的配合等
3.2 基于功能
- 遵循RTL中主要控制路径和数据路径,列举必须验证的transformation(信息转换)、decision(例如仲裁)和内部资源极限情况(例如FIFO空满、Buffer空满)等。
- RTL相关配置有哪些(parameter、register等)。
- 数据的格式和可能进行的转换(例如AXI和CHI的packet数据格式明显就不一样)。
- 触发和影响transformation的敏感值是什么(比如根据Opcode,可能进行加减乘除等运算)。
- 可能得transformation sequence有哪些?
- Data的order如何(比如DSB会stall pipeline直至前面transaction为空)?
- 存在哪些错误检测机制,它们是如何被触发的,以及触发后是如何报告错误的。
- 如果错误机制一直存在,RTL会怎样。
- 如果多个错误或者连续的错误发生,RTL会怎样。
3.3 基于性能
- 最高和最低的性能在什么条件下会达到(比如最大AXI outstanding的条件)。
- 在最低和最高配置下,RTL的性能测量(比如在不同配置下,Buffer数目可能不一样,对performance的影响也不一样)。
- 最快处理速度的极限在哪里。
- RTL的timeout等机制多大。
- RTL持续得不到仲裁会怎么样。
3.4 基于系统架构
- 基于对架构的详细了解,考虑架构有哪些限制。
- 架构中资源的瓶颈在哪。
- 多个request同时申请资源会怎样。
- 多个数据流和控制流是否会互相影响。
4 Environment Description
4.1 Block diagram
根据IP的验证环境画出结构框图,包括top_tb, env, 所有agent, 各个组件之间的数据流关系。
4.2 Vip Agent
描述所使用的VIP配置和特点(包括user specified特性)。
如果是amba vip,给出configuration, define, transaction配置图,并解释说明。
如果有多个vip(master or slave),需要描述各个vip的地址范围划分,是否共享同一片memory。
详细列出vip 的时钟,复位关系,最大delay值,delay的权重分布,预期的平均带宽值。
4.3 Design Agent
描述agent的特性和可随机的参数。需要描述基本功能,例化方式(是master还是slave),相比较common的agent,有哪些特殊改动。针对agent中可配置的部分,需要描述如何配置的(比如说dvp agent中的hsp,hbp等等)
4.4 UVM RAL Model
描述寄存器模型产生方式。需要说明特殊处理的部分:
比如针对RC,WC寄存器,针对单field RO寄存器,如何适配的?
寄存器模型的基地址是否设置?
4.5 Reference Model
描述参考模型的结构和接口,C模型处理的输入数据是什么,如何获取,输出数据是什么,如何传递给scb。在什么时机点调用cmodel,针对多帧的场景,如何控制cmodel多次调用的?
4.6 Stimulus strategy
4.6.1 boot sequence策略
IP在boot的时候有哪些特殊操作。哪些寄存器先配,哪些后配,在start之前需要注意什么?(比如要等到某些LUT完成中断产生)
如果有shadow控制,说明怎样配置的shadow start。
4.6.2 ISR sequence策略
描述中断服务程序的机制。中断原因监测,针对每个中断原因,如何响应?
4.6.3 function sequence策略
需要说明图片数据如何得到,全随机?在图片集中随机?(图片集的数量与位置描述一下)
需要说明LUT表的数据如何得到,全随机?特定表集合?c或者python程序产生?
描述IP 的UVM环境中,是否有采用多个buffer,buffer的地址和切换是如何管理的?
4.6.4 error sequence策略
需要说明有哪些错误sequence,是如何产生错误,如何检查错误,如何比对结果。
4.7 Functional Coverage
4.7.1 同寄存器列表中的参数配置
哪些寄存器有special value,描述基本情况,寄存器tie 0或1的原因,评估寄存器最大最小值的合理性。
4.7.2 寄存器交叉覆盖
哪些寄存器需要做交叉覆盖,填写交叉覆盖的表格。
4.7.3 特定direct case覆盖寄存器
哪些derect case覆盖哪些特定寄存器
4.8 Self-checking strategy
针对浮点数计算,C是否具有精度损失,是否存在模糊匹配,如何匹配?
针对输出接口,是否具有时序检查模型,描述检查范围。
针对VIP自己的检查,是否存在某些检查点被关闭,比如说数据X态,timeout配置等等?为什么需要关闭
5 Building and running test
We are using our in-house developed regression tool for building and running our tests and regressions.
6 Testplan
需要详细描述所有的yaml文件表示的测试功能,以及各个测试项哪些寄存器是配置的特定值,寄存器的随机范围,timeout配置多少ns,有无总线响应配置,每个yaml对应的总case数量,一个yaml对应多个case的,需要在testcase中列出。
![](/images/dv-uvm-testplan/2.jpg)
7 Result
7.1 Code Coverage
检查line,condition,branch,assert 的覆盖率结果,分析不达标的原因。
7.2 Function Coverage of DUT
所有定向测试完成。
7.3 Function Coverage of VIP
VIP报出来的coverage,主要包括读写的burst length, 读写out of order, 读写interlave, 读写outstanding几项覆盖情况