在UVM Cookbook中,编写了类对象实例化在运行时完成。但是在运行之前,在编译/详细说明期间,我们可能还有类的所有细节。
如下图所示(取自UVM Cookbook),显示模块和界面即时创建在精化阶段完成,但类对象创建在运行时完成。
考虑这个示例。
// Inside any .sv file
class A;
int a;
endclass
A x;
initial
x=new();
现在在这种情况下,不需要在运行时创建类,因为我们在编译/详细说明时可以获得类的所有详细信息,就像其他模块或接口详细信息一样。
那么为什么在Systemverilog中,特别是在运行时才进行类实例化?
即使在C ++中,也不会在运行时创建对象。
注意:在这个问题中,我说的是简单的类,而不是使用继承,其中运行时创建可能成为必需的。通过创建我没有提到内存分配,因为所有(模块,接口,类)的内存将仅在模拟期间分配。我只是考虑了图像的背景。
答案 0 :(得分:1)
所有对象都是在运行时创建的。
也许你将运行时与运行阶段混淆了?运行阶段是uvm中定相机制的一部分,允许在模拟中的不同周期之间进行分离。因此,所有uvm组件都可以按阶段同步。
这里的对象创建是在build_phase中完成的,它是运行时的一部分。
答案 1 :(得分:0)
正如@Tudor所指出的,所有对象实例都是在运行时创建的。它们必须是因为所有对象都必须执行它们的构造函数。这与C ++相同。