State_Maschine; Ausgang abhängig vom vorderen State

OP #3507053
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
Gast #3507633
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
Gast #3507722
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.
Gast #3507953
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
Gast #3508861
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.
Moderator (Firma: Titel) Persönliche Seite #3509415
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...
Gast #3509492
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
Moderator (Firma: Titel) Persönliche Seite #3509577
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... ;-)
Angehängte Dateien:
Gast #3509889
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren