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?
Gibt es eigentlich eine gute Übersicht aller FSM Beschreibungsmöglichkeiten mit Pro und Contra?
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"..
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..
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? :-)
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).
Gibt es noch andere Ansichten? Vor allem eine Aussage zu datenpfad und FSM Trennung würde mich noch interessieren.
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.
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.
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...
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...
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
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).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.