UVM:callback机制的意义和用法

2024-09-09 04:04

本文主要是介绍UVM:callback机制的意义和用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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);endfunctionvirtual 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 beginseq_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();     endendtaskendclass

        使用宏`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);endfunctionvirtual task pre_drive(driver drv, transaction tr);drv.req.payload.delete();         //在主函数操作前注入错误endtaskvirtual 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()方法将回调类添加到testuvm_callbacks #(driver,driver_callback)::display();   //显示并打印登记信息用于调式endfunction
endclass

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

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

这篇关于UVM:callback机制的意义和用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1150105

相关文章

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆

MySQL中的锁机制详解之全局锁,表级锁,行级锁

《MySQL中的锁机制详解之全局锁,表级锁,行级锁》MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并... 目录一、锁机制基础:从并发问题到锁分类1.1 并发访问的三大问题1.2 锁的核心作用1.3 锁粒度分

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二