Zustandsmaschinen sind ein Muster, das sehr häufig beim Schreiben von synchronen Designs verwendet wird. Sie dienen als Controller im Design. Gibt es also eine Standardmethode, um sie zu überprüfen, ob sie mit VHDL oder Verilog/SystemVerilog geschrieben wurden? Oder ist es besser, sie mit einer GUI zu zeichnen und dann stattdessen Code aus der GUI zu generieren?
Standardmäßig meine ich ein Codemuster, das verwendet wird, um sie zu verifizieren. Es gibt immer verschiedene Möglichkeiten, die Katze zu „häuten“, aber vielleicht gibt es eine Methode, die sehr beliebt ist.
Die Sache ist, dass Zustandsmaschinen ziemlich groß sein können und man Code schreiben müsste, um jeden Zweig in der Zustandsmaschine zu verifizieren, was zu viel Code in der Testbench führt.
Bearbeiten: Ich überprüfe nur den fsm selbst, um zu überprüfen, ob er mit dem fsm-Zustandsdiagramm übereinstimmt und keine Fehler in der RTL-Codierung vorhanden sind.
Die Verifizierung ist ein großer Teil des Designprozesses; Bei einem komplexen Design ist es nicht ungewöhnlich, dass Sie genauso viel Zeit oder sogar mehr Zeit für die Überprüfung aufwenden als für das eigentliche Design. In Anbetracht dessen ist eine Frage, bei der es sich im Wesentlichen um die Frage „Wie verifiziert man komplexe Konstruktionen“ handelt, ziemlich weit gefasst.
Wenn das Design eine große Anzahl von Szenarien bewältigt, was durch sehr viele Zustände in Ihrem Zustandsautomaten angezeigt wird, wäre es ein guter Ausgangspunkt für die Testsuite, separate Tests zu haben, die das Design stimulieren, um alle zu replizieren diese Szenarien. Sie können dann Codeabdeckungstools verwenden, um zu sehen, welche Zustandsübergänge abgedeckt wurden, und neue Tests hinzufügen, bis alles abgedeckt ist. configuration
Mit dem Konstrukt in VHDL können Sie verschiedene Testfälle verwalten
Es kann häufig der Fall sein, dass es Szenarien gibt, die Variationen eines Themas sind, z. B. das Empfangen eines Pakets irgendeiner Art, aber mit unterschiedlichen Paketlängen, Längen, die außerhalb der Grenzen liegen usw. In diesen Fällen können Sie Tests schreiben, die generieren eine Anzahl von Paketen mit zufälliger Länge; Sie müssten dann sicherstellen, dass alle Ihre Grenzfälle erfüllt sind, zum Beispiel die Mindest- und Höchstlängen, das Minimum plus eins, das Maximum minus eins usw., und dass Ihr Design in jedem Fall das Richtige tut. Möglicherweise müssen Sie auch Kombinationen von Eingaben für das Design testen, und diese Kombinationen könnten wiederum durch einen Testfall generiert werden, anstatt sie einzeln manuell zu schreiben.
Es gibt eine Reihe von Methoden, die versuchen, den Prozess der Generierung von Stimuli und der Aufzeichnung der Ergebnisse zu steuern. Ich verwende OSVVM , das ich vor ein paar Jahren durch einen Kurs kennengelernt habe. Ich mag es, weil es die gleiche VHDL-Sprache verwendet, die ich gewohnt bin, zusammen mit ein wenig TCL-Skripting, und keine "Extras" benötigt, um mit meinem Simulator zu arbeiten. Es gibt viele Alternativen, die ich hier nicht aufzulisten versuche, aber eine schnelle Google-Suche nach „FPGA-Verifizierung“ bringt eine Menge Ressourcen hervor.
Ich empfehle die Verwendung formaler Verifizierungstechniken.
Schreiben Sie 2 Behauptungen:
Manchmal können Sie eine einzelne Assertion schreiben, um die gesamte FSM-Funktionalität zu überprüfen, wie ich es hier getan habe: https://electronics.stackexchange.com/a/505842/238188
Zeichnen Sie kleinere FSMs in eine GUI und generieren Sie HDL-Code oder generieren Sie das Zustandsübergangsdiagramm aus dem HDL-Code und untersuchen Sie das Diagramm.
Mir sind 2 Lösungen für diese 2 Fälle bekannt:
David Tweed
quanten231
quanten231
Shashank-VM
Shashank-VM
Shashank-VM
Shashank-VM
quanten231