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测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/14343.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dijkstra算法类型题解

dijkstra算法(有权图,无权图): 带权路径长度——当图是带权图时,一条路径上所有边的权值之和,称为该路径的带权路径长度 初始化三个数组,final标记各顶点是否已找到最短路径,dist最…

RabbitMQ 消息顺序性保证

方式一:Consumer设置exclusive 注意条件 作用于basic.consume不支持quorum queue 当同时有A、B两个消费者调用basic.consume方法消费,并将exclusive设置为true时,第二个消费者会抛出异常: com.rabbitmq.client.AlreadyClosedEx…

基于开源AI智能名片2+1链动模式S2B2C商城小程序的个人IP活动运营策略与影响力提升研究

摘要:本文围绕个人IP运营者借助活动运营提升影响力这一主题,深入探讨如何将开源AI智能名片21链动模式S2B2C商城小程序融入借势、造势、提升参与感及用户激励等活动运营环节。通过分析该创新模式与活动运营各要素的结合点,为个人IP运营者提供切…

计算机图形学论文 | 面向制造的设计: 五轴铣削的几何制造可行性评估

🍕🍕🍕宝子们好久不见,新年快乐~~~,今天我们来更新一篇关于五轴CNC制造中的模型制造可达性分析的论文。老规矩: 红色是名词,蓝色是结论,绿色是文章工作,黄色是一些其他重…

deepseek搭建本地知识库

ollama是一个大模型的运行框架,在上面可以运行不同的大模型 部署deepseek 下载ollama:https://ollama.com/ 下载模型:https://ollama.com/library/deepseek-r1:1.5b ollama run deepseek-r1:1.5b运行起来之后,本地命令行就可以…

青少年编程与数学 02-009 Django 5 Web 编程 01课题、概要

青少年编程与数学 02-009 Django 5 Web 编程 01课题、概要 一、Django 5Django 5 的主要特性包括: 二、MVT模式三、官方网站四、内置功能数据库 ORM(对象关系映射)用户认证和授权表单处理模板引擎URL 路由缓存框架国际化和本地化安全性功能管…

deepseek本地部署-linux

1、官网推荐安装方法(使用脚本,我绕不过github,未采用) 登录ollama下载网站https://ollama.com/download/linux,linux下有下载脚本。 正常来说,在OS系统下直接执行脚本即可。 2、手动安装方法 2.1获取ollama-linux-arm64.tgz wget https://ollama.com/download/ollam…

多光谱技术在华为手机上的应用发展历史

2018 年,华为 P20 系列首次搭载 5 通道色温传感器,可帮助手机在不同光照条件下保持画面色彩一致性。 2020 年,华为 P40 系列搭载 8 通道多光谱色温传感器(实际为 11 通道,当时只用 8 个通道检测可见光)&am…

增加工作台菜单页面,AI问答应用支持上下文设置,数据库表索引优化,zyplayer-doc 2.4.8 发布啦!

zyplayer-doc是一款适合企业和个人使用的WIKI知识库管理工具,支持在线编辑富文本、Markdown、表格、Office文档、API接口、思维导图、Drawio以及任意的文本文件,专为私有化部署而设计,最大程度上保证企业或个人的数据安全,支持以内…

4.python+flask+SQLAlchemy+达梦数据库

前提 1.liunx Centos7上通过docker部署了达梦数据库。从达梦官网下载的docker镜像。(可以参考前面的博文) 2.windows上通过下载x86,win64位的达梦数据库,只安装客户端,不安装服务端。从达梦官网下载达梦数据库windows版。(可以参考前面的博文) 这样就可以用windows的达…

基础入门-网站协议身份鉴权OAuth2安全Token令牌JWT值Authirization标头

知识点: 1、网站协议-http/https安全差异(抓包) 2、身份鉴权-HTTP头&OAuth2&JWT&Token 一、演示案例-网站协议-http&https-安全测试差异性 1、加密方式 HTTP:使用明文传输,数据在传输过程中可以被…

【零基础学Mysql】常用函数讲解,提升数据操作效率的利器

以耳倾听世间繁华,以语表达心中所想 大家好,我是whisperrrr. 前言: 大家好,我是你们的朋友whisrrr。在日常工作中,MySQL作为一款广泛使用的开源关系型数据库,其强大的功能为我们提供了便捷的数据存储和管理手段。而在…

C++ 使用CURL开源库实现Http/Https的get/post请求进行字串和文件传输

CURL开源库介绍 CURL 是一个功能强大的开源库,用于在各种平台上进行网络数据传输。它支持众多的网络协议,像 HTTP、HTTPS、FTP、SMTP 等,能让开发者方便地在程序里实现与远程服务器的通信。 CURL 可以在 Windows、Linux、macOS 等多种操作系…

win编译openssl

一、perl执行脚本 1、安装perl脚本 perl安装 2、配置perl脚本 perl Configure VC-WIN32 no-asm no-shared --prefixE:\openssl-x.x.x\install二、编译openssl 1、使用vs工具编译nmake 如果使用命令行nmake编译会提示“无法打开包括文件: “limits.h”“ 等错误信息 所以…

idea启动报错# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ffccf76e433

# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc0x00007ffccf76e433, pid17288, tid6696 # # JRE version: (11.0.248) (build ) # Java VM: OpenJDK 64-Bit Server VM (11.0.248-LTS, mixed mode, sharing, tiered, compressed oops, g1 gc, windows-amd64) 不知道为什么…

穷举vs暴搜vs深搜vs回溯vs剪枝系列一>不同路径 III

目录 整体思路:代码设计:代码呈现: 整体思路: 代码设计: 代码呈现: class Solution {int ret,step;int m,n;boolean[][] vis;public int uniquePathsIII(int[][] grid) {m grid.length;n grid[0].length…

Idea 2024.3 使用CodeGPT插件整合Deepseek

哈喽,大家好,我是浮云,最近国产大模型Deepseek异常火爆,作为程序员我也试着玩了一下,首先作为简单的使用,大家进入官网,点击开始对话即可进行简单的聊天使用,点击获取手机app即可安装…

Houdini subuv制作输出阵列图

在游戏开发中经常需要用到sheet阵列图,并用其制作翻页动画。通过Houdini强大的节点组合可以配合输出subuv阵列图供游戏引擎使用。 本文出处:https://zhuanlan.zhihu.com/p/391796978 博主参考学习并写该文。 1.在obj分类下创建font节点以进行测试&#…

使用page assist浏览器插件结合deepseek-r1 7b本地模型

为本地部署的DeepSeek R1 7b模型安装Page Assist,可以按照以下步骤进行: 一、下载并安装Ollama‌ 首先,你需要下载并安装Ollama,这是部署DeepSeek所必需的工具。你可以访问Ollama的官方网站(ollama.com)下…

oracle: 事务,视图

事务 事务是数据库的最小逻辑单元,就是数据库中的一个最小的操作单位。 事务是由多条SQL语句组成的一个集合,有事务统一控制这些SQL语句的执行。 事务的属性 被简称为ACID属性, 是4个属性单词的首字母 脏读,幻读,不可重复读 是三种常见的并发问题&…