我在用C++編寫的高級模擬器上編寫了一些用System Verilog編寫的硬件。系統Verilog代碼包含許多隻包含邏輯的函數(即沒有耗時,沒有觸發器)。我想在我的C++模擬器中重用這段代碼。是否可以將System Verilog函數編譯爲C或C++?
是否有任何方式通過的方式重用用C這些功能++(或C,這是很容易鏈接到C++):
- 編譯之前轉換系統的Verilog到C/C++?
- 將系統Verilog編譯爲可由C/C++調用的函數?
- 還有其他方法嗎?
我在用C++編寫的高級模擬器上編寫了一些用System Verilog編寫的硬件。系統Verilog代碼包含許多隻包含邏輯的函數(即沒有耗時,沒有觸發器)。我想在我的C++模擬器中重用這段代碼。是否可以將System Verilog函數編譯爲C或C++?
是否有任何方式通過的方式重用用C這些功能++(或C,這是很容易鏈接到C++):
通常這種集成是在另一個方向完成的,意思是調用Verilog的C/C++例程。當然,這隻對驗證組件有意義,顯然不能合成。要做你想做的事情的最可能的環境是SystemC/Verilog協同仿真,但這意味着使用Verilog仿真器(你明確不想要的)和使用SystemC的C模型。
尋求高性能的模擬器通常會生成C或本機代碼。我不知道有什麼方法可以從VCS(我最熟悉的模擬器)中生成的代碼中提取特定的函數,但可以使用其中一個開源模擬器來完成。任何商業(即許可的)模擬器都不太可能支持生成無需許可即可運行的代碼。我不確定您是否希望獨立於模擬器使用Verilog函數,是由許可,運行時間開銷,工具安裝負擔或其他因素驅動的。
我假設你不維護SystemVerilog例程,因此可能無法改變它們的實現方式。但是,如果可能的話,在C和Verilog中都需要一個通用的策略,那就是編寫能夠將單個定義轉換爲C和Verilog實現的代碼生成器。另一個更深奧的可能性是SystemC綜合。這是相對較新的,我沒有經驗,但是如果您有權訪問這些工具並且它們適用於您的函數,那麼它將允許您爲C模型,硬件模擬和綜合重用C實現。
快速搜索帶來Verilog2C++和Verilator。我沒有使用這些程序;你需要自己嘗試一下。
如果你有一個基礎的SV/Verilog模擬器(例如免費的I laccar/CVC),那麼你可以使用DPI。否則,你可以試試Verilator--我想它比SV更像Verilog/V2K,也許你可以將你的SV代碼映射到Verilog?
Verilator是一個偉大的工具,爲您的目的。基本上Verilator可以將您的設計編譯爲C++類,它是您的頂級模塊的代表。然後,您可以通過在您的自定義C++代碼中驅動和激發C++類來模擬設計。
Verilator還支持DPI接口,這意味着您可以將Verilog函數/任務導出到C++函數並導入用於Verilog代碼的C++函數。
關於verilator和DPI你可能想看看我是怎麼評價它:
」 ...爲了用系統verilog DPI練習cpp(C++)驗證工作臺,使用verilog DUT,我決定下載verilator並做一些自學練習。
首先我安裝了該軟件。這是一個Debian機器上相當簡單: 的apt-get安裝verilator ......」 http://bknpk.ddns.net/my_web/SystemC_MyFirst/verilator_my_first.html
什麼是DPI我有機會獲得一個完全成熟的SV模擬器,但我不小心運行它的一部分嗎?我的模擬器。 – 2011-05-11 13:39:23