MH ...原來答案是微不足道的,但是這是唯一的線索對這個問題,所以我會離開它,以防別人發現themselve了類似的情況:
的SystemVerilog沒有setenv()或getenv()函數。他們實際上是由C按下面的步驟來實現:
module/program foo();
import "DPI-C" function <return type> foonction(<function arguments>);
endmodule/program;
顯然,在我的情況下,有人這樣做了的getenv(),但從來沒有SETENV()。原因我沒趕上那是因爲我的代碼有問題被列入以下方式:
**foo.sv**
if(var.bit) begin
call_function();
use_environment_variable();
end
**bar.sv**
module bar();
<do stuff>
`include foo.sv <-- foo code is copied in after calculations have occured.
endmodule
試圖導入DPI-C在foo.sv會引發錯誤,因爲計算所發生後,進口將抵達。爲了解決這個問題,我們需要在bar.sv導入像這樣:除非你正在運行的SV其他可執行
module bar();
import "DPI-C" function int setenv(string name, string value, int override);
<do stuff>
`include foo.sv
endmodule
你嘗試'運行putenv()'?它沒有在ANSI-C中定義,但是它被許多編譯器支持。不確定DPI-C是否接受它。 – Qiu