UVM学习随笔(1)factory机制

本文深入探讨了UVM中的工厂机制,包括其在验证环境中的作用、实现方式及带来的便利。通过uvm_component(object)_utils宏,类得以注册到工厂,简化了对象创建和类型覆盖的过程。工厂机制允许在不修改原始代码的情况下灵活替换组件类型,增强了代码的封装性和可配置性。同时,它还实现了域自动化,通过uvm_field_*宏简化成员变量的操作。
摘要由CSDN通过智能技术生成

题记:验证小白,边学边记,没有逻辑,没有层次。

factory机制(工厂机制)

  1. 工厂的意义:工厂可以方便地替换验证环境中的实例或者注册了的类型。

  2. 工厂的实现:factory机制的实现被集成在uvm_component(object)_utils宏中,对一个类使用uvm_component(object)_utils就像使用一张注册表,将这个类注册到表中。在uvm环境中,注册环境组件类(如uvm_driver),使用uvm_component_utils宏;注册环境配置类(如uvm_sequence),使用uvm_object_utils宏。

  3. 工厂的便利

    3.1 创建(create):使用factory可省略类的实例化过程,将类注册到factory后,根据类名便可创建类的实例。
    3.1.1 component类型的创建:comp_type::type_id::create(string name,uvm_component parent);
    第一个参数name被创建的类的实例名称,第二个参数parent是该类在环境层次中的父类名称,通过parent参数可以让环境层次一层层串连起来,形成tree结构。
    3.1.2 object类型的创建:object_type::type_id::create(string name);
    object的创建只需要一个参数name,表示被创建的类的实例名称,一般不传递parent参数,因为一般object类不用在uvm环境层次中,只作为configuration或transaction等用来做配置的结构体或者抽象数据传输的数据结构体,成为uvm_component的成员变量。
    3.2 覆盖(override):将原来所属的类型替换为另外一个新的类型。一个原有类型被新的类型覆盖之后,原本用来创建原属类型的请求,将由工厂来创建新的类型替换。
    3.2.1 覆盖的优势
    1)、无需修改原始代码,可以保证原有代码的封装性。
    2)、允许灵活配置,如可以使用子类覆盖原有的父类。
    3.2.2 覆盖的流程
    1)、确定原有类型已在工厂注册,并把新的类型也在工厂中注册。
    2)、使用“类型覆盖”或“实例覆盖”进行覆盖操作。
    2)、使用create创建对象时,工厂首先检查原有类型是否被覆盖,如果被覆盖,则创建的是新的类型的对象,如果没有覆盖,则创建的是原有类型的对象。
    3.2.3 覆盖的常用方法
    1)、orig_type::type_id::set_type_override(new_type::get_type())
    参数new_type::get_type()是新的类在工厂注册时的句柄。这个方法中还有第二个参数replace,一般为default值1,表示如果已经有覆盖存在,新的覆盖会取代原有覆盖。
    2)、orig_type::type_id::set_type_override(new_type::get_type(),“orig_inst_path”)
    第二个参数orig_inst_path是组件结构路径字符串,该类还有第三个参数parent,一般default,表示第二个参数内容为绝对路径。
    3.3 域的自动化(field automation):在使用uvm_component(object)_utils注册uvm类的时候,将类的成员变量一并使用uvm_field_*宏进行声明,并包裹在uvm_component(object)_utils_beginuvm_component(object)_utils_end块中,使得在操作这些成员变量时可以使用一些预定义的成员方法,如copy、compare、print、record、pack等。
    3.3.1 域的自动化宏操作
    uvm_field_{inst,object,string,enum,event,real}(ARG,FLAG),ARG表示成员变量,FLAG表示用来标记的数据操作,一般使用UVM_ALL_ON表示对当前变量打来所有操作方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值