Forum: FPGA, VHDL & Co. State_Maschine; Ausgang abhängig vom vorderen State


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Reto B. (schnuber)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen

Ich habe eine State-Maschine mit den Zuständen A0 und A1, von denen 
jeweis eine Transition in den Zustand B geht. Nun möchte ich in Zustand 
B ein Ausgang OUT schalten, welcher je nach dem ob ich von A0 oder A1 in 
B hineingekommen bin entweder '0' oder '1' ist.

Hier nochmal die Kurzfassung:

Wenn A0 -> B dann OUT=0
Wenn A1 -> B dann OUT=1

Frage, wie realiesiert man sowas am einfachsten?

Edit
Natürlich wäre eine Lösung einfach ein State B0 und B1 zu definieren in 
welchem jeweils OUT=0 bzw.1 geschalten wird. Dann habe ich aber einen 
State mehr und deshalb suche ich nach weiteren Lösungen.

Danke
Gruss

: Bearbeitet durch User
von help (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Über ein zusätzliches Signal. In A0 0 setzen, in A1 1 setzen und in B 
abfragen.

von Reto B. (schnuber)


Bewertung
0 lesenswert
nicht lesenswert
Gefällt mir, werde ich mal versuchen.
Danke

von Falk B. (falk)


Bewertung
0 lesenswert
nicht lesenswert
Oder ganz einfach mit einem Moore Automaten und 1 Prozess Schreibweise 
beim Übergang von A1 auf B bzw A0 auf B den Ausgang passend setzen. 
Einfacher geht es nicht.

von Matthias L. (lippy)


Bewertung
0 lesenswert
nicht lesenswert
Splittedoch den Zustand B in B0 und B1.

von Frank (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> Oder ganz einfach mit einem Moore Automaten und 1 Prozess Schreibweise
> beim Übergang von A1 auf B bzw A0 auf B den Ausgang passend setzen.
> Einfacher geht es nicht.

Kann man machen. Aber warum denn überhaupt. Mach den Automaten lieber 
schön übersichtlich. 2 Prozess Moore und denn so viele Zustände wie es 
eben braucht. Mach aus B lieber 2 Zustände der Übersicht zur Liebe

von Schlumpf (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Stört es dich, wenn der Ausgang nicht IM Zustand B gesetzt wird, sondern 
beim Sprung von A0 oder A1 nach B?

Falls nicht, dann setze den Ausgang doch dann, wenn du auch deinen 
Zustand änderst. Also in dem Moment, wo du im Zustand A0 oder A1 
entscheidest, dass du jetzt in den Zustand B wechseln wirst.
Falls der Ausgang erst IM Zustand B gesetzt werden darf, dann könntest 
du das Signal auch einfach um einen Takt verzögern. Dann wird es zwar 
beim Übergang bereits gesetzt, erscheint am Ausgang aber erst einen Takt 
später und kommt somit erst dann, wenn der Zustand B auch erreicht ist.

von Der Besucher (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Viel wichtiger ist doch die Frage, ob der Ausgang Out synchron (also 
mittels Flipflop) oder asynchron (combinatorische Logik) gesetzt wird. 
Beim asynchronen setzen bekommt man (nach der Synthese) oft sehr 
häßliche Spikes im Ausgangssignal, bis es stabil ist.
Wollte ich nur mal zum drüber nachdenken einwerfen.

Der Besucher

von Reto B. (schnuber)


Bewertung
0 lesenswert
nicht lesenswert
Danke für die vielen Antwoerten.
Ich bevorzuge die Variante, wo ich den Ausgang Moor-Style, also synchron 
setze. Somit kommt das setzen von OUT im Übergang nicht in Frage. 
Deshalb gefällt mir die Lösung von "help" am besten.

Gruss

von Udo S. (urschmitt)


Bewertung
0 lesenswert
nicht lesenswert
Reto B. schrieb:
> Deshalb gefällt mir die Lösung von "help" am besten.

Die im Prinzip aber eine 2. Zustandsvariable ist. Eigentlich hast du 
damit 2 geschachtelte (oder gekoppelte?) Zustandsautomaten.
Macht die Sache erst mal einfach, aber spätestens wenn noch 3 oder 4 
Erweiterungen im Laufe der Zeit dazukommen immer unübersichtlicher.

von Schlumpf (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Reto B. schrieb:
> Ich bevorzuge die Variante, wo ich den Ausgang Moor-Style, also synchron
> setze.

Ganz unabhängig von deiner getroffenen Entscheidung:
Ein Setzen eines Ausgangs im Übergang bedeutet nicht, dass er deswegen 
asynchron ist ;-)

von Frank (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Udo Schmitt schrieb:
> Reto B. schrieb:
>> Deshalb gefällt mir die Lösung von "help" am besten.
>
> Die im Prinzip aber eine 2. Zustandsvariable ist. Eigentlich hast du
> damit 2 geschachtelte (oder gekoppelte?) Zustandsautomaten.
> Macht die Sache erst mal einfach, aber spätestens wenn noch 3 oder 4
> Erweiterungen im Laufe der Zeit dazukommen immer unübersichtlicher.

Richtig!
Warum machst du also keinen Zusätzlichen Zustand? Wenn die Zustände 
nicht gerade OneHot Codiert sind nedeutet das nichtmal unbedingt ein 
zusätzliches FlipFlop.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Frank schrieb:
> Wenn die Zustände nicht gerade OneHot Codiert sind
Und das sind sie heute eigentlich nicht mehr. Die Defaulteinstellung ist 
üblicherweise Binär. Auf One-Hot stellt eigentlich nur noch einer um, 
der durch einen zwielichtigen asynchronen Konstrukt (z.B. einen 
kombinatorischen Reset) Probleme mit seiner FSM hat und dann 
herausfindet, dass die "weg sind", wenn er die FSM One-Hot statt Binär 
codiert... (BTDT ;-)

Reto B. schrieb:
> welcher je nach dem ob ich von A0 oder A1 in B hineingekommen bin
> entweder '0' oder '1' ist.
Wenn es in einem FPGA ein "vorher und nachher" gibt, ist ein 
Zustandsautomat beteiligt. Im einfachsten Fall ist das ein Flipflop oder 
als nächst komplexe Stufe ein Zähler...

von Duke Scarring (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
>> Wenn die Zustände nicht gerade OneHot Codiert sind
> Und das sind sie heute eigentlich nicht mehr.
Hmm. Bei mir entscheidet der Optimizer von XST, wie er welche FSM zu 
kodieren gedenkt:
1
Analyzing FSM <MFsm> for best encoding.
2
Optimizing FSM <...> on signal <z[1:2]> with user encoding.
3
-------------------
4
 State | Encoding
5
-------------------
6
 idle  | 00
7
 shift | 01
8
 calc  | 10
9
-------------------
10
11
Analyzing FSM <MFsm> for best encoding.
12
Optimizing FSM <...> on signal <state[1:5]> with gray encoding.
13
-----------------------------------
14
 State                 | Encoding
15
-----------------------------------
16
 state_idle            | 00000
17
 state_load2           | 01111
18
 state_popped          | 00111
19
 state_loadsp2         | 00100
20
 state_loadsp3         | 00010
21
 state_addsp2          | 00101
22
...
23
24
Analyzing FSM <MFsm> for best encoding.
25
Optimizing FSM <...> on signal <r_hresp[1:1]> with sequential encoding.
26
-------------------
27
 State | Encoding
28
-------------------
29
 00    | 0
30
 01    | 1
31
-------------------
32
33
Analyzing FSM <MFsm> for best encoding.
34
Optimizing FSM <...> on signal <STATE[1:58]> with one-hot encoding.
35
----------------------------------------------------------------------
36
 State  | Encoding
37
----------------------------------------------------------------------
38
 000000 | 0000000000000000000000000000000000000000000000000000000001
39
 000001 | 0000000000000000000000000000000000000000000000000000000010
40
 000010 | 0000000000000000000000000000000000000000000000000000000100
41
 000011 | 0000000000000000000000000000000000000000000000000000001000
42
 000100 | 0000000000000000000000000000000000000000000000000000010000
43
...
44
 110110 | 0001000000000000000000000000000000000000000000000000000000
45
 111000 | 0010000000000000000000000000000000000000000000000000000000
46
 111001 | 0100000000000000000000000000000000000000000000000000000000
47
 110111 | 1000000000000000000000000000000000000000000000000000000000
48
 111010 | unreached
49
----------------------------------------------------------------------
Da ist so ziemlich alles dabei...

Duke

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Duke Scarring schrieb:
> Optimizing FSM <...> on signal <state[1:5]> with gray encoding.
Hoffentlich fehlt da einiges oder der Synthesizer hat ein eigenartiges 
Verständnis von "Gray-Encoding"...  :-o

> Hmm. Bei mir entscheidet der Optimizer von XST, wie er welche FSM zu
> kodieren gedenkt:
Nachgeschaut: tatsächlich "FSM Encoding Algorithm: Auto"

> Da ist so ziemlich alles dabei...
Viel fehlt tatsächlich nicht mehr... ;-)

: Bearbeitet durch Moderator
von Duke Scarring (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> Hoffentlich fehlt da einiges oder der Synthesizer hat ein eigenartiges
> Verständnis von "Gray-Encoding"...
Jepp. Da fehlt einiges. In Summe sind es 23 States:
1
Synthesizing Unit <zpu_core_medium>.
2
    Related source file is "...\zpu_core_medium.vhd".
3
...
4
    Found finite state machine <FSM_3> for signal <state>.
5
    -----------------------------------------------------------------------
6
    | States             | 23                                             |
7
    | Transitions        | 97                                             |
8
    | Inputs             | 10                                             |
9
    | Outputs            | 5                                              |
10
    | Clock              | clk (rising_edge)                              |
11
    | Reset              | reset (positive)                               |
12
    | Reset type         | synchronous                                    |
13
    | Reset State        | state_idle                                     |
14
    | Power Up State     | state_idle                                     |
15
    | Encoding           | auto                                           |
16
    | Implementation     | LUT                                            |
17
    -----------------------------------------------------------------------

Duke

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]
  • [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.