uvm_callback,设计者在进行class的function设计时,有意留下的一些hook,总是遍历某个pool中的对象;

       使用者在使用时,将实现添加到某个pool中;

callback中,最重要的三个class;

  1)pool类,uvm_callbacks,实现pool的register和add;

  2)调用接口类,uvm_callback_iter,实现对pool中对象的遍历;

  3)uvm_callback,供extend的基础类,只是定义了callback的mode;

uvm_callbacks类:其中定义了两类pool:

  1)不指定uvm_object(null类型)的,m_tw_cb_q;

  2)指定具体的uvm_object的,m_pool;

      

  uvm_callbacks_base,只是实现了add和register的小的function的原型定义;

             定义了m_b_inst的static变量,以及m_pool的以uvm_object为索引的,uvm_queue,

  uvm_typed_callbacks,实现了对uvm_queue中的callback进行add,delete,get,find的function;

             定义了m_t_inst的static变量,以及m_tw_cb_q类型的uvm_queue,其中保存uvm_callback;

  uvm_callbacks,定义了register,add,delete,add_by_name,delete_by_name的function;

             add function,会根据uvm_object是会为null,来判断是写入m_pool还是tw_cb_q中;

             delete function,类似;add_by_name,delete_by_name,首先根据uvm_root找到

              某个child的对象queue,之后再遍历调用相应的函数;

             m_get_q,根据uvm_object是否为null,来拿到tw_cb_q或者m_pool中的queue;

  uvm_derived_callbacks,目前感觉用处不大;

之上定义的很多function都是static类型,

uvm_callback_iter,参数化uvm_object,以及uvm_callback的两个参数,虽然pool或者queue都是static的;

    但是uvm_object以及callback可以作为删选类型,来保证拿到的queue是需要的那一组;

    static函数,first,last,next,prev;

uvm_callback,只定义了enable_mode,其他的function,都供设计者,进行extend设计,

                          然后使用者在进行extend,继而add到相应的pool,

    所以uvm_callback会被继承两层。

callback相关的macros:

1)由于很多参数化类的关系,所以callbacks以及callback_iter都对具体类型进行了typedef;

    如对于uvm_reg,分别对pool和iter进行了typedef;uvm_reg_cbs是设计者已经extend的一级class;

      

2)对register函数的包装:

    macros,uvm_register_cb(T,CB),调用相应callbacks的m_register_pair函数;

3)do callback函数的包装;

    macros,uvm_do_callbacks,遍历iter提供的对象;可以直接在宏中制定function名字;

      

    macros,uvm_do_obj_callbacks_exit_on,在函数的某个返回值,退出;

应用中,环境设计者:

    1)对uvm_callbacks进行typedef;

      

    2)从uvm_callback extend出新的class;

      

    3)在相应的component中留下function接口;

      

使用者:

    1)从uvm_driver_callback extend出新的实现function的class;可以不同的实现都做extend;

      

      

    2)在top上进行new和add 操作;

      

这样cb1和cb2 对象都被加到m_root中以driver为索引的uvm_queue中;

  add函数的调用,可以不同bus_driver_cbs_t,也可以使用其他的pool的def,但是必须保证存在该class;

    add函数,只需要uvm_object对象,以及相应实现正确类型的callback对象;

uvm设计分析——callback的更多相关文章

  1. uvm设计分析——field automation

    uvm中的field_automation主要实现了class中的基础元素的copy,compare等函数, 实现方式分为两种:1)用户注册,field系列宏:uvm内部调用static status ...

  2. UVM中Callback机制

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

  3. uvm设计分析——reg

    项目中的reg_model一般只有一份,set到reg_sequence上,所以多个sequence并行启动结束的时候,reg model会成为一个共享资源. uvm_reg_field中的volat ...

  4. uvm设计分析——factory

    uvm的factory机制,通过实例一个static类型default factory,并且通过宏将所有例化extend出来的object,component register到该factory的内部 ...

  5. uvm设计分析——report

    uvm_report实现中的类图,如下: 1)uvm_component均从uvm_report_object extend而来,其中定义了report_warning,error,info,fata ...

  6. uvm设计分析——tlm

    tlm模块,用来在不同模块之间实现实时通信,主要基于两个定义在通信双方的port类来实现. 两个port之间,通过connect函数,来拿到双方的class指针,进而调用对方的function. 但是 ...

  7. callback源码分析——callbacks

    uvm的callback必须是提供者有预见性的留一些方法在function前后,这样在使用的时候,进行遍历调度即可 设计者,需要从uvm_callback定义一个基类,只定义function原型,定义 ...

  8. UVM中的class

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

  9. (转)UVM内容梗概

    1. 类: 面向对象基础传统的面向对象编程与systemverilog类的特点,类的定义,成员与方法,构造函数,对象的复制和深/浅拷贝,父类/子类关系,类的继承,作用域的规则,对象的句柄以及赋值,方法 ...

随机推荐

  1. Xcode报错Expected selector for Objective-C and Expected method body

    昨天把键盘拿起来拍一下清清灰,然后就发现Xcode报错了,Xcode报错Expected selector for Objective-C and Expected method body,也不知道什 ...

  2. ODOO权限管理,在两个方面设置权限

    转载参考https://zhuanlan.zhihu.com/p/29130388 在odoo中新建两个用户user1,user2 新建用户 建完了用户,记得编辑用户,设置密码. 然后以user1用户 ...

  3. day4_处理json

    说明:#json是一种通用的数据类型,所有的语言都认识.#k - v {}#json串就是一个字符串,不能根据key-value取值#json可以转成字典#json串就是字符串,可放在三引号中校验js ...

  4. 命令行安装kvm虚拟机、桥接网络、用virt-manager管理

    宿主机CentOS Linux release 7.2.1511 (Core),内核3.10.0-327.el7.x86_64 1.配置宿主机网络桥接 想让虚拟机有自己的ip且外网可访问,需要在安装虚 ...

  5. Eclipse EE下载安装与配置

    Eclipse EE下载安装与配置 一.下载 下载链接:http://www.eclipse.org/downloads/eclipse-packages/ 1.进入Eclipse官网进行下载选择Ec ...

  6. Spring JPA实现逻辑源码分析总结

    1.SharedEntityManagerCreator: entitymanager的创建入口 该类被EntityManagerBeanDefinitionRegistrarPostProcesso ...

  7. mysqldump备份数据出错

    收到nagios报警,提示mysql备份失败,线上使用的是逻辑备份,也就是使用mysqldump,由于数据比较小,也就没在乎速度神马的问题.好吧,那就查查是什么原因导致备份失败,由于备份是写成脚本定时 ...

  8. head 命令 读取文件的前n行,默认查看文件的前十行

    head 命令 读取文件的前n行 默认查看文件的前十行 head /etc/passwd # 默认查看文件的前十行 /etc/passwd # 查看文件的前两行

  9. finecms设置伪静态后分享到微信不能访问怎么处理

    finecms设置伪静态后分享到微信不能访问,分享的链接自动增加了一串参数,类似这样的***.html?from=singlemessage&isappinstalled=0,刚开始ytkah ...

  10. 20181220 Oracle程序包基本开发逻辑

    做事情,开始也许比较迷茫,也可能工具不会,也可能语言不会,但不要害怕 多去思考而不是盲目的开始工作,盲目的听从,程序开发都是不断训练自己的思维能力. 做每件事情都是有意义的,思考为什么这么做,这么做的 ...