Forum: FPGA, VHDL & Co. Design von Statmachines


von Philip K. (plip)


Lesenswert?

Servus,

ich benutze wenn ein Ablauf etwas komplizierter wird gerne 
Statemachines. Allerdings baue ich sie mangels Erfahrung jedesmal anders 
auf, mal ist das Ergebnis mehr, mal weniger gut. Jetzt habe ich in einem 
Modul meines Profs, das ich verwende gesehen, dass er das ziemlich 
anders gemacht hat als das was ich so fabriziere. Z.B. hat er seine 
Anweisungen nach Mealy- und Moore-Ausgängen getrennt und verwendet kein 
Enum für den State, wie ich es immer mache.

Deshalb frage ich mich, ob es grundsätzliche Regeln und Empfehlungen für 
das Design von SMs in VHDL gibt. Vielleicht hat ja auch jemand nen Link 
parat...

Gruß Philip

von Falk B. (falk)


Lesenswert?

@ Philip Kirchhoff (plip)

>anders gemacht hat als das was ich so fabriziere. Z.B. hat er seine
>Anweisungen nach Mealy- und Moore-Ausgängen getrennt und verwendet kein
>Enum für den State, wie ich es immer mache.

Schlecht. States sollte man immer mit Enums anlegen. Wegen der 
Lesbarkeit, Portierbarkeit und der Möglichkeit, per Syntheseoption 
verschiedene Kodierungen für die States zu wählen.

>Deshalb frage ich mich, ob es grundsätzliche Regeln und Empfehlungen für
>das Design von SMs in VHDL gibt.

Gibt es.

- Saubere Formatierung
- Enums verwenden
- ich bevorzuge alles in einen getakteten Prozess zu schreiben, ist 
kompakter
- etc.

> Vielleicht hat ja auch jemand nen Link
>parat...

Leider nein.

MFG
Falk

von Thomas H. (mac4ever)


Lesenswert?


von Philip K. (plip)


Lesenswert?

Ich suche oft Fehler, die dadurch entstehen, dass ich irgendwelche 
Übergangsbedingungen vergesse zu setzen oder rückzusetzen etc...
Aber das ist wohl eher ein Problem der Systematik, also anstatt 
draufloszuhacken erstmal nen Zustandsgraphen mit Übergangsbedingungen 
zeichnen...oder noch besser erstmal überlegen was für Zustände und 
Übergänge es überhaupt gibt.:-)

Ich hab irgendwo mal gelesen, dass es unterschiedliche Formen gibt, wie 
ein Synthesetool SMs umsetzt. Bei mir steht z.B. immer was von "one 
hot".

von Philip K. (plip)


Lesenswert?

@Thomas

Super - danke!

von Jan M. (mueschel)


Lesenswert?

>>anders gemacht hat als das was ich so fabriziere. Z.B. hat er seine
>>Anweisungen nach Mealy- und Moore-Ausgängen getrennt und verwendet kein
>>Enum für den State, wie ich es immer mache.

>Schlecht. States sollte man immer mit Enums anlegen. Wegen der
>Lesbarkeit, Portierbarkeit und der Möglichkeit, per Syntheseoption
>verschiedene Kodierungen für die States zu wählen.


Es ist besser lesbar, enums zu verwenden - die Tools, die ich kenne, 
optimieren und rekodieren jedoch auch state machines, bei denen die 
Zustaende explizit angegeben sind.

von Falk B. (falk)


Lesenswert?

@ Jan M. (mueschel)

>Es ist besser lesbar, enums zu verwenden - die Tools, die ich kenne,
>optimieren und rekodieren jedoch auch state machines, bei denen die
>Zustaende explizit angegeben sind.

Das wäre dann allerdings ein unzulässiger Eigensinn, den man den Tools 
schnellstens abgewöhnen sollte. GGf. per Konfiguration etc.

MfG
Falk

von savoo (Gast)


Lesenswert?

es gibt auch HDL-Designer, mit welchen man FSM generieren kann.

von Karl (Gast)


Lesenswert?

Mein Prof meinte dazu folgendes:

1 Prozess für den Zustandsspeicher und 1 oder 2 kombinatorische Prozesse 
für eingangs und Ausgangslogik die vom aktuellen Zustand abhängen. 
Generell sollte man Mealy Automaten meiden, so es denn geht.

von Falk B. (falk)


Lesenswert?

@ Karl (Gast)

>1 Prozess für den Zustandsspeicher und 1 oder 2 kombinatorische Prozesse
>für eingangs und Ausgangslogik die vom aktuellen Zustand abhängen.

