uvm设计分析——callback
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的更多相关文章
- uvm设计分析——field automation
uvm中的field_automation主要实现了class中的基础元素的copy,compare等函数, 实现方式分为两种:1)用户注册,field系列宏:uvm内部调用static status ...
- UVM中Callback机制
Callback机制,其实是使用OOP来实现的一种程序开发者向程序使用者提供的模块内部的接口.可以在Test_case的高度改变其他component的一些行为. Systemverilog中已经提供 ...
- uvm设计分析——reg
项目中的reg_model一般只有一份,set到reg_sequence上,所以多个sequence并行启动结束的时候,reg model会成为一个共享资源. uvm_reg_field中的volat ...
- uvm设计分析——factory
uvm的factory机制,通过实例一个static类型default factory,并且通过宏将所有例化extend出来的object,component register到该factory的内部 ...
- uvm设计分析——report
uvm_report实现中的类图,如下: 1)uvm_component均从uvm_report_object extend而来,其中定义了report_warning,error,info,fata ...
- uvm设计分析——tlm
tlm模块,用来在不同模块之间实现实时通信,主要基于两个定义在通信双方的port类来实现. 两个port之间,通过connect函数,来拿到双方的class指针,进而调用对方的function. 但是 ...
- callback源码分析——callbacks
uvm的callback必须是提供者有预见性的留一些方法在function前后,这样在使用的时候,进行遍历调度即可 设计者,需要从uvm_callback定义一个基类,只定义function原型,定义 ...
- UVM中的class
UVM中的类包括:基类(base)------------uvm_void/uvm_object/uvm_transaction/uvm_root/uvm_phase/uvm_port_base 报告 ...
- (转)UVM内容梗概
1. 类: 面向对象基础传统的面向对象编程与systemverilog类的特点,类的定义,成员与方法,构造函数,对象的复制和深/浅拷贝,父类/子类关系,类的继承,作用域的规则,对象的句柄以及赋值,方法 ...
随机推荐
- python fabric实现远程操作和部署示例
https://www.jb51.net/article/48434.htm 近期接手越来越多的东西,发布和运维的工作相当机械,加上频率还蛮高,导致时间浪费还是优点多.修复bug什么的,测试,提交版本 ...
- 转:深入理解css中position属性及z-index属性
原文链接:https://www.cnblogs.com/zhuzhenwei918/p/6112034.html static定位是HTML元素的默认值,即没有定位,元素出现在正常的流中,因此,这种 ...
- LeetCode 427 Construct Quad Tree 解题报告
题目要求 We want to use quad trees to store an N x N boolean grid. Each cell in the grid can only be tru ...
- flex布局 响应式布局
移动端页面开发流程 移动端页面布局 一.移动端app分类 1.Native App原生app手机应用程序 使用原生的语言开发的手机应用,Android系统用的是java,ios系统用的是objec ...
- UOJ244 短路 贪心
正解:贪心 解题报告: 传送门! 贪心真的都是些神仙题,,,以我的脑子可能是不存在自己想出解这种事情了QAQ 然后直接港这道题解法趴,,, 首先因为这个是对称的,所以显然的是可以画一条斜右上的对角线, ...
- MySQL加锁处理分析(转)
add by zhj: 非常棒的一篇文章,是我见过的讲加锁最棒最详细的文章了.之前听过网易的<MySQL微专业>,里面的课程讲的也很好,但锁这块讲的跟 这篇文章相比,还是有差距的.网易&l ...
- objenesis
1.objenesis About Objenesis is a small Java library that serves one purpose: To instantiate a new ob ...
- python练习题-day6
1.老男孩好声⾳选秀⼤赛评委在打分的时候呢, 可以进⾏输入. 假设, 老男孩有10个评委. 让10个评委进⾏打分, 要求, 分数必须⼤于5分, ⼩于10分. pingwei=["a" ...
- Vue中 export default 和 export 区别
1.export与export default均可用于导出常量.函数.文件.模块等2.在一个文件或模块中,export.import可以有多个,export default仅有一个3.通过export ...
- PropTypes使用
PropTypes防止后期代码传参数错误,所以加一个校验, 代码: import React, {Component,PropTypes} from 'react'; import {View, Te ...