7 Stimmen

Gibt es so etwas wie __LINE__ in Verilog?

Ich bin neu in Verilog, war aber jahrelang C-Programmierer, was mich gefährlich macht.

Ich mache etwas Verilog für eine Klasse. Ich würde gerne die C assert() -Stil-Tests in meinem Simulationscode verwenden. https://en.wikipedia.org/wiki/Assert.h

Wir verwenden kein System Verilog, daher gibt es keinen Standard-Assert, den ich finden konnte. Ich habe das folgende Makro zusammengestellt.

`define ASSERT_EQUALS(x,y) \
    repeat(1)\
    begin\
        if( (x) != (y) ) \
        begin\
            $write( "assert failed %d != %d\n", (x), (y) );\
            $finish;\
        end\
    end 

    // Prüfe den assert (soll fehlschlagen)
    `ASSERT_EQUALS(t_data_in,16'hfffe)

Soweit ich sehen kann, gibt es keine Möglichkeit, eine Zeilennummer zu erhalten. Wenn die Behauptung also scheitert, erhalte ich nur eine Nachricht, ohne zurückverfolgen zu können, wo der Fehler aufgetreten ist.

assert failed 65535 != 65534

Gibt es einen Weg, um die aktuelle Zeilennummer zu erhalten? Oder gibt es einen besseren Weg, um einen Assertions-Test in Verilog durchzuführen?

Vielen Dank!

11voto

Hackonteur Punkte 801

SystemVerilog 2009 bietet Compilerdirektiven. Mit Bezug auf die Spezifikation IEEE Std 1800-2009, Abschnitt 22.13:

`__FILE__ erweitert sich zum Namen der aktuellen Eingabedatei, in Form eines Zeichenketten-Literals. Dies ist der Pfad, mit dem ein Tool die Datei geöffnet hat, nicht der kurze Name, der in `include angegeben ist oder als Argument des Eingabedateinamens eines Tools. Das Format dieses Pfadnamens kann von der Implementierung abhängig sein.

`__LINE__ erweitert sich zur aktuellen Eingabezeilennummer, in Form einer einfachen Dezimalzahl.

Zum Beispiel:
$display("Interner Fehler: Nullzeiger bei %s, Zeile %d.", `__FILE__, `__LINE__);

Bitte beachten Sie die vollständige Spezifikation für weitere Details.

4voto

Wenn es sich um einen Prozedurkontext handelt, können Sie $finish(1); verwenden, das den Standort ausgeben sollte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X