Warum einen extra Prozess für den Zustandspeicher? Das kann man 
problemlos mit der Statelogik verknüpfen. Ist kein bisschen 
unübersichtlicher und hat keinerlei Leistungsnachteile.

>Generell sollte man Mealy Automaten meiden, so es denn geht.

Hmmm.

MfG
Falk

von Karl (Gast)


Lesenswert?

>Warum einen extra Prozess für den Zustandspeicher? Das kann man
>problemlos mit der Statelogik verknüpfen. Ist kein bisschen
>unübersichtlicher und hat keinerlei Leistungsnachteile.

Dass dabei das selbe Syntheseergebnis herauskommt, ist klar. Über die 
(Un)Übersichtlichkeit mag man diskutieren. Der Speicherprozess hat eben 
nur den Takt und evtl. einen reset in der sensitivity list und ist damit 
klar als Speicher erkennbar. Der Logikprozess hat nur den Zustand in der 
sensitivity und ist damit klar als reine Logik zu identifizieren. Gerade 
am Anfang ist diese Trennung IMO sinnvoll, weil man gezwungen wird, sich 
das ganze als Hardware vorzustellen.

>Hmmm.

Die können durchaus mal nen Fallstrick bereithalten, z.B. langsam sein 
oder mit nicht einsynchronisierten Signalen problematisch. Wenn du dazu 
ne andere Meinung hast, würde ich die natürlich gern lesen.

von Thomas H. (mac4ever)


Lesenswert?

Da hätte ich auch noch was beizusteuern, da ich letztens ein bösartiges 
Problem hatte.

Meine State-Machine war wie in den von mir genannten Links modelliert. 
Die Simulation war absolut korrekt. Kaum hatte ich das Ganze 
runtergerechnet und auf den FPGA gepackt, ging die FSM ... naja, sagen 
wir: wie sie wollte ;) Ganz sporadisch setzte sie aus und irgendwann 
lief sie dann wieder ( wenigstens bis zum nächsten Hacker ).

Lösung: Alle Signale, auf welche die FSM reagieren sollte, mussten im 
selben Prozess gepuffert werden. Erst danach funktionierte die FSM 
einwandfrei. Ich denke mal, dass Karl mit "einsynchronisierten Signalen" 
genau das meinte.

Ach ja, den Reset sollte man sicherheitshalber auch synchron machen und 
nicht wie in den Beispielen asynchron.

von Falk B. (falk)


Lesenswert?

@ Karl (Gast)

>Dass dabei das selbe Syntheseergebnis herauskommt, ist klar.

So klar ist das gar nicht. Es gibt einige (ältere) Texte im Netz, wo 
behauptet/spekuliert wird, dass getrennte Prozesse dem Synthesizer mehr 
Freiheiten lassen würden, und somit bessere Performance erzielt wird. 
Glaub ich aber nicht.

>sensitivity und ist damit klar als reine Logik zu identifizieren. Gerade
>am Anfang ist diese Trennung IMO sinnvoll, weil man gezwungen wird, sich
>das ganze als Hardware vorzustellen.

???
Wieso bewirkt dir Trennung eine schärfere Hardwaredenkweise.

>Die können durchaus mal nen Fallstrick bereithalten, z.B. langsam sein

OK. Das spuckt aber der Timinganalyser aus.

>oder mit nicht einsynchronisierten Signalen problematisch.

Hat mit Mealy nichts zu tun.

>Wenn du dazu
>ne andere Meinung hast, würde ich die natürlich gern lesen.

Naja, bisher hab ich das nicht soooo strickt gesehen, und mir fällt 
spontan auch kein wirkliches gewichtiges Argument gegen Mealy ein.

MFG
Falk

von Falk B. (falk)


Lesenswert?

@ Thomas Hertwig (mac4ever)

>Lösung: Alle Signale, auf welche die FSM reagieren sollte, mussten im
>selben Prozess gepuffert werden. Erst danach funktionierte die FSM
>einwandfrei. Ich denke mal, dass Karl mit "einsynchronisierten Signalen"
>genau das meinte.

Ja, aber das kann ein beliebiger Prozess sein. Klar, er muss mit dem 
gleichen Takt wie die FSM arbeiten ;-)

>Ach ja, den Reset sollte man sicherheitshalber auch synchron machen und
>nicht wie in den Beispielen asynchron.

Das ist nix neues. Die asynchronen Resets sind akademische Altlasten.

MFG
Falk

von Thomas H. (mac4ever)


Lesenswert?

@falk

Ich weiß, aber da es gerade allgemein um das Design von FSMs geht, 
können wir ja mal alles zusammentragen auf was man achten sollte. In den 
Dokumenten von Actel und Xilinx werden diese Fakten nämlich auch nicht 
berücksichtigt.

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.