0

在 UVM Cookbook 中,写到类对象实例化是在运行时完成的。但是在运行时间之前,在编译/细化期间,我们也可能拥有类的所有细节。

如下图所示(取自 UVM Cookbook),显示模块和接口的即时创建是在精化阶段完成的,但类对象的创建是在运行时完成的。

在此处输入图像描述

考虑这个示例。

// Inside any .sv file
class A;
  int a;
endclass

A x;

initial
  x=new();

现在在这种情况下,不需要在运行时创建类,因为我们在编译/精化时拥有类的所有细节,就像另一个模块或接口细节一样。

那么为什么在 Systemverilog 中,特别是在运行时只进行类实例化呢?

即使在 C++ 中,对象创建也不是在运行时完成的。

注意:在这个问题中,我说的是简单的类,而不是使用继承,其中运行时创建可能成为强制性的。通过创建我不指内存分配,因为所有(模块,接口,类)的内存将仅在模拟期间分配。我只是在考虑图像的上下文。

4

2 回答 2

1

所有对象都是在运行时创建的。

也许您将运行时与运行阶段混淆了?运行阶段是 uvm 中相位机制的一部分,它允许在模拟中的不同时期之间进行分离。因此,所有 uvm 组件都可以按相位同步。

这里的对象创建是在 build_phase 中完成的,它是运行时的一部分。

于 2016-10-31T20:42:22.307 回答
0

正如@Tudor 指出的那样,所有对象实例都是在运行时创建的。它们必须是因为所有对象都必须执行它们的构造函数。这与 C++ 相同。

于 2015-02-17T23:20:30.567 回答