IC 验证篇(09-02)UVM 验证方案和测试分解

本文介绍了芯片原厂学习课程中的第九篇章——IC验证篇,详细阐述了UVM验证方案的制定,包括文档流程、输入文档、验证需求、测试点分解以及验证环境的划分和流程。此外,还涵盖了UVM测试分解的前仿验证流程、测试点定义和分类,旨在确保验证的完备性、准确性和操作性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

芯片原厂必学课程 - 第九篇章 - IC 验证篇

09-02 UVM 验证方案和测试分解

新芯设计:专注,积累,探索,挑战

引言

  NOTES:本文来自《芯片原厂必学课程 - 第九篇章 - IC 验证篇》技术专栏


🌏 一、UVM 验证方案

1. 验证方案的内容

  ✉ 文档流程,严格遵守:输出验证方案之前,首先要求熟悉 SPEC 内容,这里的时间占比要充分

  ✉ 输入文档,验证依据:列出所有的参考文件和版本号码,同时要求保持时刻刷新的准备

  ✉ 验证的需求:从设计的角度出发,要求全部覆盖的、容易出错的、重要功能的

  ✉ 测试点分解:从验证的角度出发,要求覆盖整个 SPEC 的、不小于验证需求的、特殊场景之下的

  ✉ 验证的环境:激励 Transaction,激励组件 Driver,监控组件 Monitor,参考模型 Reference,记分板 Scoreboard,逻辑探针 Inner Signal 等等的架构描述

2. 验证环境的划分

  ✉ UT 模块测试:取出单个模块,创造周围环境,包括输入激励和记录输出,具有快速运行,完备验证的优点(模块分割验证)

  ✉ IT 集成测试:在整个系统中验证子模块,输入激励是从 CPU 到模块的顶层,记录输出是在芯片的管脚上

  ✉ ST 系统测试:同上,IT 是虚假的 CPU/DMA(直接通过总线输入激励),ST 是真实的 CPU/DMA(写 C 测试程序)

09-02-01 经典的 ST 系统测试验证方案

3. 验证环境的流程

  ✉ 步骤一:由验证需求和模块接口确定环境使用的部件以及模型

  ✉ 步骤二:由外挂部件来构造环境内部结构,确定数据对比方式,主要是通过数据的 B2B,即 from Bit to Bit is all matching

# PYTHON 语言实现的文件对比操作
import operator
import numpy as np

N = 10000

riscv_core_verilog = []
riscv_core_cmodels = []

#import v & c data.
with open("./riscv_core_v.txt", "r") as aaa_: #import verilog data.
    aaa__ = [line.strip() for line in aaa_]   #delete unnecessary space.

with open("./riscv_core_c.txt", "r") as bbb_: #import c model data.
    bbb__ = [line.strip() for line in bbb_]   #delete unnecessary space.

#looking for the num of data comparision, and store in list.
for i in range(0, N):
    riscv_core_verilog.append(aaa__[i])
    riscv_core_cmodels.append(bbb__[i])

#mem compare results.
print('\n\n', "1. The Total Number of Comparision is: ")
print("***********************************************")
print("**********", len(riscv_core_verilog), "*********")
print("***********************************************")

print('\n', "2. The " "FFT" " Comparision Result is: ")
if(operator.eq(riscv_core_verilog, riscv_core_cmodels)\
and (len(riscv_core_verilog) == len(riscv_core_cmodels))):
    print("*******************************************")
    print("************* MEM COMPARE PASS ************")
    print("*******************************************")
else:
    print("*******************************************")
    print("************* MEM COMPARE FAIL ************")
    print("*******************************************")

  ✉ 步骤三:循序渐进把部件挂上接口,确定无误之后再挂下一个

  ✉ 步骤四:按照测试点编写用例测试


🌏 二、UVM 测试分解

1. 前仿验证流程

  ✉ 熟悉 SPEC 文档 -> UT/IT/ST 的验证策略制定 -> 测试点分解 -> 验证方案 -> 验证环境 -> 冒烟测试 -> 验证执行 -> 验证报告

2. 测试点定义

  ✉ 指的是从 IC 验证工程师的角度,能够映射 DUT 支持的全部应用场景,最终可以指导验证人员来进行下一步的验证工作

3. 测试点分类

  ✉ 场景类,功能类,性能类,接口类,异常类,白盒测试点(设计提供)

4. 测试点分解

  ✉ 依据 1:从软件算法,相关的协议文档的角度,主要是从应用层面

  ✉ 依据 2:从芯片规格,架构文档,SPEC,详细的设计文档的角度,主要是从硬件层面

  ✉ 目标 1:保证验证的完备性

  ✉ 目标 2:保证验证的准确性

  ✉ 目标 3:保证验证的操作性

  ✉ 关注 1:输入的正确性和完备性

  ✉ 关注 2:模块的时钟和复位

  ✉ 关注 3:系统资源

  ✉ 关注 4:边界点

  ✉ 关注 5:异常场景

  ✉ 关注 6:FIFO/FSM/CTRL 等繁忙的部分

  ✉ 类型 1:离散型:主要是侧重相关的应用场景的分解和梳理,如支持多种模式则启动多种模式的配置

  ✉ 类型 2:聚合型:主要是侧重单个的应用场景的归类,偏向于定向测试,如配置具体的寄存器令其工作在某一种工作模式

  ✉ 步骤 1:对设计规格进行细分和合理拓展,从而得到测试特性

  ✉ 步骤 2:以测试特性为单位,进一步分解出较为合理的测试点

  ✉ 步骤 3:提取验证对象,以功能覆盖率模型检查测试点完备性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新芯设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值