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
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?
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.