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

news2025/2/9 7:14:41

文章目录

  • 前言
  • 一、什么是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);
    endfunction

    virtual function void build_phase(uvm_phase phase);
        super.build_phase(phase);
        env = adder_env::type_id::create("env", this);  // 创建测试环境
    endfunction

    virtual 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);
    endfunction

    virtual function void build_phase(uvm_phase phase);
        super.build_phase(phase);
        agent = adder_agent::type_id::create("agent", this);  // 创建Agent
    endfunction
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)  // 自动创建并发送transaction
        end
    endtask
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.coloradmin.cn/o/2295138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【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 来实现。具体步骤如下: 选择新的模型存储目录:首先,确定您希望存储模型的目标目录路…

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

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

使用GD32F470的硬件SPI读写W25Q64

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

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

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

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…

本地部署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/.…

【多线程-第三天-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…

Vite 打包原理

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