简介
- 工厂的存在,就是为了更方便地替换验证环境中的实例或者注册了的类型,同时工厂的注册机制也带来了配置的灵活性;
- 实例或者类型的替代,在UVM中称作覆盖(override),而**被用来替换的对象或者类型,应该满足注册(registration)和多态(polymorphism)**的要求;
- uvm的验证环境构成可以分为两个部分:一部分构成了环境的层次,通过ucm_component类完成;另一部分构成了环境的属性(例如配置)和数据传输,这部分通过uvm_object类完成。
- ucm_component类继承与uvm_object,这两种类也是进出工厂的主要模具和生产对象。之所以称为模具,是因为通过注册,可以利用工厂完成对象的创建;
- 之所以由工厂创建对象,也是利用了工厂生产模具可以灵活替代的好处,这使得在不修改原有验证环境层次和验证包的同时,实现了对环境内部组件类型或者对象的覆盖。
ucm_component和uvm_object的例化
- 必须要有的步骤:定义——>注册——>构建
- 注册:`uvm_component_utils(T,parent) 或者 uvm_object_utils(T)
class comp1 extends uvm_component;
`uvm_component_utils(comp1)
function new(string name ="comp1",uvm_component parent = null);
super.new(name,parent);
endfunction:new
endclass
class obj1 extends uvm_object;
`uvm_object_utils(obj1) <