Assert-Anweisung in Verilog
Ich bin komplett neu in Verilog, so mit mir tragen.
Ich mich Fragen, ob es eine assert-Anweisung in Verilog. In meiner testbench, ich möchte in der Lage sein, zu behaupten, dass die Ausgänge der Module sind gleich bestimmten Werten.
Beispielsweise
mymodule m(in, out);
assert(out == 1'b1);
Googeln gab mir einen paar links, aber Sie waren entweder zu Komplex oder nicht zu sein scheinen, was ich wollte.
Warum wurde der SV-tag Hinzugefügt?
toolic getaggt, ich weiß nicht, warum. Ich habe es entfernt.
Weil ich fügte hinzu, ein SV zu Beantworten. Weil die OP sollte bewusst gemacht werden, dass Verilog und SystemVerilog sind die gleiche Sprache, nach dem IEEE. Da StackOverflow ist ein Ort, um neue Dinge zu lernen.
Könnten Sie das bitte nicht tun?
Nicht den Menschen zeigen Alternative Wege, etwas zu tun?
toolic getaggt, ich weiß nicht, warum. Ich habe es entfernt.
Weil ich fügte hinzu, ein SV zu Beantworten. Weil die OP sollte bewusst gemacht werden, dass Verilog und SystemVerilog sind die gleiche Sprache, nach dem IEEE. Da StackOverflow ist ein Ort, um neue Dinge zu lernen.
Könnten Sie das bitte nicht tun?
Nicht den Menschen zeigen Alternative Wege, etwas zu tun?
InformationsquelleAutor gsingh2011 | 2012-12-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist ein open-source-Bibliothek für die Behauptungen genannt OVL. Es ist jedoch ziemlich schwer. Ein trick, den ich geklaut von dort aus ist das erstellen eines Moduls zu tun Behauptungen.
Nun, jedes mal, wenn Sie überprüfen möchten, ein signal, alle Sie tun müssen ist, zu instanziieren, eine Behauptung, die in Ihrem Modul, wie dieses:
Wenn die assertion fehlschlägt, erhalten Sie eine Nachricht wie diese:
%M in der display-Anweisung zeigt die gesamte Hierarchie auf die problematische Behauptung, die ist praktisch, wenn Sie haben eine Menge von diesen in einem größeren Projekt.
Kann man sich Fragen, warum ich überprüfen, auf dem Rand der Uhr. Dies ist subtil, aber wichtig. Wenn some_signal und some_other_signal in den obigen Ausdruck zugewiesen wurden, in unterschiedliche, immer blockiert, ist es möglich, den Ausdruck falsch sein könnte für eine kurze Zeit, abhängig von der Reihenfolge, dass Ihre Verilog-simulator plant die Blöcke (obwohl die Logik völlig richtig ist). Dies würde Ihnen eine falsch-negative.
Die andere Sache zu beachten, oben ist, dass ich verwenden,!==, das bewirkt, dass die assertion fehl, wenn der test-Wert ist X oder Z. Wenn er das normal !=, könnte es stumm geben ein false-positive, in einigen Fällen.
InformationsquelleAutor JeffB
können Sie schreiben, wie diese
InformationsquelleAutor Aghasy Poghosyan
Wenn Ihr simulator unterstützt SystemVerilog-syntax, gibt es eine
assert
keyword-die tut, was Sie wollen.InformationsquelleAutor toolic
Setzen die oben zusammen mit einem makro funktioniert für mich:
Dann später in meiner test-Modul:
Als ein Beispiel-test-fail-Fall:
InformationsquelleAutor strawbot
Verilog unterstützt keine Behauptungen. Einige tools unterstützen bei der PSL, die stellen diese Behauptungen in den Kommentaren, aber dies ist nicht standard. Sie sollten überlegen, hierarchische Referenzen aus einer testbench statt sonst muss man jede Behauptung in einem Prozess, der sich chaotisch.
Die einfachste Art und Weise zu imitieren, C-ähnlichen Behauptungen ist wohl ein `definieren, da dies machen Sie global.
Um zu prüfen, Signale in einer nicht-prozeduralen Rahmen, wie dein Beispiel, müssen Sie ein anderes makro erstellt eine Bedingung, signal und löst dann ein test-event für das signal.
Generieren oben einen neuen Bereich erstellen für die variable test so mehrere Instanzen funktionieren sollte.
Einen besseren Weg in eine prozedurale werden könnte, um eine Aufgabe zu erstellen und in einer separaten Datei dann schließen, dass in jedem Modul-Deklaration.
Für nicht-prozeduralen Kontexten müssen Sie erstellen Sie ein Modul mit einem Prozess-und Instanz-Modul. Dies erfordert einen eindeutigen Namen für jede Instanz, es sei denn, Sie steckte es in einen block erzeugen.
InformationsquelleAutor