mikrocontroller.net

Forum: FPGA, VHDL & Co. Mehr als eine State Machine pro process/architecture


Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe eine Frage zu State Machines.
Ist es möglich mehr als eine State Machine in einer Architecture 
und/oder  Process zu haben.

Also im Prinzip so was:

architecture...

process()
begin

 case state1 is

    when   x  =>

    when   y   =>

 end case


  case state2 is

    when u   =>

    when  v  =>

 end case;

end process;


process()
begin


case state3 is

   when p   =>

   when r   =>

end case;
end process;

end architecture;


Kann man das so verstehen was ich meine?

Autor: Björn Cassens (bjoernc) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja prinzipiell ist es möglich mehr als eine FSM in einer architecture zu 
verfassen. Jedoch kann dadurch die gesamte architecture unübersichtlich 
werden da du ja noch die Ausgänge irgendwo berechnen musst und das würde 
ich dann in einer architecture kapseln und die zweite FSM in einer 
anderen Datei mit einer neuen architecture verfassen. Ich frage mich, 
was denn gegen zwei getrente architectures spricht?
Der Codeschnipsel ansich naja - so wirklich hilft dieser nicht weiter um 
die Frage zu verstehen. Im Gegenteil, der Codeschnipsel verwirrt mich 
eher - da ich mich derzeit frage, was du mir damit sagen möchtest. ;)
mfG Björn

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

erst mal dane für die schnelle Antwort.
Das Problem auf das ich hinaus wollte ist, dass ich die vorkommenden 
States vorher definieren muss. Also sowas:

Type State_type is (x,y,u,v,p,r);
signal state1, state2, state3: State_type;

Aber nun weiss ja z.B. state1 nicht, dass er u,v,p,r nicht annehmen 
kann/soll sondern nur x oder y.

Das heisst in den case- Anweisungen muss doch jeweils auch ein leeres 
"other" vorkommen, da sonst nicht alle möglichen cases abgedeckt sind 
wie es Vorschrift ist. Also so was:

process
begin

...

case state1 is

 when x => Anweisung_was_auch_immer:
                  state1 <= y;

 when y => Anweisung_was_auch_immer_2;

 when others =>

end case

Das gleiche gilt auch für die anderen States.

Nun wollte ich wissen ob die leeren "öthers" ein Problem erzeugen 
können?

Autor: Björn Cassens (bjoernc) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
leere others ? Was soll das sein?
VHDL oder die Synthese macht nur das was du ihm sagst. Sprich wenn 
state1 = nur X,Y,Z annehmen darf dann kannst du mittels others ein Latch 
vermeiden. Jedoch die Tatsache dass du mehrere States hast, die du pro 
Signal nicht benötigst macht mich Stutzig, weil du dadurch mehr Register 
benötigst. Dies liegt daran, dass du mehr Bits benötigst um die States 
im Signal abzubilden.

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab mir überlegt, mit einer State Machine einen Zähler mit einem 
counter_out Ausgang zu generieren, den ich dann dann in anderen State 
Machines verwenden wollte um Abhängig davon andere Anweisungen und 
States zu steuern. Aber ich bin mir eben nicht sicher ob das eine gute 
Idee ist. Oder ob ich versuchen sollte alles in eine State Machine zu 
packen.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas schrieb:
> Ich hab mir überlegt, mit einer State Machine einen Zähler mit einem
> counter_out Ausgang zu generieren,
Jeder Zähler an sich ist eine FSM, die einfach immer in den nächsten 
zustand weiterschaltet...

> den ich dann dann in anderen State Machines verwenden wollte um
> Abhängig davon andere Anweisungen und States zu steuern.
Das hört sich an, wie wenn du irgendwas ganz Normales entweder nur 
umständlich machen willst oder noch nicht ganz verstanden hast...
Denn diese Aussage ist so global, unbestimmt und theoretisch, dass alle 
Antworten von gut bis schlecht, top bis flop, üblich bis hirnrissig ohne 
Einschränkung möglich sind.

Kurz: was willst du denn da tatsächlich machen?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.