(4)UVM 覆盖方法(override)

UVM 覆盖方法

一、概述

工厂提供的便利—覆盖
覆盖机制可以将其原来所属的类型替换为另外一个新的类型。
在覆盖之后,原本用来创建原属类型的请求,将由工厂来创建新的替换类型。
覆盖带来的便利:
1.无需再修改原始代码,继而保持了原有代码的封装性;
2. 新的替换类型必须与被替换类型相兼容,否则稍后的句柄赋值将失败,所以使用继承。//新定义的类型必须继承于原有的类型。
做顶层修改时,非常方便!
1.允许灵活的配置,例如可使用子类来覆盖原本的父类;
2.可使用不同的对象来修改其代码行为。
要想实现覆盖特性,原有类型和新类型均需要注册。
当使用create()来创建对象时:
1.工厂会检查,是否原有类型被覆盖
2.如果是,那么它会创建一个新类型的对象
3.如果不是,那么它会创建一个原有类型的对象
覆盖发生时,可以使用“类型覆盖”或者"实例覆盖"
1.类型覆盖指,UVM层次结构下的所有原有类型都被覆盖类型所替换。
2.实例覆盖指,在某些位置中的原有类型会被覆盖类型所替换。

二、覆盖方法

set_type_override()

static function void set_type_override(uvm_object_wrapper override_type,bit replace=1);
  • uvm_object_wrapper override_type
    它并不是某一个具体实例的句柄,实际上是注册过后的某一个类在工厂中注册时的句柄。怎么找到它呢?就使用new_type::get_type()。
  • bit replace
    1:如果已经有覆盖存在,那么新的覆盖会替代旧的覆盖。
    2:如果已经有覆盖存在,那么该覆盖将不会生效。
  • set_type_override是一个静态函数
    orig_type::type_id::set_type_override(new_type::get_type())
    orig_type是原有的类型,new_type是新的类型

set_inst_override()

static function void set_inst_override(uvm_object_wrapper override_type,string inst_path,uvm_component parent=null);
  • string inst_path指向的是组件结构的路径字符串
  • uvm_component parent=null
    如果缺省,表示使用inst_path内容为绝对路径
    如果有值传递,则使用{parent.get_full_name(),"",inst_path}来作为目标路径。
  • orig_type::type_id::set_inst_override(new_type::get_type(),“orig_i
  • 11
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数字IC小白的日常修炼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值