Forum: FPGA, VHDL & Co. Zustandautomaten VHDL


von Jele D. (jele_d)


Angehängte Dateien:

Lesenswert?

ich habe die Frage 4.2 und 4.3 nicht ganz gut verstanden .
kann mir bitte jemand helfen.
bin dankbar

von Mcn (Gast)


Lesenswert?

Jele D. schrieb:
> ich habe die Frage 4.2


Zähl die richtigen Blasen und runde den logarithmus dualis auf die 
nächste höhere Ganzzahl auf.

von Blechbieger (Gast)


Lesenswert?

Mcn schrieb:
> logarithmus dualis

Entweder es ist eine Fangfrage und die Antwort ist 1 Register für den 
Zustand oder unsauber formuliert und nach Anzahl der Speicherstellen 
dieses einen Registers gemeint.

Aber auch dann gilt ld nur für Kodierungen als Zahl, bei One-Hot 
Kodierung z.B. werden mehr 5 oder 4 (optimiert) gebraucht. Ohne 
explizite oder implizite (nur eine Kodierung wurde gelehrt) Angabe der 
Kodierung ist der zweite Teil von 4.2 unlösbar.

von aeib (Gast)


Lesenswert?

Wenn die Kodierung nicht vorgegeben ist würde ich alle bekannten 
Codierungen als möglich ansehen und die mit dem geringsten 
Speicherverbrauch nehmen - den benötigt man mindestens.

Alles andere ist optional und verbessert die Robustheit/Performance etc.

von aeib (Gast)


Lesenswert?

zu 4.3)

Da kann man kaum Tipps geben ohne die Lösung zu verraten...

Geh das einfach mal Beispielhaft durch und überleg dir, in welchen 
Zuständen du wie lange bleiben kannst (z.B. in dem, der die "1" 
ausgibt).

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


Lesenswert?

Die Antwort auf 4.2 lautet "fünf Zustände, für deren Codierung 
mindestens 3 Register nötig sind"


Bei 4.3 sind wir nach dem Reset und der vorgegebenen Vektorfolge in S_3, 
der bedingungslos in S_4 mit Ausgangssignal 1 übergeht und dort so lange 
bleibt, bis der Eingangsvektor 10 wird.

von Mcn (Gast)


Lesenswert?

Blechbieger schrieb:
> Mcn schrieb:
>> logarithmus dualis
>
> Entweder es ist eine Fangfrage und die Antwort ist 1 Register für den
> Zustand oder unsauber formuliert und nach Anzahl der Speicherstellen
> dieses einen Registers gemeint.

Also es wird in der Aufgabe eindeutig auf einen Zusammenhang zwischen 
Anzahl der Zustände und anzahl der Register verwiesen. Und mit register 
ist im Bereich VHDL/FPGA schon ein einzelnes Register gemeint und nicht 
wie in der Software-Programmierung ein Element aus dem Registersatz des 
Prozessors: 
https://en.wikipedia.org/wiki/Hardware_register#Register_varieties

>  Angabe der
> Kodierung ist der zweite Teil von 4.2 unlösbar.

Nope, die Aufgabestellung ist so lösbar!
Das es abhängig von der Kodierung mehr als eine Lösungsvariante geben 
könnte sei dahin gestellt. Falls eine andere Kodierung als binär 
verwendet werden soll, muss auch eine passende Begründung für den 
mehraufwand gegeben werden.

von vancouver (Gast)


Lesenswert?

Die ganze Aufgabe ist extrem schlamping und missverständlich formuliert, 
der Aufgabensteller ist offenbar selbst ein Anfänger. Kein Wunder, dass 
hier Missverständnisse entstehen. Ich formuliere mal um:

4.1 Welche allgemeinen Arten von Zustandsautomaten unterscheidet man? 
Von welcher Art ist der oben beschriebene Zustandsautomat? Begründen Sie 
Ihre Antwort.

