2014-05-03 92 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個大模擬器中的另一種具有增量編譯默認開啓。