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


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Reto B. (schnuber)


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)


Lesenswert?

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

von Reto B. (schnuber)


Lesenswert?

Gefällt mir, werde ich mal versuchen.
Danke

von Falk B. (falk)


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. (Gast)


Lesenswert?

Splittedoch den Zustand B in B0 und B1.

von Frank (Gast)


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)


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)


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)


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)


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)


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)


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. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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)


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. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

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)


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

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.