Callback机制,其实是使用OOP来实现的一种程序开发者向程序使用者提供的模块内部的接口。可以在Test_case的高度改变其他component的一些行为。

Systemverilog中已经提供的Callback函数pre_randomize,post_randomize。对于UVM和VIP来说,其他的CallBack函数都是自己程序的开发者事先

留下的hook。

Callback的实现:

1)首先直接从component扩展出新的类来实现pre_do等function不可取。因为component的改变会让整个UVM的tree改变。

2)考虑利用OOP的composition来操作,先定义一个类A,并定义virtual pre_do等function于它的类中。后在UVM的component中加入该类,在do函数

之前调用pre_do。这样在未重定义时,由于pre_do中没有任何操作,所以不会对component产生任何影响。而重定义virtual pre_do之后,自然便

加入了相关的执行代码。

UVM和VIP中的实现:

首先字uvm_callback派生一个类A,并定义虚函数virtual pre_do;(或uvm_reg_cbs

定义uvm_register_cb(driver, A);在driver类中。这样相当于将A加入driver class中。

定义A_pool,来存放A的实例化对象,在driver类中可以直接判断A_pool是否为空,来执行pre_do。

在driver类中,使用uvm_do_callbacks(driver, A, pre_do);来调用pre_do,在do函数之前。

这样便完成了预留的hook,

用户使用时:

接下来只需要在需要的时候extended A,定义好pre_do函数。并且在connect_phase之前调用add函数,来添加进来。

A_pool::add(env.i_agt.drv, cb);  cb即为A的Extended的类的对象。

UVM中Callback机制的更多相关文章

  1. UVM中factory机制的使用

    UVM中的factory机制一般用在sequence的重载,尤其是virtual sequence.当Test_case变化时,通过virtual sequence的重载,可以很容易构建新的测试. 因 ...

  2. Android中callback(接口回调)机制

    事实上,callback 机制在Android 中无处不在,特别是以Handler.Callback.Listener这三个词结尾的,都是利用callback机制来实现的.比方点击事件onClickL ...

  3. UVM中的factory机制实现

    首先在Systemverilog中便有对于重载的最基本的支持. 1)定义task/function时,使用virtual关键字.那之后在test_case中调用时,便使用句柄指向的对象的类型而不是句柄 ...

  4. UVM中的class

    UVM中的类包括:基类(base)------------uvm_void/uvm_object/uvm_transaction/uvm_root/uvm_phase/uvm_port_base 报告 ...

  5. UVM的factory机制

    在UVM中使用工厂模式基本上分为三个步骤: 1. 注册 当定义一个类的时候,它的类型必须要注册,UVM已经提供了专用的宏. `uvm_component_utils(class_type_name) ...

  6. UVM中的sequence使用(一)

    UVM中Driver,transaction,sequence,sequencer之间的关系. UVM将原来在Driver中的数据定义部分,单独拿出来成为Transaction,主要完成数据的rand ...

  7. UVM中的regmodel建模(一)

    UVM中的regmodel继承自VMM的RAL(Register Abstract Layer),现在可以先将寄存器模型进行XML建模,再通过Synopsys 家的工具ralgen来直接生成regmo ...

  8. MapReduce中作业调度机制

    MapReduce中作业调度机制主要有3种: 1.先入先出FIFO      Hadoop 中默认的调度器,它先按照作业的优先级高低,再按照到达时间的先后选择被执行的作业. 2.公平调度器(相当于时间 ...

  9. .NET中反射机制的使用与分析

    .NET中反射机制的使用与分析 [日期:2008-06-30] 来源:  作者:志伟     .NET反射的定义:审查元数据并收集关于它的类型信息的能力. 元数据是一种二进制信息,用以对存储在公共语言 ...

随机推荐

  1. android中SimpleCursorAdapter _id错误的问题

    作为一个android新手,在绑定数据的时候是这样的 ListView listview=(ListView)this.findViewById(R.id.listView1); XJDal xj=n ...

  2. vim自定义语法高亮(syntax highlight)设置流程

    这里用一个非常简单的例子来展示vim自定义自己的语法并高亮显示的设置流程. 所使用的实例语言是python,为了区分vim自带的python语法,我们把文件名保存为test.me,其内容如下图所示: ...

  3. 存储opline的内存地址可以实时跟踪opcode的执行

    static intphp_handler(request_rec *r) { /* Initiliaze the context */ php_struct * volatile ctx; void ...

  4. java-04-动手动脑

    1String.equals()方法的实现代码 public boolean equals(Object anObject) { if (this == anObject) { return true ...

  5. easyui 特殊操作

    --EasyUI - datagrid中单元格里编辑控件的单击事件如何获取当前行的index var rowIndex = $(this).parents('.datagrid-row').attr( ...

  6. 【Git 使用笔记】第一部分:安装git 和 使用git

    第一部分:安装git(本人使用ubuntu系统) sudo apt-get install git 第二部分:基本配置 git config core.filemode false//忽略文件属性的修 ...

  7. MySQL 同一实例不同库之间表同步(Otter 应用)

    1 需求 在同一台服务器同一MySQL实例中的source库和target库都存在student表.如果source库中该表发生增删改操作时,也需要体现到target库的student表中: 2 解决 ...

  8. Prime Path--POJ3126(bfs)

    Description The ministers of the cabinet were quite upset by the message from the Chief of Security ...

  9. 洛谷P1083 借教室 NOIP2012D2T2 线段树

    正解:线段树 解题报告: ...真的不难啊只是开了这个坑就填下? 就是先读入每天的教室数建个线段树然后每次读入就update一下,线段树存的就这一段的最小值啊,然后如果有次更新完之后tr[1]小于0了 ...

  10. 总结web应用中常用的各种cache(转)

    add by zhj:还没来得及看,有空再细看 原文:https://ruby-china.org/topics/19389 cache是提高应用性能重要的一个环节,写篇文章总结一下用过的各种对于动态 ...