UVM 工厂(factory)机制

UVM(二):factory机制——工厂的作用及本质、重载(override) 1.factory机制的作用 在SystemVerilog中,我们知道,要创建一个类的实例,必须使用new()函数。而在UVM中,提供了factory机制:它可以根据类名创建这个类的一个实例;另外,还可以在创建类的实例时根据是否有重载类型来决定是创建原始的类,还是创建重载后的类的实例。 从本质上来看,factory机制其实是对SystemVerilog中new函数的重载:原始的new函数功能太过简单。经过factory机制的改良后,进行实例化的方法多了很多。 2.使... 阅读详情

目录

二、UVM工厂机制

1、工厂机制概述

2、工厂机制运用


二、UVM工厂机制

1、工厂机制概述

        工厂机制最重要的意义就是在不改变源代码的情况下,重写子类以替换验证环境中的实例或者已经注册的类型,便于产品的迭代以及验证环境的复用性。这里的实例或者类型替代,称做覆盖(override),进行override的双方需要满足工厂注册(registration)和多态(polymorphism)的要求,即重写的类型与被覆盖的类型要有派生关系,注意component和object之间互相不能覆盖。

        在整个仿真中,factory有且只有一个,保证了所有类都注册在一个工厂当中。通过工厂注册,利用工厂完成对象的创建。所有类的实例都是由工厂产生,因此可以灵活替换其中的实例或类型,实现对环境内部组件类型或者实例的覆盖。

2、工厂机制运用

2.1一般来说运用工厂机制的步骤分为以下几步:

1.将类注册到工厂;

2.例化前设置覆盖对象和类型(可选);

3.创建对象;

将类注册到工厂:

`uvm_component_utils()//将component注册到工厂
`uvm_component_utils_begin()


`uvm_component_utils_end//包含field_automatic机制

`uvm_object_utils()//将object注册到工厂
`uvm_object_utils_begin()


`uvm_object_utils_end//包含field_automatic机制

设置覆盖对象和类型:

//替换整个平台下所有类型,uvm_object_wrapper通过type_name::get_type()获取
set_type_override_by_type(uvm_object_wrapper original_type,uvm_object_wrapper override_type,bit replace=1);//replace=1表示是否重复覆盖,可缺省,默认为1
//指替换指定路径下的类型,第一个为相对路径
set_inst_override_by_type(string relative_inst_path,uvm_object_wrapper original_type,uvm_object_wrapper override_type);//指定路径下替换类型
//通过type的字符串进行类型替换
set_type_override_by_name(string original_type,string override_type,bit replace=1);//字符串替代
//通过type的字符串替换指定路径下的类型
set_inst_override_by_name(string relative_inst_path,string original_type,string override_type);

创建对象(实例):

//在build_phase中创建component对象
comp_type_name::type_id::create(string name,uvm_component parent);
//创建object对象
object_type_name::type_id::create(string name);

2.2系统存在一个uvm_factory类型的全局变量factory,在任何位置可以调用factory中的重载函数:

1)在initial中使用:

initial begin
    factory.set_type_override_by_type(old_mon::get_type(),new_mon::get_type());
end

2)在component中使用:

factory.set_type_override_by_type(old_mon::get_type(),new_mon::get_type());

如要进行覆盖(override),需要在创建对象之前设置覆盖对象和类型。

2.3可以通过仿真选项打开类型覆盖功能:

<sim command> +uvm_set_inst_override=<req_type>,<override_type>,<full_inst_path>
<sim command> +uvm_set_type_override=<req_type>,<override_type>[,<replace>]

分别对应set_inst_override_by_name和set_type_override_by_name:

1)实例重载:

<sim command> +uvm_set_inst_override="old_mon,new_mon,uvm_test_top.env.o_agt.mon"

2)类型重载:

<sim command> +uvm_set_type_override="old_mon,new_mon"

UVMfactory工厂的注册、创建和覆盖机制 现在,当使用 create 函数创建 my_object 对象时,会使用 my_object_factory 类中的自定义创建方法。工厂注册、创建和覆盖机制UVM 中非常重要的概念,它们提供了灵活的机制来创建和定制验证环境中的对象。通过工厂机制,你可以根据需要创建不同的对象类型,使用不同的配置参数,以及定制对象的创建过程。工厂覆盖是指使用自定义的创建方法来覆盖工厂的默认创建方法。override_by_name 函数允许你使用自定义的创建方法来覆盖默认的创建方法,但只对特定名称的对象有效。 阅读详情

相关推荐

UVM工厂机制实战:如何用factory机制实现SystemVerilog中的动态重载(附代码示例)

