State Maschine Probleme

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren