UVM override 机制

1、 override的几种方法

set_type_override_by_type(orig_type::get_type(), new_type::get_type());
//把TB中的orig_type都替换为new_type

set_inst_override_by_type("relative_path", orig_type::get_type(), new_type::get_type());
//只有绝对路径下的orig_type替换为new_type

不使用xxx::get_type()的情况下还有一种写法:

set_type_overrid("orig_type", "new_type");
//把TB中的orig_type都替换为new_type

set_inst_override("relative_path", "orig_type", "new_type");
//只有绝对路径下的orig_type替换为new_type

此外还可以通过type_id的方式将orig_type override为new_type,具体代码如下:

orig_type::type_id::set_type_override(new_type::get_type());
//把TB中的orig_type都替换为new_type

orig_type::type_id::set_inst_override(new_type::get_type(), "full_path");
//只有绝对路径下的orig_type替换为new_type

2、 override的必要条件
使用上述代码将orig_type重载为new_type必须满足一下几个条件:
a、orig_type和new_type都必须注册到factory机制中
b、override后必须使用factoty机制的例化方式
c、new_type必须是orig_type的子类

initial begin
  orig_type orig_1, orig_2;
  orig_type::type_id::set_tpye_override(new_type::get_type());
  orig_1 = new ("orig_1");//orig_1 的类型为orig_type
  orig_2 = orig_type::type_id::create("orig_2", null);//orig_2 的类型为new_type
end 

3、在top中的使用方式

factory.set_type_override_by_type(orig_type::get_type(), new_type::get_type());
factory.set_type_override_by_name("orig_type", "new_type");
orig_type::type_id::set_type_override(new_type::get_type());

版权声明:本文为weixin_45946815原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。