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