Forum: FPGA, VHDL & Co. Statemachine mit snychr Ausgangsschaltwerk


von cyperweb (Gast)


Lesenswert?

Hallo zusammen,
ich habe momentan folgende Problematik:

Ich möchte zu einem bestimmten Zeitpunkt ein Signal auslesen, dazu steht 
mir eine State Machine (SM) zu Verfügung, die u.a. die Zustände READ, 
WAITREAD hat.

Die SM wechselt nun in einem Lesezyklus von WAITREAD -> READ -> 
WAITREAD:
if (rising_edge (clk)) then
state <= nextstate;

In einem weiteren Prozess soll nun das Signal ausgelesen werden. Dazu 
verwende ich eine Look-up Tabelle der Form:

if (rising_edge (clk)) then
case state is

when READ   OUTPUT(i) <= data;
when WAITREAD OUTPUT(i) <= OUTPUT(i);
...

Nun vermute ich das die Leseoperation einen Takt verzögert ausgeführt 
wird, aber kann es auch sein das es zu Fehlern kommt wenn das Signal 
gleichzeitig geschrieben und ausgelesen wird, oder sogar innerhalb eines 
Taktes erst geschrieben und dann die LU Tabelle abfragt, sodass 
inkonsistente Ergebnisse erscheinen?

Vielen Dank für eure Hilfe

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

cyperweb schrieb:
> vermute ich das die Leseoperation einen Takt verzögert ausgeführt wird
Das ist so. Das ist das Verhalten von Signalen in VHDL. Das Stichwort 
dazu ist Latency...

> Dazu verwende ich eine Look-up Tabelle der Form:
Das ist zwar keine Lookup-Tabelle, aber seis drum:
warum machst du das Lesen nicht einfach in einem ungetakteten Prozess?

von cyperweb (Gast)


Lesenswert?

mitlerweile bin ich etwas weiter. Ein Takt Verzögerung ist kein Problem.
Mein Denkproblem war dass ich folgendes mache:

Takt 1   Takt 2   Takt 3
wait     read     wait

Stateaktualisierung und caseabfrage sind in zwei seperaten prozessen 
getriggert auf eine steigende taktflanke.

und jeweils gleichzeitig eine case when abfrage.

Ich gehe korrekt der Annahme das in Takt 3 case state = read true ist?


Auslesen ungetaktet ist (im moment) unmöglich da dieser Prozess nicht 
nur zu einen Zeitpunkt, sondern mehrmals während read aufgerufen werden 
würde. oder?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

cyperweb schrieb:
> Auslesen ungetaktet ist (im moment) unmöglich da dieser Prozess nicht
> nur zu einen Zeitpunkt, sondern mehrmals während read aufgerufen werden
> würde. oder?
Naja, Prozesse werden in der Hardware eigentlich nicht "aufgerufen", und 
in der Simulation werden sie auch nicht aufgerufen, sondern neu 
berechnet, wenn sich eines der Signale in der Sensitivliste ändert.

> Stateaktualisierung und caseabfrage sind in zwei seperaten prozessen
> getriggert auf eine steigende taktflanke.
Das ist eine unnötige Verknotung der Ein-Prozess- und 
Zwei-Prozess-Methode. Wenn du schon mit einem nextstate arbeitest, 
dann sollte der (wie üblich) in einem kombinatorischen berechnet werden. 
Wenn du mit der Ein-Prozess-Methode arbeitest, dann gibt es keinen 
nextstate.  sieh dir das mal an:
http://www.lothar-miller.de/s9y/archives/43-Ein-oder-Zwei-Prozess-Schreibweise-fuer-FSM.html

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.