UVM 基础--Factory机制

1. 工厂机制概念

Factory 机制也叫工厂机制,其存在的意义是为了能够方便的替换验证环境中的实例或者已注册的类型,可以提高验证效率和环境复用率。

工厂机制最大的特点:一个子类的指针以父类的类型传递,其表现的行为依然是子类的行为。

  • 封装--隐藏实际细节,使代码模块化
  • 继承--扩展已存在的代码模块(类)
  • 多态--重写/覆盖(override)--子类重新定义父类虚函数的做法(只有继承关系才可以override

2. Factory步骤

  • 将类注册到工厂

//uvm_component 类型例子
class comp extends uvm_component;
`uvm_component_utils(comp)
    function new(string name = 'comp',uvm_component parent = null);
        super.new(name, parent);
    endfunction
.....

//uvm_object 类型例子
class obj extends uvm_object;
`uvm_obj_utils(obj)
    function new(string name = 'obj');
        super.new(name);
    endfunction
.....
  • 在例化前设置覆盖对象和类型(可选)

set_type_override_by_type(用得多)

set_inst_override_by_type

注:需要被override的function/task必须是virtual类型

  • 创建对象

创建uvm_component 对象:comp_type::type_id::creat(string name,uvm_component parent)

创建uvm_object 对象:object_type::type_id::creat(string name)

module case1;
import uvm_pkg::*;
`include "uvm_macros.svh"

class comp extends component;
`uvm_component_utils(comp)
    function new(string name = "comp",uvm_component parent = null);
        super.new(name,parent);
    endfunction    
endclass
    
class obj extends component;
`uvm_object_utils(obj)
    function new(string name = "obj");
        super.new(name);
    endfunction
endclass

comp c1;//例化
obj o1;//例化

c1= comp:type_id::creat("c1",null);//UVM 创建
o1= obj:type_id::creat("o1");/UVM 创建
endmodule

3. 重载满足条件

  • 无论是重载的类还是被重载的类,都要定义在注册的工厂机制内
  • 被重载的类实例化时,要是用type_id::creat,不可以使用new的方式
  • 重载的类与被重载的类有派生关系,重载的类必须派生自被重载的类
  • component 与object之间互相不能重载

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值