Forum: FPGA, VHDL & Co. Synchrones vs. asynchrones output encoding bei FSMs


von Marius S. (lupin) Benutzerseite


Lesenswert?

Ich habe mir zunächst eine synchron beschriebene FSM gebaut, in der ich 
zur Berechnung der Ausgänge innerhalb der FSM eine Menge von Muxern, 
Addierern und Registern beschrieben habe, welche ja nun in Abhängigkeit 
des FSM-Zustandes angesprochen werden müssen (bzw. die Daten in 
Ausgangsregister laden).

Mir wurde jetzt gesagt, dass man bei FSMs versuchen sollte den Datenpfad 
von der FSM zu trennen und die FSM über Steuersignale mit dem Rest der 
Hardware kommunizieren soll (Load/Reset/Enable Signale) und wieder rum 
nur ein paar Steuersignale zurück bekommen soll.

Ist das soweit richtig oder ist es gängige Praxis auch komplexere 
Strukturen einfach mit in der FSM zu beschreiben?

Jetzt besteht meine FSM halt nur noch aus diesen Steuersignalen...

In vielen klassischen FSM Beschreibungen wird der Folgezustand über 
einen kombinatorischen Prozess aus den Eingängen der FSM ermittelt und 
synchron übernommen.
Ich habe jetzt aber auch Beschreibungen für FSMs gesehen, welche 
ebenfalls die Ausgänge kombinatorisch ermitteln und asynchron ausgeben. 
Also ohne Registrierung der Ausgänge beim Zustandsübergang.

Angenommen es kommt zu keinen kombinatorischen Schleifen, wäre es dann 
nicht zulässig die Ausgänge asynchron zu belassen? Wäre es nicht sogar 
sinnvoll, wenn alle Ausgänge der FSM wieder durch synchrone Logik 
verarbeitet werden? Dann kann es ja nicht zu kombinatorischen Schleifen 
kommen, man spart sich die Register und man spart sich die 
Verarbeitungsverzögerung von einem Takt.

Und wenn die Eingänge ebenfalls nur von synchronen Prozessen kommen, 
dann spart man sich bei der Verarbeitung in der FSM wieder die 
Verzögerung (wenn man auch den folgezustand in einem synchronen Prozess 
erzeugt, wie bei der 1-Prozess FSM).

Natürlich kann man das mit den Verzögerungen durch entsprechende 
Beschreibung der FSM in den Griff bekommen, aber mich verwirrt das 
ehrlich gesagt immer wieder wenn ich in einem Zustand ein Signal setze 
um im übernächsten Zustand ein Ergebnis zurück zu bekommen ;-)

Also - sind asynchrone FSMs zulässig/sinnvoll oder Teufelswerk?

von Marius S. (lupin) Benutzerseite


Lesenswert?

Gibt es eigentlich eine gute Übersicht aller FSM 
Beschreibungsmöglichkeiten mit Pro und Contra?

von Schlumpf (Gast)


Lesenswert?

Solange die Eingänge einer FSM synchron sind, und die Ausgänge in der 
nachfolgenden Logik wieder synchronisiert werden, benötigst du keine 
Register an den FSM-Ausgängen..
Du denkst jetzt vermutlich in Components und daran, dass der Ausgang 
einer Component ja synchronisiert sein sollte, aber im FPGA gibt es ja 
die Grenze zwischen den Components nicht mehr so, wie du sie einteilst. 
Ob das Register dann am Ausgang der einen Component ist oder am Eingang 
der darauffolgenden, ist egal. Der Pfad hat ein Register und damit ist 
gut ;-)
Genaugenommen benötigst du auch kein Eingangsregister in der 
nachfolgenden Logik. Solange die "internen" Register dort mit dem 
gleichen Takt wie die FSM arbeiten, bist du immer noch "sauber 
synchron"..

von Schlumpf (Gast)


Lesenswert?

Nachtrag:

Das was du vielleicht gemeint hast, gilt, wenn die Ausgänge der FSM 
komplett asynchron weiterverarbeitet werden.
Die rein kombinatorischen Ausgänge einer FSM können glitchen. Und wenn 
die nachfolgende Logik damit nicht klarkommt, dann sollte man die 
Ausänge nochmal registern..

von Marius S. (lupin) Benutzerseite


Lesenswert?

Ja, ich denke da wirklich auf "Component-Ebene". Meine mal gelesen zu 
haben, dass alle Ein und Ausgänge eines Entities/Component registriert 
sein sollten. Das macht sicherlich in Bezug auf Code-Reuseability Sinn, 
aber innerhalb eines abgeschlossenen Moduls kann ich ja schon machen was 
ich will denke ich :-)

Die Satemachine ist ja speziell für ein größeres Modul geschaffen und 
kann nicht woanders verwendet werden.

Im Grunde ist es doch egal wo registriert wird, entweder die Ausgänge 
registrieren und an eine Kombinatorik geben welche ein Eingangssignal 
erzeugt. Oder die Ausgänge nicht registrieren und dafür den ansonsten 
rein kombinatorischen Eingang, welcher dadurch erzeugt wird. Irgendwo 
zwischen Aus- und Eingang sollte halt ein Register sitzen. Mehrere 
Register nur um die Kombinatorik-Tiefe zu verringern oder gewollte 
Verzögerungen zu erreichen. Ist das so richtig oder habe ich Recht? :-)

