当前位置: 首页 > article >正文

1.6 学习测试用例(Test)分为几步?

文章目录

  • 前言
  • 一、什么是UVM中的测试用例(Test)?
  • 二、如何理解UVM中的测试用例?
  • 三、如何使用UVM中的测试用例?
  • 四、实操代码示例
    • 4.1代码结构
    • 4.2 代码实现
      • 4.2.1 a. 测试用例类的定义和实现
      • 4.2.2 b. 测试环境的构建和配置
      • 4.2.3 c. 测试序列的创建和启动
      • 4.2.4 d. 仿真执行的顶层调用
    • 4.3 代码的语法和功能分析
      • 4.3.1 a. 测试用例类
      • 4.3.2 b. 测试环境类
      • 4.3.3 c. 测试序列类
      • 4.3.4 d. 顶层Testbench


前言

之前在学习UVM时,测试用例是整个验证流程的起点,它负责控制整个测试的执行过程。
比如把测试用例比作一个导演,它负责指挥整个测试的演员(各个验证组件)按照剧本(测试流程)来表演。
接下来,使用测试用例需要按照一定的步骤来进行,比如创建测试类、实例化环境、启动测试序列等。
比如为什么要用uvm_component_utils宏,为什么要用build_phase和main_phase这些phase。


一、什么是UVM中的测试用例(Test)?

在UVM(Universal Verification Methodology)中,测试用例(Test)是用于验证设计单元(DUT)功能的顶层类。它继承自uvm_test,定义了测试的执行流程,包括初始化环境、启动测试序列、监视测试进度以及清理工作。

二、如何理解UVM中的测试用例?

  1. 组织测试流程:测试用例提供了一个框架,用于组织测试的执行流程,包括初始化、测试执行和结果分析等步骤。
  2. 管理测试组件:测试用例可以实例化和配置UVM环境中的各个组件,如agent、driver、monitor、scoreboard等。
  3. 启动测试序列:测试用例可以启动测试序列,生成激励信号,驱动DUT进行测试。
  4. 结果分析与报告:测试用例可以收集和报告测试结果,包括测试通过与否、覆盖率信息等。

三、如何使用UVM中的测试用例?

使用UVM中的测试用例需要以下几步:

  1. 创建测试用例类:创建一个继承自uvm_test的类,并在其中定义所需的组件和方法。
  2. 实例化环境:在build_phase中实例化UVM环境。
  3. 启动测试序列:在main_phase中启动测试序列。
  4. 结果分析与报告:在report_phase中分析测试结果并报告。

具体操作步骤:
以下是使用UVM测试用例的详细步骤:

  1. 步骤1:创建测试用例类
    • 继承自uvm_test基类。
    • 使用uvm_component_utils宏注册到UVM工厂。
  2. 步骤2:构建测试环境
    • build_phase中创建并配置测试环境(Environment)。
    • 通过uvm_config_db设置环境参数(如接口、配置对象等)。
  3. 步骤3:创建测试序列
    • 定义测试序列类,继承自uvm_sequence
    • 在序列的body任务中实现具体的测试场景。
  4. 步骤4:启动测试序列
    • 在测试用例的run_phase中创建并启动测试序列。
    • 使用raise_objectiondrop_objection控制仿真结束。
  5. 步骤5:顶层调用
    • 在顶层Testbench中通过run_test启动测试用例。
    • 使用uvm_config_db指定默认测试用例。

四、实操代码示例

以下是一个完整的UVM测试用例示例,验证一个简单的加法器(Adder)功能。

4.1代码结构

  • 测试用例类:adder_test
  • 测试环境类:adder_env
  • 测试序列类:adder_sequence
  • 顶层Testbench:启动测试用例

4.2 代码实现

4.2.1 a. 测试用例类的定义和实现