4.2 Wieviele Bits sind zur Zustandscodierung mindestens notwendig? 
Begründen Sie Ihre Antwort.

4.3 Wie lange (gezählt in Takten!) hat das Ausgangssignal den Zustand 
"1", nachdem die vorgegebene Vektorfolge durchlaufen wurde, wenn sich 
die Zustandsmaschine zuvor im Zustand S_0 befand?

4.4 Erstellen Sie ein VHDL-Modell des Zustandsautomaten ausgehend von 
der unten vorgegebenen Entity. Zur Vereinfachung können Sie die 
Modellierung der Zustände S_2 und S_3 weglassen.

von Achim S. (Gast)


Lesenswert?

Lothar M. schrieb:
> bedingungslos in S_4 mit Ausgangssignal 1 übergeht und dort so lange
> bleibt, bis der Eingangsvektor 10 wird.

nop. auch S4 "dauert" nur genau einen Takt. nur der Folgezustand hängt 
davon ab, ob die Eingänge auf 10 stehen oder nicht.

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


Lesenswert?

Achim S. schrieb:
> auch S4 "dauert" nur genau einen Takt. nur der Folgezustand hängt davon
> ab, ob die Eingänge auf 10 stehen oder nicht.
Stimmt, die 10 nach rechts habe ich übersehen... :-/

Davon ausgehend gibt es 2 Antworten:
"Prinzipiell" dauert keiner der Zustände der FSM irgendeine Zeit, weil 
die FSM nämlich "taktlos" ist (deshalb findet sich da als 
Weiterschaltbedingung nirgends ein Takt). Deshalb ist die theoretische 
Dauer von Ausgang=1 unendlich kurz.

Allerdings braucht die Umsetzung in reale Hardware so einen Takt. Und 
pro Takt kann die FSM einen Zustand weiterschalten. Hier müssen 2 
Zustände mit Ausgang=1 durchlaufen werden, was zu t = 2x1/fosc führt.

vancouver schrieb:
> der Aufgabensteller ist offenbar selbst ein Anfänger
Wenn nicht, dann wäre er ziemlich fies. Denn da geht es ja quasi um 
philosophische Betrachtungen.

: Bearbeitet durch Moderator
von Mcn (Gast)


Lesenswert?

Lothar M. schrieb:

> Davon ausgehend gibt es 2 Antworten:
> "Prinzipiell" dauert keiner der Zustände der FSM irgendeine Zeit, weil
> die FSM nämlich "taktlos" ist (deshalb findet sich da als
> Weiterschaltbedingung nirgends ein Takt).

Schaut man sich die entity-decleration am Ende des Aufgaben-Blattes an 
ist die FSM nicht notwendigerweise 'taktlos'. Natürlcih könnte aber auch 
mit CLK irgendetwas anderes als ein Takt gemeint sein.

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


Lesenswert?

Mcn schrieb:
> Schaut man sich die entity-decleration am Ende des Aufgaben-Blattes an
> ist die FSM nicht notwendigerweise 'taktlos'.
Meine Rede von der "Umsetzung aus der Theorie in die Praxis"
. Denn natürlich weiß jeder, dass da in der Realität ein Takt beteiligt 
ist.
Asynchrone FSM sind nur in Ausnahmefällen implementierbar, weil dazu ein 
graycodierter Eingangsvektor nötig ist.

von vancouver (Gast)


Lesenswert?

Lothar M. schrieb:
> Denn da geht es ja quasi um
> philosophische Betrachtungen.

So wie die Aufgaben formuliert sind, glaube ich kaum, dass sich der 
Aufgabensteller um solche Dinge Gedanken gemacht hat. Er wollte die 
Anzahl der Takte wissen, hat aber nach einer Zeit gefragt, und wenn man 
ganz pingelig ist, könnte man anmerken, dass nirgendwo gschrieben steht, 
dass die FSM in Hardware als digitale Schaltung realisiert werden soll. 
Man könnte sie auch in Python oder Java implementieren, und zwar auf die 
unterschiedlichsten Arten. Dann ist die Aufgabe 4.3 schlichtweg nicht zu 
beantworten.

