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
Über ein zusätzliches Signal. In A0 0 setzen, in A1 1 setzen und in B abfragen.
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.
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
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.
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
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.
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 ;-)
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.
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...
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.