Hier mein Script was ich benutze um den Testbench zu starten. (da mir die Gui zu langsamer über SSH ist und gerade wackeligen eduroam WLAN-Netz) Ihr müsst nur die Variablen an euer Projekt anpassen. Vor dem Ausführen sollte man auf jeden Fall 1 Mal Verilog-NC gestartet haben, sodass das Testbenchverzeichnis erzeugt wird.
Mein Setup ist folgendes:
-
über rsync aktualisiere ich die Verilog-Dateien (sshfs tut es eventuell auch).
-
dann starte ich über ssh mein Skript (eeets2 habe ich den Server in meiner ssh config genannt):
$ ssh eeets2 <PROJECT_ROOT>/df2/run-testbench.sh
-
ich lasse im Testbench ein Dumpfile erzeugen, welche es nach der Simulation herunter laden lasse.
-
danach lädt sich gtkwave den Dump und zeigt ihn an.
Noch ein paar Dinge zum Benchmark:
Um zu verhindern, das die Simulation ewig läuft und das Dumpfile immer größer wird, habe ich eine zeitliche Begrenzung eingebaut:
for (i = 0; i < 1000; i = i + 1) begin
if (ready != 0) begin
$display("%c[32mSUCCESS: tests bench finished;%c[0m", 27, 27);
$finish;
end
#(CYCLE) ;
end
$display("%c[31mFAILED: tests timeout!%c[0m", 27, 27);
$finish(1);
Mit folgenden Marko kann man Unit-Test ähnlich Bedingungen während der Simulation überprüfen:
`define ASSERT(c, msg) if (!c) begin $display("%c[31mAssertion Failed: %s%c[0m", 27, msg, 27); $finish(2); end
// Beispiel
`ASSERT(state == `IDLE, "state != IDLE")