其他分享
首页 > 其他分享> > 3. UVM -- factory机制与平台组件构建

3. UVM -- factory机制与平台组件构建

作者:互联网

3. UVM -- factory机制与平台组件构建

3.1. 什么是factory机制

3.2. uvm factory机制的原理及使用

  

3.2.1 factory机制的运作步骤

(1). factory注册:一般使用宏

注册
`uvm object utils() 对 uvm object类 进行注册
`uvm_component_utils() 对 uvm_component类 进行注册
`uvm object param utils() 对 object参数化类 进行注册
`uvm component param utils() 对 component参数化类 进行注册

宏的作用如下:

(2). 实例化对象:要使用 静态方法 class_name:type_id:create() 来代替new实例化对象;

create()会按以下步骤执行:

  • 调用factory的get函数获取factory对象;
  • 以当前所要创建对象的类名为索引,在factory的替换列表中查询该类 该对象是否被替换;
  • 如果替换列表中没有相关条目,则调用当前类的new(0函数;如果有相关条目,则调用替换类的new()函数实例化对象。

(3). 根据具体要求向替换表添加替换条目,override;

(4). 在运行仿真时,UVM会根据这两张表自动的实现factory机制;

3.2.2. 使用factory机制需要注意的几点:

  1. 用户需要向注册表注册。
  2. 用户需要向替换表添加项目。
  3. 被替换对象的类型是替换对象类型的基类。

factory机制与override机制

  常用的override函数有两个:

set_type_override_by_type()

set_type_override_by_type(original_class_name::get_type(),target_class_name::get_type());

  

  这个函数的作用是将平台中 所有类型 为“original_.class_name”实例化的对象都被替换成类型为“target_class_name”的对象 -- 全部替换

set_inst_override_by_type()

set_inst_override_by_type("original_inst_path", original_class_name::get_type(), target_class_name:get_type());

  

  这个函数的作用是将平台中 指定路径 的类型为“original_class_name”实例化的对象被替换成类型为“target_class_name”的对象 -- 指定替换,路径越具体,替换越明确

  这两个函数存在于component中,并且一般需要在 build_phase() 中调用。

一个简单平台 -- 添加平台组件

标签:name,--,my0,factory,uvm,type,phase,my,UVM
来源: https://www.cnblogs.com/thisway2014/p/16487814.html