factory机制的本质是什么?
factory机制本质是 对SystemVerilog中new函数的重载 ,其带来了如下好处:
- 提供新的创建实例的方法:根据类名创建这个类的一个实例。
- 提供 重载过程控制函数 ,使得重载更加灵活,代码复用性更方便。
- 应用:通过重载transaction、sequence或component,复用原有代码,快速创建新测试用例。
factory机制式的重载的过程
// src/ch8/section8.2/8.2.1/correct/my_case0.sv
function void my_case0::print_hungry(bird b_ptr);
b_ptr.hungry();
b_ptr.hungry2();
endfunction
...
function void my_case0::build_phase(uvm_phase phase);
bird bird_inst;
super.build_phase(phase);
set_type_override_by_type(bird::get_type(), parrot::get_type());
bird_inst = bird::type_id::create("bird_inst");
print_hungry(bird_inst);
endfunction
// 打印结果如下:
// "I am a parrot, I am hungry" // virtual函数
// "I am a bird, I am hungry2"
解释如下:
- 第13行进行例化时,由于前面set_type_override_by_type描述了bird到parrot的重载记录,所以bird_inst对应的实例化对象为parrot类型。
- 第14行将bird_inst传递给print_hungry函数时,会被 转换为函数形参bird类型的b_ptr ,所以
- 执行第3行的b_ptr.hungry();时,由于hungry是 virtual修饰的函数,所以会被重载 ,执行parrot类中的hungry,打印 "I am a parrot, I am hungry"
- 执行第4行的b_ptr.hungry2();时,由于hungry2未被virtual修饰,所以不会重载,执行bird类中的hungry2,打印 "I am a bird, I am hungry2"
factory机制式复杂的重载
UVM支持连续的重载
set_type_override_by_type(bird::get_type(), parrot::get_type());
set_type_override_by_type(parrot::get_type(), big_parrot::get_type());
注意:调用virtual函数/任务时,会查询这两条记录后,所以经过连续重载bird中调用的virtual函数最后会调用big_parrot中对应函数
替换式的重载:后者的重载记录会替换前者的重载记录
set_type_override_by_type(bird::get_type(), parrot::get_type());
set_type_override_by_type(bird::get_type(), sparrow::get_type());
注意:这里是否替换重载记录可以通过set_type_override_by_type的第三个参数控制,默认情况为1
- 为1时,存在对同一 被重载的类型 的重载记录时,会用当前重载记录 覆盖 前面的重载记录
- 为0时,存在对同一 被仲裁的类型 的重载记录时,不会 用当前重载记录 覆盖 前面的重载记录
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
UVM
+关注
关注
0文章
182浏览量
19167 -
SRC
+关注
关注
0文章
60浏览量
17983
发布评论请先 登录
相关推荐
factory demo编译报错的原因?
sdkconfig \'F:/01_ESP_STM_PRJ/ESP32/ESP-BOX/esp-box-master/examples/factory_demo/sdkconfig
发表于 06-27 06:43
关于C++中的函数重载机制
函数重载是C++的新增机制,是在同一个作用域中能声明定义多个同名字的函数.(我们知道函数的名字是函数代码块的起始地址,这个首地址能够将函数的控制权转移给这个代码块的区域).在定义多个同名函数的时候
发表于 10-01 17:18
IC验证"UVM验证平台加入factory机制"(六)
加入factory机制 上一节《IC验证"一个简单的UVM验证平台"是如何搭建的(五)》给出了一个只有driver、使用UVM搭建的验证平台。严格来说这根本就不算是UVM验证
发表于 12-08 12:07
IC验证“UVM验证平台加入objection机制和virtual interface机制“(七)
在上一节中,**《IC验证"UVM验证平台加入factory机制"(六)》**虽然输出了“main_phase is called”,但是“data is drived”并没有
发表于 12-09 18:28
深入了解Factory机制的实现方式
的create_object函数完成实例化。简而言之,整个利用Factory机制实例化对象的过程实际上是在代理和工厂之间绕了一圈,我们通过代理提交实例化请求,代理会将该请求发给工厂,工厂找到重
发表于 09-16 14:35
编译出厂工程(factory_demo)失败的原因?
系统:win10 64位 企业版idf用的v4.4 release已经按照README应用了补丁.编译到最后link阶段就报错了[1466/1468] Linking CXX executable factory_demo.elfFAILED: factory_demo.
发表于 03-09 07:42
MAX9491 pdf datasheet (Factory
factory-programmablePLL output that can be set to almost any frequency,ranging from 4MHz to 200MHz. The MAX9491 uses aone-time-pro
发表于 10-22 21:49
•18次下载
基于Proxy Factory 的WSRF服务调度与监控
以WS-Resource 工厂模式和EPR 的可传递性为基础,提出一种Web 服务资源框架(WSRF)服务调度和资源监控的机制。通过建立Proxy Factory 服务,在代替客户端创建资源实例,并在进行端点引用
发表于 03-20 17:16
•20次下载
LM26NV,datasheet,pdf(Factory P
reference, DAC, temperaturesensor and comparator. Utilizing factory programming,it can be manufactured with different trip points as
发表于 10-20 14:51
•19次下载
LM26,datasheet,pdf(Factory Pre
reference, DAC, temperaturesensor and comparator. Utilizing factory programming, it canbe manufactured with different trip points as w
发表于 10-20 14:53
•27次下载
Lip Factory推AI算法为顾客定制口红
据外媒报道,很多女性有过在选择唇膏色号时犹豫不决的经历。Lip Factory则使用人工智能来确定--并为每个客户创建“最佳”的唇膏色号。Lip Factory系统将这一概念发挥到了极致,通过现场创建客户特定的口红。
MAX22005: 12-Channel Factory-Calibrated Configurable Industrial-Analog Input Data Sheet MAX22005: 12-Channel Factory-Calibrated Configurable
电子发烧友网为你提供ADI(ADI)MAX22005: 12-Channel Factory-Calibrated Configurable Industrial-Analog Input Data
发表于 10-16 19:14
评论