- 1、本文档共50页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
uvm实战指南
/blog/#m=0t=1c=fks_084066087094087064080095087095085086087067087085095068084
Callback——最简单的callback??
2012-01-21 22:06:01|??分类:?SystemVerilog|字号?订阅
在RVM、VMM、OVM/UVM中,常常提到callback这个概念。指在事先设置好的地方留下一个接口,通过向这个接口添加一些函数对象,来达到不改变代码结构而动态修改代码行为。下面用systemverilog来举一个简单的callback例子:
?1?class?callback;?2??3???virtual?task?cb_pre_run(?);?4?????$display(base callback run);?5???endtask:cb_pre_run?6????7?endclass:callback?8??9?class?widget;10?11???callback cb_queue[$];12?13???function?void?add_cb(callback cb);14?????cb_queue.push_back(cb);15???endfunction:add_cb16?17???task?run();18?????// add callback here19?????foreach(cb_queue[i])?begin20???????cb_queue[i].cb_pre_run();21?????end22?????$display(widget run....);23???endtask:run24?endclass:widget25?26?module?top;27?28?class?ext_callback?extends?callback;29???task?cb_pre_run();30?????$display(ext callback run);31???endtask:cb_pre_run32?endclass:ext_callback33???widget w;34???callback cb0;35???ext_callback cb_ext;36?37???38???initial?begin39?????w?=?new;40?????cb0?=?new;41?????cb_ext?=?new;42?????w.run;43?????w.add_cb(cb0);44?????$display(===========??After Add base Callback);45?????w.run;46?????w.add_cb(cb_ext);47?????$display(===========??After Add extention Callback);48?????w.run;49???end50???51?endmodule;?// top ????在sysverilog中,没有函数指针的概念,因此必须将函数包装成为一个对象,就是上面例子中的callback class. 而为了在widget的对象中使用这个函数对象,必须事先在设计好的调用点对callback对象中的函数进行逐个调用(代码19-21行)。
????widget的对象事先并不知道有多少callback对象,而是将所有的callback对象放到自己的一个callback对象队列中(cb_queue)。然后逐个对这个队列中的所有对象进行函数调用。
????上面的程序编译执行后,结果如下:
widget run....
=========== After Add base Callback
base callback run
widget run....
=========== After Add extention Callback
base callback run
ext callback run
widget run.... ????可以看出,在执行的过程中,可以对widget对象进行动态的添加callback,从而动态的改变widget对象的动作。
????上面的例子非常简单,仅仅是输出一些讯息而已,有一些局限:
这个callback结构并不能够真的改变widget对象的内部成员,以及处理的数据内容,仅仅能够输出一些讯息。
对每一个widget的对象,都需要单独添加相关callback对象,假如程序中又创建了一个新的widget对象,那么这个对象的callback queue初始是空的,也就是没有callb
您可能关注的文档
最近下载
- (苏教版)数学五年级上册寒假“天天练”作业设计,含30份题组,附参考答案.pdf
- 《(电影、美剧超级大包)(英语中字)(BD-MKV HD-MKV 1200G)115 先收着。。。转自deefun》.doc
- 2023年黑龙江省烟草专卖局(公司)真题.docx VIP
- 招标采购代理规范zbtb-t a01-2016.pdf
- 小儿肺脏超声基础课件.ppt
- 华南理工大学《管理统计学》课件-第2章统计数据的描述.pptx
- 2023年黑龙江省烟草专卖局系统考试真题.docx VIP
- 《好妈妈胜过好老师》.doc
- 家长会参考讲义——围棋与孩子的素质教育幻灯片课件.ppt
- 华南理工大学《管理统计学》课件-第6章方差分析与试验设计.pptx
文档评论(0)