2014-10-28 20 views
7

Es scheint, als gäbe es einige Diskussionen darüber, wie endliche Automaten (FSMs) in VHDL zu codieren sind. Die Leute sprechen über 1-Prozess-, 2-Prozess- oder 3-Prozess-FSMs, als ob jeder genau wüsste, was es bedeutet und was jeder Prozess macht. Ich konnte jedoch keine genaue Definition finden, und die vorhandenen Beispiele scheinen widersprüchlich zu sein.Was bedeutet 1-, 2- oder 3-Prozess für eine FSM in VHDL?

Dies ist eine objektive Frage: Was ist der Unterschied in Bezug auf Code für jeden FSM-Stil (1-Prozess, 2-Prozess, 3-Prozess)? Ich verstehe, dass es eine Komponente der persönlichen Präferenz gibt, aber sicherlich ist es möglich, die Frage objektiv zu beantworten und die Vorteile jedes Ansatzes aufzuzählen.

Danke,

+2

Das XST PDF von Xilinx zeigt Beispiele von 1,2 und 3 Prozess-FSMs (seltsamerweise nur eine von zwei Varianten des 2-Prozesses). Es ist zum Teil ein Mealy-Moore-Problem und zum großen Teil persönliche Vorliebe oder Auswendiglernen. Diejenigen mit einer analytischen Neigung könnten auf die Implikationen der in Sensitivitätslisten vorhandenen Elemente achten. – user1155120

+0

@DavidKoontz Was wäre die 2. Variante der 2-Prozess-FSM? Ein Prozess für das Staatsregister und ein Prozess für alles andere? – rick

+0

Das XST pdf ist eine nette Referenz, danke. @DavidKoontz –

Antwort

1

Ich versuche auch zu beantworten, wenn es denn jeder Mensch Code schwer ist, wie er und in Abhängigkeit von der Bedingung mag, wo die Hardware (Frequenz, externe Pfade, ...) arbeiten muss.

In einer Zustandsmaschine haben Sie einige Elemente:

  • die Eingänge
  • die Ausgänge
  • den aktuellen Stand
  • der nächste Zustand

Der nächste Zustand von aktuellen Zustand abhängig und Eingaben. Um keine kombinatorischen Schleifen zu haben, müssen Sie den nächsten Zustand des Ereignisses eines Taktsignals abtasten, so dass es zum aktuellen Zustand wird. Sie benötigen also einen VHDL-Prozess, um das Flip-Flop für den Zustand zu erstellen. In diesem Prozess können Sie alle Logik setzen, die Sie benötigen, um den nächsten Zustand zu berechnen. Wenn Ihre Ausgaben nur vom Status abhängen, benötigen Sie keine anderen Prozesse.

Ich mag es nicht, in den gleichen Prozess kombinatorische Logik zu setzen, wenn die Logik nicht sehr einfach ist (Ich mag es, aber es ist nicht obligatorisch!), So normalerweise spalte ich die FSM in zwei Prozess: eine erste sehr einfach Prozess, der den nächsten Zustand abtastet, um den aktuellen Zustand zu haben, und einen kombinatorischen Prozess, bei dem ich alle Ausgänge und den nächsten Zustand als Funktion der Eingänge und des aktuellen Zustands berechne.

In den gleichen Fällen müssen die Ausgänge abgetastet werden: Zum Beispiel müssen Sie bei Frequenzproblemen die internen Pfade von externen trennen oder wenn die Ausgänge eine große Last haben. In diesem Fall können Sie alle erforderlichen Flip-Flops im ersten Prozess hinzufügen, in dem Sie den nächsten Status abfragen oder einen oder mehrere dedizierte Prozesse erstellen.

Aber Sie können auch viele Varianten als Anzahl von Prozess haben: Ich arbeitete in einem Code, wo jedes Signal in einem dedizierten Prozess berechnet wird, so dass die resultierende Zustandsmaschine 20/30 Prozess hatte.