UVM搭建学习之五:封装成agent

1、定义

driver monitor之间的联系两者之间的代码高度相似。其本质是因为二者处理的是同一种协议,在同样一套既定的规则下做着不同的事情。由于二者的这种相似性, UVM中通常将二者封装在一起,成为一个 agent;
2、举例
class my_agent extends uvm_agent ;
   my_driver drv;
   my_monitor mon;
   function new(string name, uvm_component parent);
   super.new(name, parent);
   endfunction
   extern virtual function void build_phase(uvm_phase phase);
   extern virtual function void connect_phase(uvm_phase phase);
   `uvm_component_utils(my_agent)
endclass
 function void my_agent::build_phase(uvm_phase phase);
 super.build_phase(phase);
 if ( is_active == UVM_ACTIVE ) begin
        drv = my_driver::type_id::create("drv", this);
 end
 mon = my_monitor::type_id::create("mon", this);
 endfunction
 function void my_agent::connect_phase(uvm_phase phase);
 super.connect_phase(phase);
 endfunction
3、说明
    所有的 agent 都要派生自 uvm_agent 类,且其本身是一个 component ,应该使用 uvm_component_utils 宏来实现 factory 注册。
    is_active是uvm_agent的一个成员变量,而uvm_active_passive_enum是一个枚举类型变量,其定义为:typedef enum bit { UVM_PASSIVE=0, UVM_ACTIVE=1 } uvm_active_passive_enum;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
UVM(Universal Verification Methodology),`uvm_type_id::create`是一个静态函数,用于创建指定类型的对象实例。 `uvm_type_id::create`函数的作用是根据给定的类型标识符(type_id)创建该类型的对象实例。它是UVM的一种工厂模式,通过类型标识符动态地创建对象,而无需显式调用具体类的构造函数。 使用`uvm_type_id::create`函数可以实现以下功能: 1. 动态创建对象:通过使用类型标识符,可以在运行时根据需要创建对象。这样可以实现在运行时决定对象类型的灵活性。 2. 避免直接调用构造函数:通过使用`uvm_type_id::create`函数,可以避免直接调用对象的构造函数,减少代码的依赖性和耦合度。 3. 多态性支持:UVM的类通常使用继承关系构建,通过创建对象实例,可以实现多态性的支持。即可以通过基类的类型标识符创建派生类的对象实例。 使用`uvm_type_id::create`函数需要注意以下几点: 1. 类型注册:在使用`uvm_type_id::create`函数之前,需要确保要创建的类型已经在UVM系统注册过。通常可以通过在类声明使用`uvm_object_utils`宏来注册类型。 2. 类型转换:由于`uvm_type_id::create`函数返回的是一个基类指针,如果需要使用派生类的特定方法或员,可能需要进行类型转换。 总结来说,`uvm_type_id::create`函数用于根据类型标识符动态创建对象实例,实现了对象的动态创建和多态性支持。它是UVM一种灵活和方便的对象创建方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值