State_Maschine; Ausgang abhängig vom vorderen State

OP #3507053
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
Gast
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
Gast
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.
Gast
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
OP
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
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.
Gast
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 ;-)
Gast
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.
Moderator (Firma: Titel) Persönliche Seite
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...
Gast
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
Moderator (Firma: Titel) Persönliche Seite
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... ;-)
Angehängte Dateien:
Gast
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

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [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 einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.