von Schlumpf (Gast)


Lesenswert?

Korrekt ;-)

Man muss immer nur neu synchronisieren, wenn man einen Übergang von 
einem Taktnetz in ein anderes hat (Betrachten wir alles asynchrone 
extren des FPGAs auch als Taktnetz).

von Marius S. (lupin) Benutzerseite


Lesenswert?

Gibt es noch andere Ansichten? Vor allem eine Aussage zu datenpfad und 
FSM Trennung würde mich noch interessieren.

von dito (Gast)


Lesenswert?

Marius S. schrieb:
> Gibt es noch andere Ansichten? Vor allem eine Aussage zu datenpfad
> und
> FSM Trennung würde mich noch interessieren.

Klar, Datenpfad und FSM müssen schon getrennt sein. Es ist aber okay 
auch arithmetische Operationen in die FSM aufzunehmen. Ich mache das 
auch immer so und hatte bisher damit noch keine Probleme. Die solltest 
die Ausgänge der FSM dann schon registrieren. Die Eingänge deiner 
Komponenten müssen aber keine Register haben.

von pks (Gast)


Lesenswert?

Ich denke man sollte das alles nicht zu dogmatisch sehen. Eine FSM aus 
dem Lehrbuch sieht in der Praxis einfach sch... aus. Komplexere 
Kombinatorik (mir ist bei Dir übrigens nicht ganz klar, ob Du nicht die 
Begriffe kombinatorisch und asynchron durcheinanderwürfelst...das ist 
sehr beliebt :-)) würde ich auch auslagern, aber übertreiben muss man 
das auch nicht. Eine FSM sollte vor allem gut lesbar sein.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

dito schrieb:
> Die solltest die Ausgänge der FSM dann schon registrieren.
Die Zustandsspeicher der FSM selber sind schon Register. Das reicht (den 
Timingconstraints sei Dank) aus, solange die Taktdomäne nicht verlassen 
wird...

von dito (Gast)


Lesenswert?

Lothar Miller schrieb:
> Die Zustandsspeicher der FSM selber sind schon Register.

Aber wenn ich am Ausgang noch komb. Logik habe, "hängt die doch in der 
Luft"? Und Ausgänge sollte man doch immer registrieren, damit da kein 
kritischer Pfad entstehen kann...

von Schlumpf (Gast)


Lesenswert?

dito schrieb:
> Aber wenn ich am Ausgang noch komb. Logik habe, "hängt die doch in der
> Luft"?

Wieso sollten sie das?
Die Ausgänge sind eine logische Verknüpfung aus den Zustandsregistern 
und den (synchronen) Eingängen.
Wenn diese Information wieder in Registern weiterverarbeitet werden, die 
in der gleichen Taktdomäne sind, hast du einen kombinatorischen Pfad 
zwischen zwei Registern, der constrained ist.

dito schrieb:
> Und Ausgänge sollte man doch immer registrieren, damit da kein
> kritischer Pfad entstehen kann...

Ein Kritischer Pfad ist was anderes.
Es können Glitches entstehen.
Hier gilt aber das Gleiche, wie oben beschrieben.
ist die nachfolgende Schaltung synchron zur FSM haben die Glitches keine 
Auswirkung

von Marius S. (lupin) Benutzerseite


Lesenswert?

pks schrieb:
> mir ist bei Dir übrigens nicht ganz klar, ob Du nicht die
> Begriffe kombinatorisch und asynchron durcheinanderwürfelst...das ist
> sehr beliebt :-)

Kann gut sein, dass ich das durcheinanderwürfele. Was genau ist denn der 
Unterschied? Ich würde behaupten Kombinatorik ist eine Schaltungsart, 
welche immer asynchron ist aber asynchron ist nicht immer Kombinatorik 
(Asynchroner Takt/asynchrone Übertragung).

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Marius S. schrieb:
> Begriffe kombinatorisch und asynchron
> Was genau ist denn der Unterschied?
Diese Frage ist wie: was ist der Unterschied zwischen ausrechnen und 
pünktlich?
Richtig: die beiden haben erst mal nichts miteinander zu tun. Es sei 
denn, du musst etwas "pünktlich ausrechnen". Dann ist es nämlich ganz 
wichtig, dass du ausreichend schnell rechnest...

Kombinatorik ist einfach irgend eine Rechenvorschrift, die in der 
Digitaltechnik üblicherweise mit Gattern und Tabellen erledigt wird. Und 
sobald ein Speicherglied (das üblicherweise getaktet wird) involviert 
ist, kommt das Thema Synchronität (Gleichzeitigkeit, Rechtzeitigkeit) in 
den Fokus.

Das ist das Grundprinzip jedes synchronen Designs: nach einer Taktflanke 
herrscht im FPGA große Unruhe. Neue Zählerstände werden berechnet, Logik 
ermittelt aktuelle Werte und die Folgezustände von FSM werden berechnet 
(auch bei der 1-Prozess-FSM ist das so!). Und rechtzeitig vor der 
nächsten Taktflanke müssen die Werte wieder stabil sein. Denn dann kommt 
wieder der Takt und das Spiel geht von vorne los.

Asynchron dazu sind üblicherweise Signale von der Aussenwelt: ein 
Tastendruck oder ein Interrupt kommt sicher nicht auf die ns genau zur 
gewünschten Zeit.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.