www.mikrocontroller.net

Forum: FPGA, VHDL & Co. State Maschine Probleme


Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin an einem async Memory Controller bei. Leider habe ich ein
kleines Problem. Ich muesste drei Prozesse in einem Zustand abfragen.
Leider wird ein Signal synchron unanhaengig vom Clock abgefragt. Meine
State Maschine arbeitet auf steigende Flanke des Clock Signal's.

Hier mal ein kleiner Auszug:

when Xnibble =>
 if read = '1' then
  if highlow = '1' then
   UB <= '1';
   UL <= '0';
   state_next <= read;
  end if;
 end if;
 if write = '1' then
   if highlow = '1' then
   UB <= '1';
   UL <= '0';
   state_next <= write;
  end if;
 end if;
-- next state

Mein Problem ist das jetzt highlow nicht mehr synchron zum Clock
abgefragt wird. Hat jemand vielleicht ein Tip?

Das komplette ISE7.1 Projekt koennte ich heute abend zur Verfuegung
stellen falls es zur Fehleranalyse benoetigt wird.

Gruß,

Dirk

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

habe vergessen zu Fragen ob es sinnvoller ist den Fall abzufragen das
Write and Read = '1' sind?

if read = '1' and write = '0' then ....
..
..
end if;
if read = '0' and write = '1' then ....
..
..
end if;

Theoretisch sollte es nicht vorkommen das beide Signale '1' sind.
Eigentlich sollte dieses spaeter in der Main Control State Maschine
verhindert werden.

Gruß,
Dirk

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn deine FSM mit dem Clock CLK läuft dann wird highlow
ja auch mit CLK "abgefragt".
Das Problem ist nur, wo kommt "highlow" her ?
Eigentlich sollte man das am Signalnamen erkennen, der
ist aber nicht sinnvoll gewählt. Also wenn "highlow"
direkt von einem externen Pin kommt, wird deine FSM
evt. nicht sicher funktionieren.
(Grundregel: nie asynchrone Signale in einer FSM abfragen!)

Noch ne Frage:
können "read" und "write" gleichzeitig 1 sein ? Durch Deine
Beschreibung hat read eine höhere Priorität als write, was
aber keine Rolle spielt, wenn beide nie gleichzeitig 1 sind
oder wenn es so gewollt ist.
Man könnte auch schreiben :

if highlow ='1' then
   if read = '1' then
      ...
   elsif  write = '1' then
      ...
   end if;
end if;

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
da warst Du schneller als ich mit dem 2. Beitrag, also vergiss
meine Frage mit read und write = 1

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

danke fuer deine Hilfe. Stimmt der Name highlow ist schlecht gewaehlt.
Highlow stellt ein Input Pin da der wiederum von der Main Control State
Maschine gesteuert werden soll. Die Main Control State Maschine soll
eigentlich auf Clk synchron arbeiten, somit sollte "highlow" synchron
arbeiten.

Ich kann leider erst heute abend die Aenderungen pruefen und werde dann
nochmal berichten ob es nun Synchron alles ist.

Gruß,

Dirk

PS.: Langsam macht VHDL richtig spass auch wenn es manchmal frustierend
ist.

Gruß,

Dirk

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo Dirk,

wie soll ein Input-Pin voaten einer Statemachine gesteuert werden?
Das hab ich noch nicht verstanden...

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

endlich ist der process auch synchron zum Clock.

Ich haette aber gleich noch Fragen zu eine Variable:
Ich hab mir eine Shared Variable  Integer deklariert

SHARED variable bitvariable: integer := 7

Kann man sich Variablen nicht in Modelsim anschaun? nur Prozesse und
Signale?

Gruß,
Dirk

Autor: ope (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Je mehr ich mich mit der FSM und der SRAM Ansteuerung beschäftige, desto
mehr kommt bei mir der Verdacht auf, das dieser Ansatz (FSM) nicht
gerade der Beste ist. Ein Clk Cycle vergeht, bis die state gewechselt
hat (read-write zB) und ein weiterer, bis die Signale (en, wr zB)
gesetzt sind, wenn ich die Ausgänge synchronize. Oder habe ich den
"Dreh" noch nicht raus? Wie macht Ihr das?

Viele Grüße
Olaf

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.