本文深入探讨了UVM工厂机制中的动态重载(override)功能,通过实战代码示例详细解析了类型重载与实例重载的应用场景与区别。文章旨在帮助验证工程师掌握如何利用factory机制灵活替换SystemVerilog验证环境中的组件或事务对象,从而提升代码的复用性和测试场景的扩展效率,并提供了常见陷阱的调试技巧。

info6的博客 428

UVM——工厂factory机制和phase机制

文章目录一、factory工厂机制1.1. 登记注册1.2. 实例化对象1.3. 覆盖override1.4. 检查覆盖是否完成—factory.print()二、phase机制2.1. phase机制组成2.2. phase执行顺序 一、factory工厂机制   在UVM中使用工厂模式基本上分为三个步骤。    1) Registration——登记;    2) Construction——...

Mr.翟的博客 7519

[UVM源代码研究] uvm中的factory机制uvm-1.2版)

uvm中的factory机制uvm-1.2版)

sunstat的博客 1942

UVMfactory 机制

目录1. 注册2. 创建3. 创建函数的重载3.1. 重载方法一次重载连续重载3.2. 信息打印 译作工厂机制,来源于设计模式中的工厂机制。 factoy机制的意义在于:通过将拓展类在工厂注册,可实现环境内部组件的创建与对象的重载 factory机制主要针对构成验证环境层次的uvm_component及其子类,以及构成环境配置属性和数据传输的uvm_object及其子类 1. 注册 使用factory机制的第一步就是将类注册到工厂。这个factory是整个全局仿真中存在且唯一的“机构”,所有被注册的类才能

Starry__的博客 5430

factory - UVM工厂机制的实现详细解析

UVM Factory机制解析摘要: UVM Factory采用单例模式实现动态类型替换和统一对象创建,其核心组件包括类型注册表(m_type_table)和重载映射表(m_type/inst_overrides)。通过uvm_object_wrapper作为类元标识,工厂在注册时记录类信息,创建时根据重载规则返回目标类型实例。关键流程包括:1)宏自动生成包装器类并注册;2)通过type_id提供创建接口;3)支持类型/实例级重载。该机制通过分离类型声明与实例化,实现了测试场景的灵活配置。

weixin_49675086的博客 810

UVM基础-Factory机制

回顾整个过程,总结起来就是:factory机制进行实例化的过程,会先对component进行注册,即调用f.registory,然后查询是否有重载记录,即调用find_override_by_type,如果有重载记录,则返回重载后的类,最后调用registory中的create_component函数,这个函数最终会调用重载后的类的构造函数new,如果没有重载记录,则调用当前实例化组件的构造函数(new)。这个函数有三个参数,第一个为被重载的类,第二个为重载的类,第三个为是否可以被后面的重载覆盖。

qq_36955425的博客 3675

UVM工厂机制

一、工厂机制的意义 工厂机制也是软件的一种典型设计模式,UVM工厂的存在就是为了更方便地替换验证环境中的实例或者注册了的类型,同时工厂的注册机制也带来了配置的灵活性。 这里的实例或者类型替代,在UVM中称作覆盖(override),而被用来替换的对象或者类型,应满足注册和多态的要求。 UVM的验证环境构成可以分为两个部分。一部分构成了环境的层次,这部分代码是通过uvm_component类完成,另一部分构成了环境的属性(例如配置)和数据传输,这一部分通过uvm_object类完成。uvm_componen

qq_39794062的博客 3685

UVM工厂机制factory

工厂机制UVM的真正魅力所在,也是软件的一种设计模式,接下来我将对工厂的意义和背后机制做一个简单的说明以上就是我总结的factory机制,覆盖是factroy最有优势的地方。要想使用factory机制,必须要先注册。通过注册、创建、覆盖即可发挥出factory的全部优势。create方法和override的方法有很多,但背后都有由actory实现,选择其中一种使用即可,我推荐采用registry的方法,因为相比于factory更加简单。

LSC0311的博客 1551

工厂机制factory)-UVM

uvm_do的作用

weixin_42705678的博客 1759

UVM验证入门(3)-factory工厂机制

本文介绍了UVM中的单例类设计模式和工厂机制。单例类通过保护构造函数、静态实例变量和get方法确保全局唯一实例,应用于UVM管理器类。工厂机制基于类型重载,提供动态替换能力,通过类型注册表实现灵活的对象创建。文章详细讲解了组件/对象注册宏的使用、内部实现机制,以及工厂创建方法与传统方式的对比优势。这些机制增强了UVM验证环境的灵活性、可重用性和可维护性。

初探芯途学未深,且将浅见记留痕。 语言工具皆粗解,但乞方家正误真。 1484

UVM初学篇 -(15) UVM factory 工厂机制

