参数化类的重载
相关参考:UVM factory机制如何重载带参数的object - 知乎
需求背景:需要重载参数化的predictor;
参数化类:参数不同意味着不同类!(所以能重载的前提,参数一致)
基类:(参数需要有默认值,不然会报编译错误)
子类:
env里面的例化:
重载的调试(在env里调用:实例名.print_override_info;白皮书也有):
test里面实行重载:
虽然调试这里识别不了,但是实际上已经替换成功;
参数化类的注册虽然看上去没有注册进去,但实际运行结果的确可以重载成功;
uvm源码注释里面有一个参考例子:
一个#号编译的问题:
在Bytedance这边遇到了一个#号编译的问题:
问题定位:是没有把文件include进来;(没有报类型不存在编译错误);
重载新增属性选择,需要cast
A_scb从base_scb中继承而来,增加了新变量xx_mode,在test这一层进行env.scb.xx_mode=1;
会报编译问题,因为基类的确没有这个变量;需要用cast的进行类型转换;声明子类句柄A_handle;
$cast(A_handle,env.scb);//最好检查一下是否转换成功
再A_handle.xx_mode=1
参数化类:声明句柄时要带上相应的参数;
class abc #(type T=classx ,int port=3) extend uvm_object;
声明句柄:abc#(classxx,9) ref_class;
new/create的时候也需要带上;