UVM:callback机制的意义和用法

news2024/9/17 8:41:25

1. 作用

        Callback机制在UVM验证平台,最大用处就是为了提高验证平台的可重用性。在不创建复杂的OOP层次结构前提下,针对组件中的某些行为,在其之前后之后,内置一些函数,增加或者修改UVM组件的操作,增加新的功能,从而实现一个环境多个用例。此外还可以通过Callback机制构建异常的测试用例。

2. 使用步骤

        (1)在UVM组件中内嵌callback函数或任务;

        (2)声明一个UVM callback空壳类;

        (3)从UVM callback空壳类中扩展UVM callback类;

        (4)在验证环境中创建并登记UVM callback实例。

3. callback实现举例

        第一步首先声明一个空壳类,注意所有的方法都声明为virtual,函数体为空

class driver_callback extends uvm_callback;
    `uvm_object_utils(driver_callback)
  
    function new (string name = "driver_callback");
       super.new(name);
    endfunction
    
    virtual task pre_drive (driver drv, transaction tr);
    endtask      
    virtual task post_drive (driver drv, transaction tr);
    endtask    
endclass

        第二步,在主操作函数、任务之前或之后嵌入callback函数:

typedef class driver_callback;      //类的预定义,以便后续提前使用未定义的driver类

class driver extends uvm_driver#(transaction);     //嵌入Callback函数
   `uvm_register_cb(driver, driver_callback);   //在组件中登记UVM_callback
   ...
   virtual task run_phase(uvm_phase phase);
      forever begin
        
        seq_item_port.get_next_item(req);      //申请数据发送
        `uvm_do_callbacks(driver,driver_callback,pre_drive(this,req)); //在数据处理前,使用宏`uvm_do_callbacks嵌入Callback函数或者任务
        drive(req);          
        `uvm_do_callbacks(driver,driver_callback,post_drive(this,req)); //在数据处理后,使用宏`uvm_do_callbacks嵌入Callback函数或者任务
        seq_item_port.item_done();     
        end
    endtask
 
endclass

        使用宏`uvm_register_cb在组件中对callback类进行注册;

        使用宏`uvm_do_callbacks在具体行为前后嵌入callback函数或者任务。

        第三步,编写具体的callback函数内容:

class driver_error_callback extends driver_callback; //继承Callback空壳类,实现覆盖
    `uvm_object_utils(driver_error_callback)
    function new(string name="driver_error_callback");
       super.new(name);
    endfunction
     
    virtual task pre_drive(driver drv, transaction tr);
        drv.req.payload.delete();         //在主函数操作前注入错误
    endtask
    virtual task post_drive(driver drv, transaction tr);
       `uvm_info("DRIVER_ERROR_CALLBACK","Inside post_drive method",UVM_LOW);  //在主函数操作之后,打印
    endtask     
    
endclass

        最后一步,在测试案例中创建并登记callback的实例:

