UVM的factory机制

在UVM中使用工厂模式基本上分为三个步骤:

1. 注册

当定义一个类的时候,它的类型必须要注册,UVM已经提供了专用的宏。

`uvm_component_utils(class_type_name)

`uvm_component_param_utils(class_type_name #(params))

`uvm_object_utils(class_type_name)

`uvm_object_param_utils(class_type_name #(params))

这四个宏中两个是为参数化的类准备的,另外两个是为非参数化的类注册用的。

2. 实例化对象

在对component或object型对象进行实例化的时候要使用静态方法create(),不能采用new()去实例化。也就是要用如下这个非常奇怪的实例化格式:

object_name = class_type::type_id::create("object_name",this);

3. 重载override

最后就是在需要override的时候,按照类型或者名称去override原来的对象。

set_inst_override_by_type(original_type, override_type, full_inst_path )

set_inst_override_by_name(original_type_name, override_type_name, full_inst_path )

参考文献:

[1] UVM的factory机制. http://www.asicdv.com/uvm_scan.asp?id=30

[2] UVM FACTORY . http://www.testbench.in/UT_06_UVM_FACTORY.html

时间: 2024-11-07 19:12:16

UVM的factory机制的相关文章

UVM中factory机制的使用

UVM中的factory机制一般用在sequence的重载,尤其是virtual sequence.当Test_case变化时,通过virtual sequence的重载,可以很容易构建新的测试. 因为virtual可以控制选择sequence,sequence的启动,执行顺序等. 在build_phase阶段,不需要改变default_sequence,不需要改变别处代码. Transaction的重载,可以在不改变sequence,default_sequence的情况下,改变Transac

2.2.2 加入factory机制

上一节给出了一个只有driver.使用UVM搭建的验证平台.严格来说这根本就不算是UVM验证平台,因为UVM的特性几乎一点都没有用到.像上节中my_driver的实例化及drv.main_phase的显式调用,即使不使用UVM,只使用简单的SystemVerilog也可以完成.本节将会为读者展示在初学者看来感觉最神奇的一点:自动创建一个类的实例并调用其中的函数(function)和任务(task). 要使用这个功能,需要引入UVM的factory机制: 代码清单 2-7 文件:src/ch2/s

UVM基础之---------uvm factory机制register

factory机制的一大特点就是根据类的名字来创建类的实例. factory 机制中根据类名来创建类的实例所用到的技术:一是参数化的类,二是静态变量和静态函数.这两者是factory机制实现的根本所在. UVM 中有两大关键类,uvm_object 和 uvm_component.一个 uvm_object 在定义时一般要调用 uvm_object_utils 宏,而一个 uvm_component 在定义时要调用uvm_component_utils宏.factory所有的操作都通过这两个宏来

UVM基础之---------uvm factory机制base

从名字上面就知道,uvm_factory用来制造uvm_objects和component.在一个仿真过程中,只有一个factory的例化存在. 用户定义的object和component types通过typedef或者宏在factory中注册,factory产生和保存轻量级的代理(proxy): 1.  uvm_object_registry #(T,Tname) for objects 2.  uvm_component_registry #(T,Tname) for components

UVM:9.2.2 小而美与factory 机制的重载

1.小而美与factory 机制的重载 2.原始A_driver 的drive_one_pkt 如下: 1)分成3个子任务. 2)如果要构造sfd 错误的例子,只需要从A_driver 派生B_driver,并重载drive_sfd 即可. 3.如果不是分成3个子任务,而是一个完整的任务: 1)那么在B_driver  中需要重载的是整个drive_one_pkt 这个任务: 此时,其他两个子函数的代码要复制到drive_one_pkt 中,容易产生错误.代码要重用,可以封装成可重载的函数/任务

UVM:8.4.3 用factory 机制创建实例的接口

1.create_object_by_name,根据类名字创建object,原型: 一般只用第一个: 2.create_object_by_type,根据类型创建一个object,原型: 一般只用第一个: 3.create_component_by_name,根据类名创建一个component,原型: 1)第一个类名. 2)第二个父节点全名. 3)第三个新的component名字. 4)第四个父节点指针. 4个都要用: 一般在component 的new 或者build_phase 中使用.如果

UVM:8.2.4 factory 机制的调试

1.UVM提供了print_override_info 帮助debug,以上节new_monitor 为例: 2.调用print_override_info : 结果: 实际调用debug_create_by_name. 3.还提供debug_create_by_type,原型: 1)应用: 输出与上面相同. 4.uvm_factory 还提供print 函数,原型: 1)参数可能为0,1,2.0打印最少,2打印最多. 5.uvm_root 的print_topology 打印UVM 树的拓扑结

UVM中Callback机制

Callback机制,其实是使用OOP来实现的一种程序开发者向程序使用者提供的模块内部的接口.可以在Test_case的高度改变其他component的一些行为. Systemverilog中已经提供的Callback函数pre_randomize,post_randomize.对于UVM和VIP来说,其他的CallBack函数都是自己程序的开发者事先 留下的hook. Callback的实现: 1)首先直接从component扩展出新的类来实现pre_do等function不可取.因为comp

UVM/OVM中的factory【zz】

原文地址:http://bbs.eetop.cn/viewthread.php?tid=452518&extra=&authorid=828160&page=1 在新的项目中再次用到了UVM,距离上次项目自己写UVM代码已经快一年,所以很多UVM的细节东西自己也记不太清楚了,只能记得UVM各个点的主线,这次重拾UVM,又重点看到了factory部分,所以就在此mark一下,做个笔记. 在记录中肯定有不对和偏颇的地方,一个人的看法毕竟有死角,所以看到不会的地方请大家及时拍砖和轻喷.