微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > 关于实例化的问题,求助各位大神

关于实例化的问题,求助各位大神

时间:10-02 整理:3721RD 点击:

我想问下,class,port和interface的实例化,什么时候是用new,什么时候是用type_id::create呢?还有就是new函数什么时候在function new中使用,什么时候在build_phase中使用呢?

ps,比如说一个class已经在其定义中factory注册了,那么,在别的class调用这个class的时候,什么时候使用new来申明,什么时候使用的是type_id::create呢?感觉搞得比较模糊,我看张强的那本uvm1.1的书,在第一章的代码中,其env模块实例化了4个模块,按照其后面所讲,不是应该用type_id::create么?为什么他本身用的是new函数呢?

1. 如果这个实例可能会override掉,那么就应该使用create的形式,否则就是new。理论上来说,所有的component,所有的sequence,sequence_item以及所有的cfg object都有这个可能,建议都用override。当然了,如果你不用factory的override功能,那么无所谓。
2. 原来写《UVM1.1应用指南及源代码解析》的时候,最开始只是想写后面的10章,前面9章只是随便写写而已,所以很多细节处理的不好。

那意味着,只要factory注册了,我都用type_id::create来实例化就行了?

在问下,一般来说,实例化是在new函数中实例还是在build函数中实例呢?还是随意

uvm推荐使用factory机制, uvm中的new是必须要的,貌似和节点有关系,初始化一般放在build_phase中,这个phase的执行顺序是自上而下的。

6楼正解

一般都要用create。一般都在build_phase中实例化。

我的cfg在new函数里面实例化,跑代码的时候,也没有报错呢

是自上而下的,据我所知,new函数应该在build前面执行吧,那可以不可以在new里面进行实例化呢?



放到new()里面也不会报错,你可以试一下

学习学习

当然不会错了。cfg是object,在哪里例化都没问题。即使是component,在new里面例化也没有任何问题。对于component,在build_phase及之前例化都不会有问题。注意我之前的“一般”。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top