2014-05-03 56 views
0

为什么商业SystemVerilog编译器必须每次重新编译所有内容?在这个问题中,我只提到非可综合的面向对象的SystemVerilog代码。为什么编译面向对象的SystemVerilog代码太慢?

例如,SystemVerilog UVM library被许多项目使用。每次我编译时,我的模拟器都会解析和编译UVM库,包括其中95%的模拟器不需要。为什么我无法准备好预编译的版本,以便可以用于每个仿真?

相比之下,其他语言不需要编译已经被编译并没有改变代码。例如:

  • C++编译.cpp文件一次,然后将它们连接到可执行
  • 的Java编译所有文件到.class文件,这将在执行期间动态地装载了一个类装载程序
+2

编译C++文件时,你必须明确地选择不重新编译并没有使用像拨打或CMake的更改的文件。我不知道GCC能够自己做到这一点。不过,不知道其他编译器。 –

回答

2

我用过的所有模拟器都提供了一个增量编译选项。这意味着如果您更改一个文件,则只会重新编译包含该文件的包以及导入该包的所有后续包/模块。

其中一个大3模拟器实际上会为您提供一个可直接使用的UVM预编译版本(包括DPI)。问题在于它没有用`UVM_NO_DEPRECATED编译。如果你想使用这个定义,那么你可以自己编译它(包括DPI代码和它们的调试功能),可选地使用增量编译(该开关类似于-incr)。

我已经使用了3个大模拟器中的另一种具有增量编译默认开启。