Forum: FPGA, VHDL & Co. Code Problem mit IF Abfrage oder Statemachine


von martin (Gast)


Lesenswert?

hallo, ich habe leider ein Problem mit einem Teil meiner Statemachine, 
bzw wohl eher noch mit einer IF Abfrage, bei der ich allein leider auf 
keinen grünen Zweig komme. Bestimmt ist die Lösung ganz einfach, aber 
mein Horizont(=Abstand zwischen Kopf und Brett) ist im Moment zu klein. 
Ich habe mal den Code Teil eingefügt, der mir Probleme macht:
1
ENTITY my_entity IS
2
PORT (
3
  clock    : IN std_logic;   -- Main Clock 
4
  reset    : IN std_logic;   -- Reset
5
  Value1   : IN STD_LOGIC_VECTOR(3 downto 0);
6
  Value2   : IN STD_LOGIC_VECTOR(3 downto 0);
7
  Trigger1 : IN STD_LOGIC;
8
  Trigger2 : IN STD_LOGIC;
9
)
10
11
[...]
12
13
CASE next_state IS 
14
WHEN Wait_State =>
15
  IF (Trigger1 ='1') AND (Value1 = Value2) THEN
16
    Send_Data<= '1';
17
    next_state <= STATE1;
18
  ELSIF (Trigger2 ='1') AND (Value1 = Value2)  THEN
19
    Send_Data<= '1';
20
    next_state <= STATE2;
21
  ELSE
22
    Send_Data<= '0';
23
    next_state <= Wait_State;
24
  END IF;
25
26
[...]

Beim Simulieren (Quartus, Vector Wave Form File) habe ich folgendes 
Problem festgestellt: wenn Value 1 und Value 2 jeweils "0000" sind, dann 
läuft alles gut, es wird in State1 bzw State2 gesprungen. Wenn ich die 
Eingänge jedoch auf einen anderen Wert als "0000" setze (und zwar beide 
auf den gleichen Wert) dann bleibt die Statemachine im Wait State.
der Versuch, die Eingangswerte erst einmal einem Signal zuzuweisen und 
anschliessend die Signale zu vergleichen, ist auch fehlgeschlagen...

Ich würd mich freuen, wenn mir jemand weiterhelfen kann,
viele Grüße,
Martin

von Roger S. (edge)


Lesenswert?

Tja das Interessanteste fehlt, du solltest deinen gesamten code als 
file attachen.

Hast du den case auch schoen in einem synchronen Prozess?
Sind die Trigger und values auch synchron zum clock?

Ach ja, Simulieren mit Quartus ist ein PITA. Nimm ModelSim!

Cheers, Roger

von martin (Gast)


Lesenswert?

Ich bin fündig geworden, die ganze Statemachine zu posten hätte in 
diesem Fall leider auch nicht weitergeholfen. In der Toplevel Datei habe 
ich vergessen, den einen Input2 in die Komponente mit reinzuschreiben, 
somit wurde das Signal von aussen nicht in die Statemachine reingeführt 
und wohl standardmäßig auf Null gesetzt. Da es im Moment noch recht 
viele Warnings gibt, muß mir die wohl durchgerutscht sein. Vielen Dank 
für Deine Hilfe.
Mit ModelSim werd ich mich demnächst auch noch mal auseinander setzen, 
aber gerade am anfang fand ich es sehr angenehm, einfach 2-3 Signale 
zusammen zu klicken und schnell ein Ergebnis zu haben.

Viele Grüße,
Martin

von Mark (Gast)


Lesenswert?

Achtung!

es dürfen keine asynchronen Signale in die Statemachine gelangen!
Alle externen Signale sollten mind. 1 FF durchlaufen bevor sie in der 
FSM auf ihren Wert abgefragt werden.

von martin (Gast)


Lesenswert?

Vielen Dank für den Hinweis, aber die Signale kommen bei mir synchoron 
an, sie kommen nicht wirklich von extern, sondern ich bau gerade eine 
Komponente des großen Ganzen zusammen.

Zwar wird ein Signal von extern kommen, dieses ist jedoch als Konstant 
anzunehmen, da es sich um einen DIP Schalter handelt, der während des 
Betriebes nicht umgeschaltet wird, in sofern gibt es auch kein 
asynchrones umschalten.

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.