-- Default-Werte, werden uebernommen wenn sonst nichts zutrifft, z.B. in IDLE
24
BUSY_FLAG<='0';
25
TRIGGER_FLAG<='0';
26
next_state<=WAIT_ENABLE;
27
28
casecurrent_stateis
29
whenWAIT_ENABLE=>
30
ifREAD_ENABLE='1'then
31
next_state<=WAIT_WINDOW_START;
32
endif;
33
whenWAIT_WINDOW_START=>
34
ifWS_flag='1'then
35
next_state<=WAIT_WINDOW_END;
36
endif;
37
whenWAIT_WINDOW_END=>
38
ifWE_flag='1'then
39
next_state<=WAIT_ENABLE_END;
40
whenWAIT_ENABLE_END=>
41
ifREAD_ENABLE='0'then
42
next_state<=WAIT_ENABLE;
43
whenothers=>
44
next_state<=WAIT_ENABLE;
45
endcase;
46
endprocess;
In diesem Fred ging es ums gleiche Thema:
Beitrag "folgende HDL ADVISOR Anweisung ?"
Demzufolge hätte ich wohl kein Problem zu erwarten, da ich ja mit Reset
arbeite.
In meinem Code habe ich aber dem current_state bereits einen Initialwert
verpasst. Warum taucht die Info dann immer noch auf?
Weiss da jemand Rat?
Gruss, Martin Kohler
-----------------
Edit: Beitrag in der Breite reduziert, bessere Lesbarkeit...
Nein, das brauchst du nicht zu beheben.
Er sagt ja nur, was die Wege sind, ein moegliches Problem zu vermeiden,
nichts davon, dass diese Probleme auch wirklich auftreten.
und wie >könnte< ich ich die Info vermeiden, falls ich das wollen täte?
Gibt es da trotzdem einen Weg?
Das INIT Statement habe ich ja hinzugefügt. Oder war das falsch:
Ich denke, diese Meldung tritt immer auf, wenn du dem Synthesizer die
Implementierung frei stellst. Du kannst das zwar auch selbst festlegen
(siehe Punkt 2 und 3 in der Meldung), aber das wuerde ich nicht machen.
Es handelt sich ja auch lediglich um ein Info, keine Warning, deswegen
kannst du das getrost ignorieren.
Ich möchte daher ja auch den ersten Hinweis beachten und das INIT
statement hinzufügen. Aber das klappt ja offenbar nicht ganz.
Wie genau ist das zu tun?
Ja, es ist nur eine Info. Aber das beantwortet leider meine Frage noch
nicht.
Danke für die bisherigen Antworten!
Gruss, Martin
Ich komme nochmals auf die State Encoding Frage zurück, denn ich habe im
Online-Tutorial auf www.vhdl-online.de in paar Angaben gefunden.
Ab dieser Seite: http://www.vhdl-online.de/tutorial/deutsch/t_222.htm
und folgende wird das Codieren von case statements erklärt.
Ich habe momentan ja am ehesten die Variante nach Kapitel 4.5.5 mit
One-Hot Encoding. Daraus folgt die Info wegen der "unsicheren"
Statemaschine - genau gemäss dem Tutorial.
Macht es nun Sinn, die Variante "4.5.7 Hand Coding" umzusetzen oder
macht das sowieso niemand?
Erfahrungen/Anregungen in dieser Sache? Codiert jemand die states "von
Hand" oder verwendet ihr (wie ich) einen selbst definierten type?
Gruss, Martin
Sowohl als auch:
Wenn man states mit guten Namen versehen kann, mache ich es. Manchmal
gibt es aber auch state machines, die einfach nur irgendetwas
abarbeiten, da nummeriere ich die states durch.
XST ist das reichlich egal, er waehlt in beiden Faellen das Encoding so,
wie es am besten passt, solange das nicht in den Optionen explizit
ausgeschaltet wird.
Ja natuerlich. Die wirst du immer bekommen, wen du nicht "FSM Encoding
Algorithm" auf "user" stellst.
Einen kleinen Vorteil hat die Kodierung per Hand: Man kann zum debuggen
den momentanen Zustand der state machine einfach auf einen Ausgang legen
und so im Betrieb beobachten.
Diese Möglichkeit erscheint mir bis jetzt auch recht sympathisch.
Allerdings: werden in der ModelSIM Simulation dann immer noch die state
Names angezeigt oder die hart codierte Konstante?