Forum: Mikrocontroller und Digitale Elektronik Dual Clock FIFO in VHDL


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Yann B. (yann)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte den Dual Clock FIFO (Template) von Quartus Prime nutzen. 
Zuerst möchte ich ihn testen. Dafür schreibe ich 512 Bytes mit 25MHz 
drin und ich lesen diese aber mit 1MHz. Beim Testen stelle ich leider 
fest, dass die Daten außer das erste Byte immer ein Takt später ankommen 
. Kann jmd mir bitte sagen, was ich falsch tue.

Vielen Dank!

Anbei findet ihr die VHDL-Dateien und ein Screenshot der Simulation.

von Axel Zucker (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Yann B. schrieb:
> Kann jmd mir bitte sagen, was ich falsch tue.

Nix.

von Yann B. (yann)


Bewertung
0 lesenswert
nicht lesenswert
Und warum kommen die anderen Daten mit einem Clock später?

von Yann B. (yann)


Bewertung
0 lesenswert
nicht lesenswert
Axel Zucker schrieb:
> Nix.

Und warum kommen die anderen Daten mit einem Clock später denn?

von Achim S. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Yann B. schrieb:
> Kann jmd mir bitte sagen, was ich falsch tue.

Überlege dir , zu welchem Zeitpunkt (bei welcher Taktflanke) die 
Read-Adresse von deinem RAM übernommen wird. Die Datenausgänge des RAM 
reagieren genau nach dieser Taktflanke. Die Read-Adresse 0 liegt zwei 
Takte lang an, also kommen die zugehörigen Daten auch zwei Takte lang 
aus dem RAM.

von Axel Zucker (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Yann B. schrieb:

> warum kommen die anderen Daten mit einem Clock später denn?

Weil es so im Datenblatt steht: 
https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ug/ug_fifo.pdf

Bspw.: (28)

von Yann B. (yann)


Bewertung
0 lesenswert
nicht lesenswert
Achim S. schrieb:
> Yann B. schrieb:
>> Kann jmd mir bitte sagen, was ich falsch tue.
>
> Überlege dir , zu welchem Zeitpunkt (bei welcher Taktflanke) die
> Read-Adresse von deinem RAM übernommen wird. Die Datenausgänge des RAM
> reagieren genau nach dieser Taktflanke. Die Read-Adresse 0 liegt zwei
> Takte lang an, also kommen die zugehörigen Daten auch zwei Takte lang
> aus dem RAM.

Hi Achim,

ich lese oder ich möchte jede Adresse bei steigender Taktflanke lesen 
und das dazugehörige Byte gleichzeitig lesen (siehe sdp_RAM_tb.vhd). 
Leider tut das Programm Etwas Anderes.

von Axel Zucker (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Yann B. schrieb:
> Leider tut das Programm Etwas Anderes.

Das ist kein Programm.

von Yann B. (yann)


Bewertung
0 lesenswert
nicht lesenswert
Axel Zucker schrieb:
> Yann B. schrieb:
>
>> warum kommen die anderen Daten mit einem Clock später denn?
>
> Weil es so im Datenblatt steht:
> 
https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ug/ug_fifo.pdf
>
> Bspw.: (28)

Dke Axel für deinen Beitrag! Ich schaue mir es gleich an.

von Achim S. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Du erzeugst deine Read-Adresse (in der Testbench) mit der steigenden 
Taktflanke. D.h. die neue Read-Adresse liegt jeweils erst nach der 
steigenden Taktflanke an, das RAM "sieht" bei der steigenden Taktflanke 
noch die alte Adresse.

Daher frägst du sowohl mit der ersten steigenden Flanke als auch mit der 
zweiten steigenden Flanke jeweils die Adresse 0 ab - und erhältst als 
Reaktion die Daten zu Adresse 0. Das RAM reagiert also genau, wie es 
reagieren muss: sobald die neue Adresse angelegt wird und die nächste 
Taktflanke kommt, liefert es nach der Taktflanke die neuen Daten. So 
funktionieren alle synchronen Designs.

Vielleicht wäre es für dein Verständnis einfacher, wenn du in der 
Testbench deutlicher machen würdest, wann sich die Adresse eigentlich 
ändert. Mach aus deinem

raddr_tb <= k;

mal ein

raddr_tb <= k after 200 ns;

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]
  • [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.