www.mikrocontroller.net

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


Autor: cyperweb (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: cyperweb (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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-od...

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.