von Mcn (Gast)


Lesenswert?

vancouver schrieb:
>  und wenn man
> ganz pingelig ist, könnte man anmerken, dass nirgendwo gschrieben steht,
> dass die FSM in Hardware als digitale Schaltung realisiert werden soll.
> Man könnte sie auch in Python oder Java implementieren, und zwar auf die
> unterschiedlichsten Arten. Dann ist die Aufgabe 4.3 schlichtweg nicht zu
> beantworten.

Da aber ein Lösungstemplate als VHDL-Code am Ende das Blattes steht ist 
nicht davon auszu gehen, das hier nach einer Python oder 
Java-Implementierung gefragt wurde. Auch im Titel schreibt der TO "VHDL" 
und nicht Java o.ä.. Ganz abgesehen davon das die Aufghabe in das Forum: 
FPGA, VHDL & Co. gepostet wurde.

IMHO ist esganz schlechter Stil und führt schnell "zum Schuß ins eigene 
Knie" um Formulierungsdetails herumzudisktutieren um dann, sollte der 
Autor auf eine Antwort insistieren mit einer Ausrede wie "ist nicht 
beantwortbar" ums Eck zu kommen.

von vancouver (Gast)


Lesenswert?

Mcn schrieb:
> IMHO ist es ganz schlechter Stil

Ich habe es absichtlich auf die Spitze getrieben um zu zeigen, dass eine 
unsaubere Formulierung des Problems leicht zu Missverständnissen führt, 
so wie in diesem Fall. Ist schon klar, dass es bei dieser Aufgabe um 
VHDL geht.

Mcn schrieb:
> Formulierungsdetails

Es geht hier um weit mehr als Formulierungsdetails. Der TO hat ja 
geschriebven, dass er zwei Aufgaben nicht versteht, und beim Lesen des 
Blattes musste ich ihm Recht geben. Natürlich kann man das Geschreibsel 
auf naheliegende Weise interpretieren ("Register(Speicher)"=Bits des 
Zustandsregisters, "zeiliche Länge"=Anzahl der Taktzyklen, 
"VHDL-Programm"=synthetisierbares RTL-Modell), aber es ist nicht so ganz 
fair, die Studenten raten zu lassen, was der Kauderwelsch bedeuten soll.

Ich habe einige Semester lang Übungen und Klausuren an der Uni betreut 
und machmal die absonderlichsten Antworten auf Fragen bekommen, die für 
meine Begriffe eindeutig gestellt waren. Dabei habe ich dann gelernt, 
solche Probleme wasserdicht und unmissverständlich zu formulieren, was 
mir heute z.B. beim Schreiben von Specs und Dokumenationen hilft. Der 
Autor der Aufgaben aus dem obigen Beispiel ist davon offensichtlich 
meilenweit entfernt.

von Blechbieger (Gast)


Lesenswert?

Mcn schrieb:
> Und mit register
> ist im Bereich VHDL/FPGA schon ein einzelnes Register gemeint

Das ist für mich ein Flipflop, ein Register impliziert für mich mehrere 
FF. Zumindest wenn man bei VHDL vom RTL redet sind nicht einzelne FF 
gemeint sondern Register beliebiger Breite.

von Mcn (Gast)


Lesenswert?

Blechbieger schrieb:
> Mcn schrieb:
>> Und mit register
>> ist im Bereich VHDL/FPGA schon ein einzelnes Register gemeint
>
> Das ist für mich ein Flipflop, ein Register impliziert für mich mehrere
> FF. Zumindest wenn man bei VHDL vom RTL redet sind nicht einzelne FF
> gemeint sondern Register beliebiger Breite.

Bitte folge dem beigefügten Link, da steht:


"Hardware register in digital electronics, especially computing, 
hardware registers are circuits typically composed of flip flops"

