Xilinx Built-in FIFO

#5737405
Lesenswert?

Hallo,

im FIFO-IP-Core kann man einstellen wann der Core sagt er sei voll. Wie 
im Bildchen ist der derzeit eingestellt und ich habe dazu folgende 
Frage:

Wenn der "Füllstand" größer ist als 122907, dann wir mit ein full 
ausgegeben, aber es ist ja noch Platz. Kann ich trotzdem solange weiter 
schreiben bis der tatsächlich voll ist oder werden keine neuen Werte 
angenommen sobald das full Flag ausgegeben wird?

Danke!
Angehängte Dateien:
Gast #5737455
Lesenswert?

Gustl B. schrieb:

> Kann ich trotzdem solange weiter
> schreiben bis der tatsächlich voll ist oder werden keine neuen Werte
> angenommen sobald das full Flag ausgegeben wird?

Ohne das jetzt für Xilinx und für diese Spezielle Fifo dediziert zu 
kennen, üblicherweise kann man immer in eine FIFO schreiben, auch wenn 
sie übervoll ist. Dann wird eben das älteste Datum überschrieben.
#5737470
Lesenswert?

Digikundler schrieb:
> Ohne das jetzt für Xilinx und für diese Spezielle Fifo dediziert zu
> kennen, üblicherweise kann man immer in eine FIFO schreiben, auch wenn
> sie übervoll ist. Dann wird eben das älteste Datum überschrieben.

Davon würde ich jetzt eher nicht ausgehen. Die meisten FIFOs dürften 
eher den Write-Response aussetzen, bis wirklich geschrieben wurde.

Das prog_full wird üblicherweise ein reines Info-Signal sein. Der FIFO 
verhält sich trotzdem normal, als gäbe es dieses Signal nicht. Ebenso 
beim prog_empty.

Diese Signale dienen üblicherweise dazu, den FIFO nicht bei einer freien 
Zelle direkt wieder zu füllen, sondern damit zu warten, bis x Zellen 
frei sind. Falls Bursts günstiger sind als einzelne Zugriffe.
Gast #5737477
Lesenswert?

Samuel C. schrieb:
> Davon würde ich jetzt eher nicht ausgehen. Die meisten FIFOs dürften
> eher den Write-Response aussetzen, bis wirklich geschrieben wurde.

Warum?
Der Fifo ist es doch Titte welches Datum verloren geht; wer seine Daten 
nicht abholt hat eben Pech gehabt. Und FIFO's zum synchronisieren über 
verschiedene Clock Domains, vermeidet mensch "grenzüberschreitende" 
Signale so weit wie möglich.
(Firma: www.elpra.de) Persönliche Seite #5737506
Lesenswert?

Ich verwende den FIFO Generator normalerweise nie sondern verwende die 
Unimacro Library von Xilinx. Dann hat man doch ein paar mehr Freiheiten, 
allerdings auch mehr Aufgaben wie das Reset und Enable Handling.

Ich schaetze auch mal, dass das am Ende nicht das Full Flag ist, sondern 
das Almost Full Flag. Das verwendet man praktisch wie ein Full Flag, hat 
jedoch die Gewissheit, dass noch ein paar Daten ins FIFO passen bevor es 
ueberlaeuft.

Eine gaengige Anwendung ist z.B. wenn ich einen Datenstream aus einem 
DDR Memory anfordere und ich Zeit brauche den Stream sauber zu 
terminieren. Das geht nicht immer abrupt (z.B. weil der Speicher Arbietr 
das nicht zulaesst) und so vermeide ich den Verlust von "Nachzuegler" 
Daten.

Meine Empfehlung: Generiere mal die FIFO Core Sourcen und schau mal an 
wie das FIFO instanziert wird. Wahrscheinlich wird mit dem Full Flag das 
Almost Full Flag verknuepft, das laesst sich super easy rausfinden und 
dann hast du auch Gewissheit.
Gast #5737507
Lesenswert?

Samuel C. schrieb:
> Weil das nicht-deterministisches Verhalten erzeugen würde, das in den
> meisten Anwendungen unerwünscht sein dürfte.

Andersrum ,also die FIFO blockiert write, ist es genauso 
undeterministisch…

Ich sag der Fifo Schreib! und sie tuts nicht ;-( ..
--
Hab mal a bisserl bei Xilinx recherchiert:

"Conceptually, a FIFO always behaves like a shift register, but with 
independent control of write and read operation."

-> schreiben geht immer, weils lesen nicht interessiert ("independent 
control of write and read ")

", the FULL flag tells the user that no more write operation should be 
started."


nach:
https://forums.xilinx.com/t5/PLD-Blog-Archived/FIFOs-A-Tutorial-Description/ba-p/16959
#5737515
Lesenswert?

Der Guide für den FIFO Generator 
(https://www.xilinx.com/support/documentation/ip_documentation/fifo_generator/v13_1/pg057-fifo-generator.pdf) 
wiederum sagt, dass ein write bei einem vollen FIFO ignoriert wird und 
die Inhalte nicht zerstört (S.22).

Das wäre auch das von mir im Normalfall gewünschte Verhalten. Dann muss 
ich mich darum nicht selbst kümmern.
Gast #5737532
Lesenswert?

Samuel C. schrieb:
> Der Guide für den FIFO Generator
> 
(https://www.xilinx.com/support/documentation/ip_documentation/fifo_generator/v13_1/pg057-fifo-generator.pdf)
> wiederum sagt, dass ein write bei einem vollen FIFO ignoriert wird und
> die Inhalte nicht zerstört (S.22).

Ah, wieder was gelernt.

>Exakt, aber was bedeutet voll? Dass das Flag das sagt, oder dass er
>wirklich voll ist?

irgendwo schreibt xilinx das das flag resp der zugrundeliegende 
write_counter "pessemistisch" reagiert, es kann also sein das als voll 
bezeichnet wird, obwohl gerade Platz frei geworden ist:

"Write data count (wr_data_count) pessimistically reports the number of 
words written into the FIFO. The count is guaranteed to never 
under-report the number of words in the FIFO (although it may 
temporarily over-report the number of words present) to ensure that you 
never overflow the FIFO"
Gast #5737579
Lesenswert?

Das Full-Flag wird ja üblicherweise gebildet, wenn der Schreibpointer 
eins unter dem Lesepointer ist.
Bei einem asynchronen FIFO werden die Pointer in verschiedenen 
Clock-Domains verweltet. Die Übertragung des Lesepointers in die 
Schreibdomain dauert ein paar Takte. Daher ist das Full-Flag nur 
sinnvoll auszuwerten, wenn man langsam in den FIFO schriebt.
IMHO kann man den Abstand der Pointer beim Almost-Full-Flag einstellen. 
Das ist für schnelle Burstartige Zugriffe sinnvoll.

Duke

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