State Maschine Probleme

Gast #252079
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
Gast #252080
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
Gast #252081
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;
Gast #252083
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
Gast #252085
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
Gast #252086
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

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.