Der Vergleich mit Register Transfer Level greift bei FSM im FPGA nicht, 
der Datenpfad ist da zu unterschiedlich:

Bei RTL ist der Datenausgang des Quellregister mit dem Dateneingang des 
Zielregister direkt (datenbus) verbunden (chip enable-Steuerung) oder 
über einen Multiplexer.

Bei einer FPGA FSM-Implementierung gibst es keine zwei Register, Quell- 
und Ziel., es gibt eine einzelne Speicherstelle (Zustandsspeicher) deren 
Ausgang q über ein kombinatorisches Netzwerk mit dem Eingang d verbunden 
ist.
In der Kombinatorik wird die Kodierung des Zustands mit dem 
Eingangssignalen der FSM verknüpft und daraus der neue Zusandscode 
entsprechenden der State-transition berechnet.
Diee Kombinatorik wird in der Regel aus LUT's im Logicmode gebildet, 
nicht aus Block- oder distributed RAM (LUT's im memory-mode) wie ein ein 
(klassisches) Registerfile.

Man kann auch mit dem Synthesetool rumspielen, gelegentlich gibt es 
neben der Auswahl der Codierung auch die Auswahl der Implementierung und 
sich dann die erzeugten netze anschauen. STA drüberlaufen lassen ist 
auch spannend, da gibt es zum Teil erhebliche Unterschiede.

--
>Natürlich kann man das Geschreibsel
>auf naheliegende Weise interpretieren ("Register(Speicher)"=Bits des
>Zustandsregisters, "zeiliche Länge"=Anzahl der Taktzyklen,
>"VHDL-Programm"=synthetisierbares RTL-Modell), aber es ist nicht so ganz
>fair, die Studenten raten zu lassen, was der Kauderwelsch bedeuten soll.

Also IMHO kann es keine wasserdichte Formulierungen geben. Das kann man 
auf volksnahe Weise aus der Anzahl von Juristen und Gerichtsprozessen 
ableiten oder auf exakte Weise aus dem Scheitern des Hilbertsprogramm 
wie durch Kurt Gödel aufgezeigt. 
https://de.wikipedia.org/wiki/Hilbertprogramm

Und diese Aufgabenstellung ist offensichtlich aus ihrem Context 
(Lehrbuch, Vorlesungsreihe) gerissen. Dieser Context ist nunmal 
erforderlich, ansonsten müsste man jede Aufgabe um ellenlangen Glossars 
und Definitionen ergänzen.
Und diese Verbindung zum konkreten Kontext kann nur der TO selbst 
leisten.
Aber dabei kann man es ihm schwerer machen, wenn man mit rabulistischen 
Eifer Fehl-Interpretationen oder Context fremde Auslegungen in die 
Diskussion streut. Gerade wenn es scheint, das der TO selbst "auf dem 
falschen Dampfer" unterwegs ist, und ihm die Unterschiede zwischen 
CPU-programmierung und Hardware-Programmierung (FPGA-Implementation) 
nicht bewußt sind.

https://de.wikipedia.org/wiki/Rabulistik

von Blechbieger (Gast)


Lesenswert?

Mcn schrieb:
> "Hardware register in digital electronics, especially computing,
> hardware registers are circuits typically composed of flip flops"

Meine Worte. Are composed of flip flops, nicht are flip flops. Vom 
selben Link „Registers are normally measured by the number of bits they 
can hold, for example, an "8-bit register" or a "32-bit register".“

Mcn schrieb:
> Bei RTL ist der Datenausgang des Quellregister mit dem Dateneingang des
> Zielregister direkt (datenbus) verbunden (chip enable-Steuerung) oder
> über einen Multiplexer.

Zum einen können Quell- und Zielregister identisch sein, zum anderen 
werden sie meistens nicht direkt sondern kombinatorisch verbunden. 
Beispiel C=A+B.

Mcn schrieb:
> Bei einer FPGA FSM-Implementierung gibst es keine zwei Register, Quell-
> und Ziel., es gibt eine einzelne Speicherstelle (Zustandsspeicher) deren
> Ausgang q über ein kombinatorisches Netzwerk mit dem Eingang d verbunden
> ist.

Was daher keinen Widerspruch zu RTL darstellt.

von Mcn (Gast)


Lesenswert?

Blechbieger schrieb:

> Zum einen können Quell- und Zielregister identisch sein, zum anderen
> werden sie meistens nicht direkt sondern kombinatorisch verbunden.
> Beispiel C=A+B.
Das ist aus meiner Sicht kein Registertransfer sonder die Verknüpfung 
zweier Registerinhalte über eine ALU.


> Mcn schrieb:
>> Bei einer FPGA FSM-Implementierung gibst es keine zwei Register, Quell-
>> und Ziel., es gibt eine einzelne Speicherstelle (Zustandsspeicher) deren
>> Ausgang q über ein kombinatorisches Netzwerk mit dem Eingang d verbunden
>> ist.
>
> Was daher keinen Widerspruch zu RTL darstellt.

Nach meinen Verständniss schon. Vielleicht musste wirklich mal einen 
klassischen FSM-Entwurf (Zustandstabelle, Karnough) statt HDL-synthese 
im Computer per Hand durchziehen um den Unterschied zwischen 
Register-Transfer und Zustandcodierung/Übergangsberechnung in einer FSM 
nachzuvollziehen. Vielleicht wird das auch heute nicht mehr gelehrt.

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


Lesenswert?

Blechbieger schrieb:
> for example, an "8-bit register" or a "32-bit register
... or an "1-bit register", why not?

: Bearbeitet durch Moderator
von Kai D. (robokai)


Lesenswert?

vancouver schrieb:
> Die ganze Aufgabe ist extrem schlamping und missverständlich formuliert,
Das habe ich mir auch auf Anhieb gedacht! Vor allem die Sprache ist so, 
wie es sich heutzutage auf facebook liest. Das provoziert inhaltliche 
Misverständnisse und ist auch noch ein schlechtes Vorbild für die 
Lernenden.

> der Aufgabensteller ist offenbar selbst ein Anfänger.
Denke ich auch, entweder

- Dozent an einer dualen Hochschule
- Dokorand an einer vormaligen FH
- studentischer Mitarbeiter an einer Uni

(die drei haben etwa das gleiche Alter und denselben Level, also 
mittelmäßige Lehrbefähigung.

> Ich formuliere mal um
nichts hinzuzufügen

von Kai D. (robokai)


Lesenswert?

Mcn schrieb:
> Und diese Aufgabenstellung ist offensichtlich aus ihrem Context
> (Lehrbuch, Vorlesungsreihe) gerissen. Dieser Context ist nunmal
> erforderlich,

Sehe ich anders! Die Formulierungen müssen in sich stimmig sein.
Wenn da steht "zeitliche Länge" ist das einfach nur müllig.

Es gibt die Worte "Periodendauer", "Periodenlänge", "Periodenanzahl" um 
absolute und relative Bezüge von Zeiten zu bezeichnen, also Sekunden, 
Prozente und Anzahl N. Hier wäre wohl letzteres das Beste um die 
Taktanzahl zu nennen.

Aber in Zeiten wo es immer mehr "schnelle Geschwindigkeiten" und 
"langsame Zeiten" gibt ...

Mcn schrieb:
> Unterschied zwischen Register-Transfer und
> Zustandcodierung/Übergangsberechnung in einer FSM
Dieser Unterschied liegt in der praktischen Umsetzung. Das ist selbst in 
C so.

> Vielleicht wird das auch heute nicht mehr gelehrt.
Zustandsautomaten und die Formeln darum waren zu allen Zeiten in allen 
Studiengängen priorisiertes Thema. Wir haben das im Elektropraktikum 
noch mit digitalen Zählern nachgestellt, die zu Schaltungen führten, die 
wie die ersten SPS arbeiteten.

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.