UVM1(概述、类库地图、工厂机制、覆盖方法)

类库地图(将可复用的部分标准化的保存在类库中,方便调用)

在这里插入图片描述

 在这里插入图片描述

 工厂机制:

注册、创建、覆盖(三要素)

主要用途:方便替代;

步骤:

一:(定义、注册、构建)//创建一个对象

1.在class中“定义”(对象名)

2.进行宏注册(分为component & object)(加入工厂机制/分类)

3.构建函数(一般包含继承)可多个(对象功能设定)

二:例化+工厂创建

1.定义句柄

2.对句柄进行工厂创建

class comp1 extends uvm_component;//1.定义
	`uvm_component_utils(comp1)//2.注册
	function new (string name = "comp1", uvm_component parent = null);//3.构建函数
		super.new(name,parent);
	endfunction:new
endclass
class obj1 extends uvm_object;//1.定义
	`uvm_object_utils(obj1)//2.注册
	function new(string name = "obj1");//3.构建函数
	endfunction:new
endclass
//创建对象
comp1 c1,c2;
obj1 o1,o2;
initial begin
	c1 = new("c1");
	o1 = new("o1");
	//建议使用下面方法创建对象
	c2 = comp1::type_id::create("c2",null);
	o2 = obj1::type_id::create("o2");
end

覆盖:

便利:无需修改原始代码、保持其封装性。

注意:

1.将类注册至工厂中,并将该类导入(import);

2.使用工厂创建对象

3.新定义的类型必须继承于原类型(子类覆盖父类/需兼容),方法为虚方法;

4.覆盖要发生在创建之前;

module factory_override;
   import uvm_pkg::*;
   `include "uvm_macros.svh"
   class comp1 extends uvm_component;
       `uvm_component_utils(comp1)
       function new(string name="comp1",uvm_component parent=null);
           super.new(name,parent);
           $display($sformatf("comp1::%s is created",name));
       endfunction:new

       virtual function void hello(string name);
           $display($sformatf("comp1::%s said hello!",name));
       endfunction
   endclass

   class comp2 extends comp1;
       `uvm_component_utils(comp2)
       function new(string name="comp2",uvm_component parent=null);
           super.new(name,parent);
           $display($sformatf("comp2::%s is created",name));
       endfunction:new

       function void hello(string name);
           $display($sformatf("comp2::%s said hello!",name));
       endfunction
   endclass

   comp1 c1,c2;

   initial begin
       comp1::type_id::set_type_override(comp2::get_type());
       c1=new("c1");
       c2=comp1::type_id::create("c2",null);
       c1.hello("c1");
       c2.hello("c2");
   end
endmodule

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值