2016-07-30 37 views
0

Ich möchte ein Makro während der Laufzeit in Verilog mit Umgebungsvariablen definieren.Wie setze ich den Wert eines Makros mit Umgebungsvariablen oder Befehlszeilen in Verilog?

Zum Beispiel möchte ich Text in eine Datei nur dann drucken, wenn das DEBUG Makro als 1 definiert ist.

`define DEBUG 0 
... 
if(DEBUG) $fwrite(file,"Debug message"); 

Wie kann ich die Definition von DEBUG-1 außer Kraft setzen, wenn die Simulation von Befehlszeile oder Umgebungsvariable?

Alternativ könnte ich das Makro undefiniert halten und ifdef

`ifdef(DEBUG) $fwrite(file,"Debug message"); 

In diesem Fall verwenden würde ich das Makro DEBUG zu definieren, wenn die Simulation läuft. Ist das möglich?

Ich verwende Modelsim. Vielen Dank.


EDIT: Die akzeptierte Antwort ausreichend ist. Aber ich werde diese Information auch für jeden hinzufügen, der hier stolpert.

Der Wert eines Parameters kann mithilfe von -g<parameter> oder -G<parameter> Argument auf vsim festgelegt/überschrieben werden. -g setzt den Parameterwert nur, wenn er nicht bereits festgelegt wurde, und -G legt den Wert fest, auch wenn er definiert ist. Ich fand das praktisch, wenn ich die Länge der Simulation mit Parametern kontrolliere. Neukompilierung ist nicht notwendig.

vsim -c work.top -gSIM_END_TIME // Sets value in all scope 
vsim -c work.top -g/top/dut/SIM_END_TIME // Sets value only in the defined scope 

Antwort

3

Sie können eine Makrodefinition außer Kraft setzen mit der Vlog Befehlszeilenoption + definieren + < macro_name> [= < macro_text>]

Die bessere Option ist, um das Makro zu verlassen nicht definiert und verwenden Sie die `ifdef-Anweisung, um zu testen, ob Sie es in der Befehlszeile definiert haben.

Beachten Sie, dass Sie bei der Verwendung eines Makros Ihren Quellcode jedes Mal neu kompilieren müssen, wenn Sie den Makrowert ändern möchten. Verilog bietet $test$plusargs und $value$plusargs, um Befehlszeilenoptionen zur Laufzeit zu testen, so dass Sie nicht neu kompilieren müssen.