factory机制怎么实现

本篇内容介绍了“factory机制怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

精河ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!

    factory其实就是一个宏,当设计set_override等操作时,才有必要去理解factory机制的原理。factory机制更多的是体现在内部编程应用上,它为众多其他机制的实现提供了可能。换句话说,factory机制是UVM的内功,那么UVM的外功自然就是field automation机制。

1.UVM认证

    在定义一个类时,UVM强烈建议使用uvm_component_utils或uvm_object_utils宏来注册。UVM就知道我们定义了一个类:

class A extends uvm_component;

`uvm_component_utils(A)

....

endclass

    当使用上述代码注册A后,那么要创建一个A的实例可以这样做:

A a;

a = A::type_id::create(“a”,this);

    假设前面你的A没有使用uvm_component_utils实例化,那么A实例化只要使用这种方式:

A a;

a = new(“a”,this);

    这种想法看上去比上一种法子更简单一些,不过上一种法子才是UVM推荐的。使用UVM认证的方式实例化,可以使用UVM的众多功能,而后者不行。

2.override功能

    假设我们已经自己定义了一个my_driver,在跑80%的case的时候,这个driver是足够使用的,但是在剩余的20%的case中,我们需要对my_driver的行为做出某些改变,这时就可以用到override功能。使用override功能的第一步要先从my_driver派生出一个类,把这个类的行为定义好:

class new_driver extends my_driver;

...

`uvm_component_utils(new_driver)

endclass

    之后,在具体的case的build_case中,调用override相关函数:

class case_x extends base_test;

function void build_phase(uvm_phase phase);

...

set_type_override_by_type(my_driver::get_type(),new driver::get_type());

endfunction

endclass

    经过上述过程之后,那么在跑case_x的时候,系统中运行的my_driver就是new_driver类型的,其行为是new_driver的行为。不过这有一个前提,那就是my_driver在他的agent中实例化的时候,要使用factory的方式实例化。

class my_agent;

my_driver drv;

function void build_phase(uvm_phase phase);

...

drv=my_driver::type_id::create(“drv”,this);

endfunction

endclass

    假如不使用上面的这种写法,而是使用drv=new(“drv”,this)的写法进行实例化,那么override功能是不能实现的。

3.factory的本质:重写了new函数

    有了factory之后,除了可以使用类名创建实例之外,还可以通过一个代表类名字的字符串来进行实例化,除此之外还可以进行override功能。所以从本质上看,factory机制其实是对systemverilog中new函数的重载。因为这个原始的new函数实在是太简单了,功能太少,经过factory机制的改良之后,进行实例化的方法就多了很多。

“factory机制怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!

文章题目:factory机制怎么实现
浏览路径:https://www.cdcxhl.com/article44/jgshee.html

成都网站建设公司_创新互联,为您提供搜索引擎优化网站收录移动网站建设云服务器企业网站制作外贸网站建设

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

手机网站建设