class adder_test extends uvm_test;`uvm_component_utils(adder_test)  // 注册到UVM工厂adder_env env;  // 测试环境实例function new(string name, uvm_component parent);super.new(name, parent);endfunctionvirtual function void build_phase(uvm_phase phase);super.build_phase(phase);env = adder_env::type_id::create("env", this);  // 创建测试环境endfunctionvirtual task run_phase(uvm_phase phase);adder_sequence seq = adder_sequence::type_id::create("seq");  // 创建测试序列phase.raise_objection(this);  // 阻止仿真结束seq.start(env.agent.sequencer);  // 启动序列phase.drop_objection(this);  // 允许仿真结束endtask
endclass

4.2.2 b. 测试环境的构建和配置

class adder_env extends uvm_env;`uvm_component_utils(adder_env)  // 注册到UVM工厂adder_agent agent;  // Agent实例function new(string name, uvm_component parent);super.new(name, parent);endfunctionvirtual function void build_phase(uvm_phase phase);super.build_phase(phase);agent = adder_agent::type_id::create("agent", this);  // 创建Agentendfunction
endclass

4.2.3 c. 测试序列的创建和启动

class adder_sequence extends uvm_sequence#(adder_transaction);`uvm_object_utils(adder_sequence)  // 注册到UVM工厂rand int num_transactions = 10;  // 随机生成10笔交易task body();repeat (num_transactions) begin`uvm_do(req)  // 自动创建并发送transactionendendtask
endclass

4.2.4 d. 仿真执行的顶层调用

module top_tb;initial begin// 指定默认测试用例uvm_config_db#(uvm_object_wrapper)::set(null, "uvm_test_top", "default_sequence", adder_test::get_type());run_test("adder_test");  // 启动测试用例end
endmodule

4.3 代码的语法和功能分析

4.3.1 a. 测试用例类

  • uvm_component_utils:注册测试用例到UVM工厂,支持动态创建。
  • build_phase:创建测试环境实例。
  • run_phase:启动测试序列,并通过objection机制控制仿真结束。

4.3.2 b. 测试环境类

  • adder_agent:Agent是UVM中的核心组件,负责驱动和监控DUT。
  • build_phase:在构建阶段创建Agent实例。

4.3.3 c. 测试序列类

  • uvm_sequence:用于生成测试激励。
  • uvm_do宏:自动创建并发送transaction到Driver。

4.3.4 d. 顶层Testbench

  • uvm_config_db:配置默认测试用例。
  • run_test:启动UVM测试。

相关文章:

1.6 学习测试用例(Test)分为几步?

文章目录 前言一、什么是UVM中的测试用例(Test)?二、如何理解UVM中的测试用例?三、如何使用UVM中的测试用例?四、实操代码示例4.1代码结构4.2 代码实现4.2.1 a. 测试用例类的定义和实现4.2.2 b. 测试环境的构建和配置4…...

PDF2.0 投影注释(Projection annotations)

投影注释是PDF2.0新标准中新增加的注释类型,属于标记注释的子类型,因此,它具有很多其他标记注释的功能。 然而,投影注释仅在特定的运行时环境的上下文中有效,例如已激活的3D模型。 投影注释的注释字典包含了所有注释字…...

【AIGC提示词系统】基于 DeepSeek R1 + ClaudeAI 易经占卜系统

上篇因为是VIP,这篇来一个免费的 提示词在最下方,喜欢的点个关注吧 引言 在人工智能与传统文化交融的今天,如何让AI系统能够传递传统易经文化的智慧,同时保持易经本身的神秘感和权威性,是一个极具挑战性的课题。本文将…...

OpenAI 实战进阶教程 - 第十节 : 结合第三方工具的向量数据库Pinecone

面向读者群体 本节课程主要面向有一定编程基础和数据处理经验的计算机从业人员,如后端开发工程师、数据工程师以及对 AI 应用有浓厚兴趣的技术人员。即使你之前没使用过向量数据库,也可以通过本节的实操内容快速上手,为企业或个人项目构建强…...

深入Linux系列之进程地址空间

深入Linux系列之进程地址空间 1.引入 那么在之前的学习中,我们知道我们创建一个子进程的话,我们可以在代码层面调用fork函数来创建我们的子进程,那么fork函数的返回值根据我们当前所处进程的上下文是返回不同的值,它在父进程中返…...

AWK系统学习指南:从文本处理到数据分析的终极武器 介绍

目录 一、AWK核心设计哲学解析 1.1 记录与字段的原子模型 1.2 模式-动作范式 二、AWK编程语言深度解析 2.1 控制结构 说明: 2.2 关联数组 代码说明: 示例输入和输出: 注意事项: 2.3 内置函数库 三、高级应用技巧 3.1…...

