Xilinx ISE-Sprachvorlage für Zustandsmaschinen

Wenn Sie in Xilinx ISE die Beispiele für Zustandsmaschinen überprüfen, die in "Sprachvorlage" (VHDL->Synthesekonstrukte->Codierungsbeispiele->Zustandsmaschinen und Verilog->Synthesekonstrukte->Codierungsbeispiele->Zustandsmaschinen) angegeben sind, würden Sie Beachten Sie, dass die Beispiele für VHDL im "Zwei-Prozess"-Stil bereitgestellt werden, der die Dekodierungslogik (oder Steuerung) des nächsten Zustands vom Zustandsspeicherprozess trennt (dies ist der Stil, den ich praktiziere, und ich weiß, dass viele Fachleute diesen Stil nachdrücklich befürworten). Verilog-Beispiele sind jedoch nur ein großer „Immer“-Block.

Ich bin nur neugierig, warum Verilog-Zustandsmaschinenvorlagen unterschiedlich bereitgestellt werden. Hat jemand einen Einblick in diesen Unterschied?

Danke!

Ich verwende den Einzelprozessstil in VHDL. Es ist einfacher, kürzer, leichter richtig zu machen und wird von den meisten Fachleuten verwendet, die ich kenne. Aber nicht in vielen Lehrbüchern gelehrt. Einige Akademiker scheinen eine negative Meinung darüber zu haben, aber ich habe nie einen wesentlichen Grund dafür gesehen.
@BrianDrummond: Danke für deinen Kommentar. Ich habe nicht wirklich darüber gestritten, welche Methode am besten und praktischsten ist, und ich habe auch keine starken Einwände dagegen. Ich denke, jeder sollte der Methode folgen, die für ihn am besten funktioniert.

Antworten (1)

Ich denke, es hat damit zu tun, wer das Beispiel geschrieben hat und wann das Beispiel ursprünglich geschrieben wurde. Sowohl Einzel- als auch Zwei-Immer-Blöcke funktionieren. Für Unterschiede in den Verilog-Codierungsstilen empfehle ich die Lektüre dieses Artikels von Cliff Cummings. Das Papier ist jetzt etwas veraltet, aber die Punkte sind immer noch gültig. Experimentieren Sie mit Ihrem eigenen Synthesizer. Ich verwende immer die beiden alwaysBlöcke (ein Kombi-Decoder, eine sequentielle Zuordnung), wie in der Arbeit empfohlen. Es bringt mir den besten Bereich, das beste Timing und ist umweltfreundlich mit meinem Werkzeugsatz.

Der ursprüngliche IEEE Std 1364-1995 erforderte immer kombinatorische Blöcke, um jedes Signal in der Empfindlichkeitsliste explizit anzugeben. Wenn Sie ein Signal verpassen, gibt der Synthesizer immer noch das richtige Ergebnis aus, aber es entspricht möglicherweise nicht dem Verhalten von RTL in der Simulation. Für eine Zustandsmaschinenmaschine mit vielen Eingaben war die Verwaltung der Empfindlichkeitsliste mühsam. Viele Designer entschieden sich für den Ansatz mit einem einzigen immer blockierenden plus zuweisenden Statements, um das Risiko eines Fehlers bei der Verwaltung der Sensitivitätsliste zu vermeiden. Ein paar benutzten (oder schrieben eigene) Skripte, um es für sie zu verwalten; Beispiel das Emacs-Skript Verilog-Mode .

In IEEE Std 1364-2001 wurde der Standard @*als automatische Empfindlichkeitsliste eingeführt. Es dauerte jedoch einige Jahre, bis es von verschiedenen Simulatoren, Synthesizern und anderen Verilog-Tools allgemein unterstützt wurde. Die Beispiele in Ihrer Xilinx ISE wurden wahrscheinlich geschrieben, bevor @*sie von Xilinx unterstützt wurden, und niemand hat seitdem eine Update-Überarbeitung der Beispiele durchgeführt.