工厂机制不是UVM独有的机制,这是面向对象语言特有的机制。在面向对象中工厂中角色就是两个:工厂和产品,工厂机制的意思在于将创建某一类对象的任务交给对应的工厂类统一管理,构建对象体系。工厂模式提供了一种灵活和可扩展的方式来创建对象,使代码更易于维护和扩展。通过将对象的创建逻辑封装在工厂中,可以隐藏对象的实现细节,提高代码复用性,并简化对象的创建过程,同时实现了对象之间的解耦。而UVM工厂机制也是同样的道理,目的是为了更好的注册实例和方便地替换已经注册的实例。

u011164476的博客 2001

工厂机制factory)—UVM

文章目录简介ucm_component和uvm_object的例化uvm_coreservice_t类注册后的对象创建(component或者object)component/object与工厂有关的方法工厂创建component/object的方法覆盖方法确保正确覆盖的代码要求 简介 工厂的存在,就是为了更方便地替换验证环境中的实例或者注册了的类型,同时工厂的注册机制也带来了配置的灵活性; 实例或者类型的替代,在UVM中称作覆盖(override),而**被用来替换的对象或者类型,应该满足注册(regi

SummerXRT的博客 3122

UVM-工厂机制(factory)

文章目录1.工厂模式概述2.创建(create)2.1 **定义->注册->构建** 缺一不可2.2 什么是宏3.覆盖方法 1.工厂模式概述 工厂模式的主要解决的问题是,将原来分布在各个地方的对象创建过程单独抽离出来,交给工厂类负责创建。其他地方想要使用对象直接找工厂(即调用工厂的方法)获取对象。 UVM工厂的存在就是为了更方便地替换验证环境中的实例或者注册了的类型,同时工厂的注册机制也带来了配置的灵活性。 实例或类型替代,在UVM中称作覆盖,而被用来替换的对象或者类型,应该满足注册和多态的要

sinat_41774721的博客 4560

【数字IC验证快速入门】38、UVM项目实践之APB_SPI(6)工厂机制factory机制深入

导读:作者有幸在中国电子信息领域的排头兵院校“电子科技大学”攻读研究生期间,接触到前沿的数字IC验证知识,旁听到诸如华为海思、清华紫光、联发科技等业界顶尖集成电路相关企业面授课程,对数字IC验证有了一些知识积累和学习心得。为帮助想入门前端IC验证的朋友,思忱一二后,特开此专栏,以期花最短的时间,走最少的弯路,学最多的IC验证技术知识。 文章目录一、学习目标二、工厂机制factory)深入2.1、管理测试用例的要求2.2、Testcase要求:Transaction / Components2.3、解决.

悟已往之不谏 知来者之可追 1552

uvm_factory——户部尚书

工厂机制负责管理uvm世界中所有object、component的注册、覆盖以及create前覆盖类的查找。uvm_default_factory :定义了注册、设置覆盖、创建、查找覆盖等方法。 protected uvm_object_wrapper m_type_names[string]:类似于哈希表,保存对象类型的名称和类型的映射关系。 protected bit m_types[uvm_object_wrapper]:1表示该类型已被注册。 protected

LSC0311的博客 1164

4 factory UVM工厂模式解析:类型覆盖与实例覆盖机制

/ 在packet_pkg中`uvm_object_utils(packet) // 注册packet类到工厂// 在gen_pkg中`uvm_component_utils(gen) // 注册gen类到工厂UVM工厂机制的核心原则工厂覆盖的优先级:实例覆盖 > 类型覆盖 > 默认类型在UVM中,工厂覆盖机制允许类型覆盖:改变对象的类型(如packet→mypacket实例覆盖:为特定实例提供自定义行为(如gen→mygen工厂覆盖的使用场景在不修改原始类代码的情况下,改变对象类型。

m0_57945974的博客 699

UVMfactory机制源代码分析

uvm源代码的第二篇,工厂机制是整个uvm的基石,用到的所有组件和sequence都需要在工厂中注册。前面第一篇的component源代码也使用到了工厂机制注册uvm_test1、根据名字创建实例,我们感受最深的就是,这个在component组件的run_tesr里面被用到了,我们给验证环境传递了一个test_name ,工厂机制就自动帮我们完成了test_case的创建。

qq_41654814的博客 648

[UVM]1.factory工厂机制 & creat & uvm_coreservice_t

任何组件new函数(构建函数)只能有两个参数;parent 当前实例的上一层就是它的parent。type_id创建示例。factory是独有的。type_id 就是注册到工厂的类型(模具),第一个冒号找到模具,第二个冒号找到函数create会在后台调用它的new。仿真一开始 (run 0)

freddiemore的博客 743
上一篇: UVM基本概念介绍
下一篇: UVM常用类及树形结构
hyussd
博客等级 码龄8年 23粉丝 · 6原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值