mikrocontroller.net

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


Autor: martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
ENTITY my_entity IS
PORT (
  clock    : IN std_logic;   -- Main Clock 
  reset    : IN std_logic;   -- Reset
  Value1   : IN STD_LOGIC_VECTOR(3 downto 0);
  Value2   : IN STD_LOGIC_VECTOR(3 downto 0);
  Trigger1 : IN STD_LOGIC;
  Trigger2 : IN STD_LOGIC;
)

[...]

CASE next_state IS 
WHEN Wait_State =>
  IF (Trigger1 ='1') AND (Value1 = Value2) THEN
    Send_Data<= '1';
    next_state <= STATE1;
  ELSIF (Trigger2 ='1') AND (Value1 = Value2)  THEN
    Send_Data<= '1';
    next_state <= STATE2;
  ELSE
    Send_Data<= '0';
    next_state <= Wait_State;
  END IF;

[...]

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

Autor: Roger Steiner (edge)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.