250207-MacOS修改Ollama模型下载及运行的路径

在 macOS 上,Ollama 默认将模型存储在 ~/.ollama/models 目录。如果您希望更改模型的存储路径,可以通过设置环境变量 OLLAMA_MODELS 来实现。具体步骤如下: 选择新的模型存储目录:首先,确定您希望存储模型的目标目录路…...

1、http介绍

一、HTTP 和 HTTPS 简介 HTTP(HyperText Transfer Protocol) 用途:用于网页数据传输(不加密)。协议特性:以明文形式传输数据,默认端口 80,无身份验证和完整性保护。典型场景&#xf…...

半导体行业跨网文件交换系统

在当今这个数字化转型的时代,半导体行业作为技术密集型产业,正面临着前所未有的信息安全挑战。随着企业内外网隔离措施的加强,如何实现既安全又高效的跨网文件交换,成为了众多半导体企业的一大难题。 特别是在研发和生产过程中产生…...

使用GD32F470的硬件SPI读写W25Q64

代码简单改下引脚定义便可以使用! 使用的单片机具体型号:GD32F470ZGT6 简单介绍下W25Q64: /* W25Q64 性能参数 */ /* 容量:8MByte 64Mbit */ /* 有128个块,每个块有64KByte */ /* 每个块有16个扇区,每个…...

02为什么 OD门和 OC门输出必须加上拉电阻?

为什么 OD(开漏)门和 OC(开集)门输出必须加上拉电阻? 1、首先一点,知道OD是说的MOS管,OC是说的三极管,二者的区别与联系大家应该都懂。 2、以OC门举例,芯片的OC门内部结…...

保姆级教程--DeepSeek部署

以DeepSeek-R1或其他类似模型为例,涵盖环境配置、代码部署和运行测试的全流程: 准备工作 1. 注册 Cloud Studio - 访问 [Cloud Studio 官网](https://cloudstudio.net/),使用腾讯云账号登录。 - 完成实名认证(如需长期使用…...

AI方案调研与实践 (不定期补充)

目录 说明 1. AI云主机准备 1.1 Ollama配置 设置模型保存路径 配置模型驻留内存时间 查看GPU状况命令: nvidia-smi 2. Deepseek 2.1 安装与使用 3. LobeChat配置 参考 说明 调研并实例化各种AI方案,探索训练/使用方式的最佳实践。 1. AI云主机准备 可以去一…...

人工智能大模型之模型蒸馏与知识蒸馏

一、背景介绍 随着人工智能技术的不断发展,大模型在各个领域的应用也越来越广泛。模型蒸馏(Model Distillation)和知识蒸馏(Knowledge Distillation)是两种非常重要的模型压缩技术,它们可以帮助我们将大型…...

[手机Linux] onepluse6T 系统重新分区

一,刷入TWRP 1. 电脑下载 Fastboot 工具(解压备用)和对应机型 TWRP(.img 后缀文件,将其放入前面解压的文件夹里) 或者直接这里下载:TWRP 2. 将手机关机,长按音量上和下键 开机键 进入 fastbo…...

k8s部署elasticsearch

前置环境:已部署k8s集群,ip地址为 192.168.10.1~192.168.10.5,总共5台机器。 1. 创建provisioner制备器(如果已存在,则不需要) 制备器的具体部署方式,参考我之前的文章:k8s部署rab…...

知识图谱智能应用系统:数据分析与挖掘技术文档

一、概述 在知识图谱智能应用系统中,数据分析与挖掘模块是实现知识发现和智能应用的核心环节。该模块负责处理和分析来自数据采集与预处理模块的结构化和半结构化数据,提取有价值的知识,并将其转化为可用于知识图谱构建和应用的三元组数据。本技术文档详细介绍了数据分析与…...

YAML中的`---`:文档分隔符

前言 YAML(YAML Ain’t Markup Language)是一种简洁且易于人类阅读的数据序列化标准,广泛用于配置文件、数据存储以及应用程序之间的数据交换。然而,对于许多初学者来说,YAML的一些特性可能不太直观,比如-…...

本地部署DeepSeek

下载Docker Docker Desktop: The #1 Containerization Tool for Developers | Docker 下载安装ollama Download Ollama on macOS 下载完成后解压运行 终端输入 Ollama --version 输出对应版本号即为下载成功 如果没有弹出上述图片,浏览器输入http://localhos…...

21.[前端开发]Day21-HTML5新增内容-CSS函数-BFC-媒体查询

王者荣耀-网页缩小的问题处理 为什么会产生这个问题?怎么去解决 可以给body设置最小宽度 1 HTML5新增元素 HTML5语义化元素 HTML5其他新增元素 2 Video、Audio元素 HTML5新增元素 - video video支持的视频格式 video的兼容性写法 HTML5新增元素 - audio audio…...

nbmade-boot调用deepseek的api过程与显示

希望大家一起能参与我的新开源项目nbmade-boot: 宁波智能制造低代码实训平台 下面简单介绍调用最近大红的AI :deepseek的api过程与显示,包括前后端代码与效果图 一、后端代码 1、几个基础的java类 DeepSeekRequest .java package com.nbcio.demo.do…...

Linux:安装 node 及 nvm node 版本管理工具(ubuntu )

目录 方法一:手动下载安装文件安装方法二:curl安装 方法一:手动下载安装文件安装 git clone 远程镜像 git clone https://gitee.com/mirrors/nvm安装 nvm bash install.sh刷新配置,使配置在终端生效 // 方法 1 source /root/.…...

微服务日志查询难解决方案-EFK

前言 在微服务项目中,日志查询难是一个常见问题,主要原因包括:日志分散:微服务实例分布在多个节点或容器中,日志存储位置分散。格式不统一:不同服务可能使用不同的日志格式,难以统一查询。调用…...

【多线程-第三天-NSOperation和GCD的区别 Objective-C语言】

一、我们来看NSOperation和GCD的区别 1.我们来对比一下,NSOperation和GCD, 那这个代码,我们都写过了, 我们来看一下它们的特点啊,首先来看GCD, 1)GCD是C语言的框架,是iOS4.0之后推出的,并且它的特点是,针对多核做了优化,可以充分利用CPU的多核,OK,这是GCD, 2…...

【医院运营统计专题】2.运营统计:医院管理的“智慧大脑”

医院成本核算、绩效管理、运营统计、内部控制、管理会计专题索引 引言 在当今医疗行业快速发展的背景下,医院运营管理的科学性和有效性成为了决定医院竞争力和可持续发展能力的关键因素。运营统计作为医院管理的重要工具,通过对医院各类数据的收集、整理、分析和解读,为医…...

Ollama 部署 DeepSeek-R1 及Open-WebUI

Ollama 部署 DeepSeek-R1 及Open-WebUI 文章目录 Ollama 部署 DeepSeek-R1 及Open-WebUI〇、说明为什么使用本方案 一、 安装Ollama1、主要特点:2、安装3、验证 二、Ollama 部署 DeepSeek1、部署2、模型选用3、Ollama 常用命令4、Ollama模型默认存储路径 安装open-w…...

Docker 容器 Elasticsearch 启动失败完整排查记录

背景 在服务器上运行 Docker 容器 es3,但 Elasticsearch 无法正常启动,运行 docker ps -a 发现 es3 处于 Exited (1) 状态,即进程异常退出。 本次排查从错误日志、容器挂载、权限问题、SELinux 影响、内核参数等多个方面入手,最…...

离线安装Appium Server

1、问题概述? 安装Appium通常有两种方式: 第一种:下载exe安装包,这种是Appium Server GUI安装方式,缺点是通过命令启动不方便。 第二种:通过cmd安装appium server,可以通过命令方式启动,比较方便。 问题:在没有外网的情况下,无法通过命令在cmd中安装appium server…...

Vite 打包原理

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

目前推荐的优秀编程学习网站与资源平台,涵盖不同学习方式和受众需求

一、综合教程与互动学习平台 菜鸟教程 特点:适合零基础新手,提供免费编程语言教程(Python、Java、C/C++、前端等),页面简洁且包含大量代码示例,支持快速上手。适用人群:编程入门者、需要快速查阅语法基础的学习者。W3Schools 特点:专注于Web开发技术(HTML、CSS、JavaS…...