UVM:9.1.3 UVN 中callback 机制的原理

1.如下的 callback:

1)假设这是一个城市的VIP 的driver,pre_tran 应该是my_driver 的一个函数,要callback pre_tran。factory可以,但这里不考虑。

2.新引入一个类:

1)可以避免重新定义一次my_driver,只需要重新定义A的pre_tran。重新派生A 的代价远小于my_driver。

3.使用的时候,只要从A 派生一个类并将其例化,然后重新定义pre_tran 函数,callback 目的就达到了。

1)但却忽略了一点。my_driver 怎么知道A 派生了一个类,并且例化呢?

2)所以,UVM 又引入一个新的类,假设称为A_pool,专门存放A 或者A的派生类的一个池子。UVM 会执行这个池子中所有实例的pre_tran 函数,即:

3)使用的时候,从A 派生一个类并将其例化,然后加入到A_pool中,上述foreach 就会知道加入了一个实例,并调用其pre_tran。

4)UVM 中的callback 机制与此类似,不过其代码实现非常复杂。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-07-28 21:14:57

UVM:9.1.3 UVN 中callback 机制的原理的相关文章

UVM中Callback机制

Callback机制,其实是使用OOP来实现的一种程序开发者向程序使用者提供的模块内部的接口.可以在Test_case的高度改变其他component的一些行为. Systemverilog中已经提供的Callback函数pre_randomize,post_randomize.对于UVM和VIP来说,其他的CallBack函数都是自己程序的开发者事先 留下的hook. Callback的实现: 1)首先直接从component扩展出新的类来实现pre_do等function不可取.因为comp

Android中callback(接口回调)机制

事实上,callback 机制在Android 中无处不在,特别是以Handler.Callback.Listener这三个词结尾的,都是利用callback机制来实现的.比方点击事件onClickListener就是一个已经封装好的callback案例: tv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub

android中的Handler和Callback机制

android中的Handler和Callback机制 - - ITeye技术网站 Handler主要用来在线程之间的通信的机制.如在Activity或Service中需要接受其他线程的消息,则在需要接收消息的Activity或Service中需要实现Handler.Callback接口,实现这个接口的: Java代码 ? public?boolean?handleMessage(?Message?inMessage?)?:?? public boolean handleMessage( Mes

JavaScript中事件处理机制

JavaScript中事件处理机制 JavaScript中代码的处理方式:单线程 + 事件队列(callback queue) :如果是纯单线程的话,js代码在执行的时候遇到耗时的操作,代码就会发生阻塞:利用事件队列的方式,代码在执行的时候会将回调函数放在事件队列中(callback queue),等主线程的任务执行完毕之后,执行event loop机制的线程会将满足执行条件的任务取出来(注意需要满足的两个前提条件:一:主线程的任务已经执行完毕:二:事件队列中的任务满足触发条件),放入主线程中进

js中callback.call()和callback()的区别

js中callback.call()和callback()的区别在js中callback.call()和callback() 有什么区别,举个例子:function a(){alert('hello!');}function b(callback){callback();}function c(callback){callback.call();}function test(){b(a);c(a);}在test函数中,b和c的效果是一样的,都执行了回调函数a.这两种用法有什么区别呢? -----

Objective-C中runtime机制的应用

Objective-C中runtime机制的应用 一.初识runtime Objective-C是一种动态语言,所谓动态语言,是在程序执行时动态的确定变量类型,执行变量类型对应的方法的.因此,在Object-C中常用字符串映射类的技巧来动态创建类对象.因为OC的动态语言特性,我们可以通过一些手段,在程序运行时动态的更改对象的变量甚至方法,这就是我们所说的runtime机制. 二.你还有什么办法操作这样的变量么? 首先,我们先来看一个例子,这里有我创建的一个MyObject类: ? 1 2 3 4

MapReduce中作业调度机制

MapReduce中作业调度机制主要有3种: 1.先入先出FIFO      Hadoop 中默认的调度器,它先按照作业的优先级高低,再按照到达时间的先后选择被执行的作业. 2.公平调度器(相当于时间片轮转调度)      为任务分配资源的方法,其目的是随着时间的推移,让提交的作业获取等量的集群共享资源,让用户公平地共享集群.具体做法是:当集群上只有一个任务在运行时,它将使用整个集群,当有其他作业提交时,系统会将TaskTracker节点空间的时间片分配给这些新的作业,并保证每个任务都得到大概等

(3)MEF插件系统中通信机制的设计和实现

1.背景 一般的WinForm中通过C#自带的Event机制便能很好的实现事件的注册和分发,但是,在插件系统中却不能这么简单的直接用已有的类来完成.一个插件本不包含另外一个插件,它们均是独立解耦的,实现插件和插件间的通信还需要我们设计出一个事件引擎来完成这个需求. 目前很多高级语言中基本都实现了观察者模式,并进行了自己的包装.比如C#中的delegate和event组合,java awt中的Event和addActionListener组合,Flex中的Event.addEventListene

大话Linux内核中锁机制之原子操作、自旋锁

转至:http://blog.sina.com.cn/s/blog_6d7fa49b01014q7p.html 很多人会问这样的问题,Linux内核中提供了各式各样的同步锁机制到底有何作用?追根到底其实是由于操作系统中存在多进程对共享资源的并发访问,从而引起了进程间的竞态.这其中包括了我们所熟知的SMP系统,多核间的相互竞争资源,单CPU之间的相互竞争,中断和进程间的相互抢占等诸多问题. 通常情况下,如图1所示,对于一段程序,我们的理想是总是美好的,希望它能够这样执行:进程1先对临界区完成操作,