class driver_err_test extends test_base;  //在测试用例中创建对象并登记
   `uvm_component_utils(driver_err_test)
    function new(string name = "driver_err_test", uvm_component parent=null);
       super.new(name,parent);
    endfunction
    …………
    driver_error_callback  drv_err_cb;    //声明句柄
    
    function void build_phase(uvm_phase phase);
       super.build_phase(phase);
       
       drv_err_cb = driver_error_callback_callback::type_id::create("callback_1", this);     //创建Callback实例
       uvm_callbacks #(driver,driver_callback)::add(env.agt.drv, drv_err_cb);    //调用add()方法将回调类添加到test
       uvm_callbacks #(driver,driver_callback)::display();   //显示并打印登记信息用于调式
 
    endfunction
endclass

         需要在测试用例中创建和例化callback对象;并调用uvm_callbacks #(T, CB) :: add(t,cb)将callback对象添加到test。

最后在编译调试时,添加选项+UVM_CB_TRACE_ON即可。

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

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

相关文章

01初识FreeRTOS【前情回顾篇】

为什么要使用FreeRTOS? 裸机轮询无法避免两个函数相互影响的问题,例如我们使用单片机在进行裸机开发时,我们使用了Delay延时函数,这时我们无法再执行其他的功能代码,需要等延时时间结束再执行其他代码,而使…

通过域名无法访问不到网站,IP可正常访问(DNS污染)

一 DNS被污染 就在刚刚突然访问不到csdn,域名无法访问如下图: 确认DNS是否解析有问题 1 ping 域名 先ping一下域名,ping 域名后得到ip, ping通了如下图: 2 使用IP访问测试 通过ip再访问网站,ip可以正常访问如下图&…

nginx搭配gateway的集群配置

一、nginx在http里配置如下信息 upstream gateway-cluster {server 127.0.0.1:10001;server 127.0.0.1:10002;}server {listen 1000;server_name localhost;location ~/zzw_project/(.*) {proxy_pass http://gateway-cluster/$1;proxy_set_header Host $host; # 代理设…

延迟渲染路径

1. 延迟渲染路径处理光照的方式 延迟渲染路径对光照的数量没有任何限制,并且所有灯光都可以采用逐像素渲染。理论上来说,即 使场景中有成百上千个实时灯光,依然可以保持比较流畅的渲染帧率。它支持法线纹理、阴影等等效果的处理;…

【C++】STL容器详解【下】

目录 一、list容器 1.1 list基本概念 1.2 lsit构造函数 1.3 list数据元素插入和删除操作 1.4 list大小操作 1.5 list赋值操作 1.6 list数据的存取 1.7 list反转排序 二、set/multiset容器 2.1 set/multiset基本概念 2.2 set构造函数 2.3 set赋值操作 2.4 set大小操…

ChatGPT+Simple Mind Map生成思维导图:快速提升学习效率

一、告别杂乱笔记,一键生成清晰思维导图! 最近开始学习网络安全,一头扎进了各种协议、漏洞、防御机制的海洋中。信息量巨大,知识点零散,让我很快便陷入了“知识焦虑”——笔记越记越多,却越来越混乱&#…

Django+Vue3前后端分离学习(二)(重写User类)

一、重写User类: 1、首先导入User类: from django.contrib.auth.models import User 2、然后点在User上,按住ctrl 点进去,发现 User类继承AbstractUser Ctrl点进去AbstractUser,然后将此方法全部复制到自己APP的mo…

基于微信小程序+Java+SSM+Vue+MySQL的宿舍管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于微信小程序JavaSSMVueMySQL的宿舍管理系统【附源码文档…

UMI复现基础环境安装配置全流程(三)——UMI环境搭建

一、搭建UMI环境 (二)中安装了Anaconda3,在此基础上,创建umi环境,在universal_manipulation_interface-main文件夹中打开terminal并输入指令 conda env create -f conda_environment.yaml 此指令根据yaml文件创建环…

​数据编织+敏捷BI,打造企业智赢AI时代的双引擎丨直播预告

大数据产业创新服务媒体 ——聚焦数据 改变商业 随着数字化和智能化浪潮的不断推进,企业如何高效利用数据资源,成为了获取竞争优势的关键。在这样的背景下,我们诚邀您参加即将于2024年9月10日14:30开启的直播——“数据编织敏捷BI&#xff0…

实时通信利器:Web Broadcast Channel API 全面解读

一. 引言 在 Web 开发领域,实时通信一直是一个备受关注的话题。为了更好地实现实时消息传递和跨标签页通信,在 HTML5 规范中引入了 Web Broadcast Channel API。在本文中,我们将解析 Web Broadcast Channel API,探讨其用法以及相…

常见的正则化方法以及L1,L2正则化的简单描述

深度学习中的正则化是通过在模型训练过程中引入某些技术来防止模型过拟合的一种策略。过拟合是指模型在训练数据上表现非常好,但在新的、未见过的数据上表现不佳。正则化通过限制模型的复杂度或对模型参数施加约束,从而提高模型的泛化能力。 常见的正则…

【机器学习】高斯网络的基本概念和应用领域

引言 高斯网络(Gaussian Network)通常指的是一个概率图模型,其中所有的随机变量(或节点)都遵循高斯分布 文章目录 引言一、高斯网络(Gaussian Network)1.1 高斯过程(Gaussian Proces…

Notepad++ 修改 About

1. 用这个工具,看标题,修改 1700 里的 Caption, 保存为 xx.exe, 2.修改链接,先准备如上。 2.1 使用插件 Hex Editor,拖入刚保存的 Notepad.exe 到 Notepad.exe, 按 c..S..H 2.2 按 ctrlf 查找 68 00 74 00 74 00 70 00 73 00 3…

ggplot作图基础

目录 ggplot作图语法 散点图 折线图 group分组 face_wrap()图像切片摆放 facet_grid()交叉分组切片 条形图 2.1 单组变量条形图 2.2 多维展示变量 直方图有与密度估计 直方图 密度估计图 ..density..语法和stat“density” ggplot作图语法 ggplot作图是将数据按需要进…

锡林郭勒奶酪品牌呼和浩特市大召店盛大开业

礼献中秋,香飘乳都。为进一步拓展锡林郭勒奶酪区域公用品牌产品销售渠道,9月8日,锡林郭勒奶酪区域公用品牌大召店在呼和浩特市大召广场月明楼隆重开业,现场为第三批新授权的39家奶酪生产经营主体代表授牌。至此,锡林郭…

Debian 12如何关闭防火墙

在Debian 12中,默认的防火墙管理工具是ufw(Uncomplicated Firewall)。您可以使用以下命令来关闭防火墙: 关闭防火墙: sudo ufw disable查看防火墙状态: sudo ufw status如果需要重新开启防火墙:…

9.8javaweb项目总结

1.主界面用户信息显示 登录成功后,将用户信息存储在记录在 localStorage中,然后进入界面之前通过js来渲染主界面 存储用户信息 将用户信息渲染在主界面上,并且头像设置跳转,到个人资料界面 这里数据库中还没有设置相关信息 2.模糊…

数学建模笔记—— 主成分分析(PCA)

数学建模笔记—— 主成分分析 主成分分析1. 基本原理1.1 主成分分析方法1.2 数据降维1.3 主成分分析原理1.4 主成分分析思想 2. PCA的计算步骤3. 典型例题4. 主成分分析说明5. python代码实现 主成分分析 1. 基本原理 在实际问题研究中,多变量问题是经常会遇到的。变量太多,无…

通信工程学习:什么是PSK相移键控、2PSK/BPSK二进制相移键控

PSK相移键控、2PSK/BPSK二进制相移键控 PSK(相移键控)和2PSK/BPSK(二进制相移键控)是两种在通信系统中广泛使用的调制技术。以下是对它们的详细解释: 一、PSK:相移键控 1、PSK相移键控的定义:…