《UVM实战》笔记 UVM中的factory机制(重载)

第8章 UVM中的factory机制(重载)


只要是面向对象的语言,都有重载功能。

使用set_type_override_by_type函数可以实现两种不同类型之间的重载,

set_inst_override_by_type函数(并不是希望把验证平台中的A类型全部替换成B类型,而只是替换其中的某一部分)
extern static function void set_type_override_by_type
				(uvm_object_wrapper original_type,   
//第一个参数是被重载的类型,父类
				uvm_object_wrapper override_type,    
//第二个参数是重载的类型。子类
				bit replace=1);
extern function void set_inst_override_by_type(string relative_inst_path,   
  //其中第一个参数是相对路径,
						uvm_object_wrapper original_type,  
                          //第二个参数是被重载的类型,父类
						uvm_object_wrapper override_type);
无论是set_type_override_by_type还是set_inst_override_by_type,它们的参数都是一个uvm_object_wrapper型的类型参数,这种参数通过xxx::get_type()的形式获得。
set_type_override_by_type(bird::get_type(), parrot::get_type());
//factory机制式的实例化方式
UVM还提供了另外一种简单的方法来替换这种晦涩的写法:字符串。
 set_type_override("bird", "parrot")                             //==set_type_override_by_type
set_inst_override("env.o_agt.mon", "my_driver", "new_monitor"); //==set_inst_override_by_type


注意事项*4:

·第一,无论是重载的类(parrot)还是被重载的类(bird),都要在定义时注册到factory机制中。

·第二,被重载的类(bird)在实例化时,要使用factory机制式的实例化方式,而不能使用传统的new方式

·第三,最重要的是,重载的类(parrot)要与被重载的类(bird)有派生关系。重载的类必须派生自被重载的类,被重载的类必须是重载类的父类。

·第四,component与object之间互相不能重载。虽然uvm_component是派生自uvm_object,但是这两者的血缘关系太远了,远到根本不能重载。从两者的new参数的函数就可以看出来,二者互相重载时,多出来的一个parent参数会使factory机制无所适从。


*8.2.3 复杂的重载

连续重载
set_type_override_by_type(bird::get_type(), parrot::get_type());
set_type_override_by_type(parrot::get_type(), big_parrot::get_type());

替换重载
set_type_override_by_type(bird::get_type(), parrot::get_type());
set_type_override_by_type(bird::get_type(), sparrow::get_type());

全部评论
楼主你是搬了一本书到这上面了?
点赞 回复 分享
发布于 2022-06-26 10:06

相关推荐

JamesGosling1:同一个公司的实习为什么写三次,就算是不同的小组的话,直接写一段要好点吧
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客企业服务