Forum: FPGA, VHDL & Co. Ethernet CRC Prüfung - nur gültige Daten in ein FIFO


von bati (Gast)


Lesenswert?

Hallo!

Ein empfangener Ethernetframe soll byteweise in ein FIFO geschrieben 
werden und anschließend sofort abrufbar sein.
Jetzt habe ich aber das Problem, falls die CRC Prüfung - die ja 
notwendigerweise am Ende erfolgt - erfolglos war, dass ungültige Daten 
im FIFO stehen. Wie kann ich diese "ungültig" machen oder wieder 
entfernen. Wie wird soetwas implementiert? Ein temporärer Speicher 
kostet ja viele Taktzyklen und in einem FIFO komme ich ja auch nicht an 
die "hinteren" Bytes ran. Wie könnte man das umsetzen?

Vielen Dank im Voraus.

von Christian R. (supachris)


Lesenswert?

Direkt über den FIFO wird´s nicht gehn, das musst du vorher oder nachher 
machen. Wenn du es mit Pipelining machst, hast du nur am Anfang eine 
Latenzzeit, der Durchsatz bleibt gleich.

von Mathi (Gast)


Lesenswert?

Es kommt auf Deinen FIFO drauf an. Bei Lattice lassen sich die FIFOs mit 
IPExpress direkt mit einem Read-Pointer Reset generieren. Wenn dieser 
betättigt wird, wird der Lese-Pointer und die Füllstandszähler 
zurückgesetzt. Wenn Du dir selber einen Fifo bauen willst, kannste sowas 
einfügen.

von bati (Gast)


Lesenswert?

Das Problem dabei ist ja, dass ich die FIFOs nicht einfach resetten 
kann, so dass auch die Daten verworfen werden. Habe sie mit dem Xilinx 
CoreGen erstellt. Wenn ich also ein zusätzlichen FIFO davor schalte, 
habe ich immer noch das Problem, dass ungültige Daten vorhanden sind. 
Ich glaube mit diesen FIFOs komme ich nicht weiter.

von Christian R. (supachris)


Lesenswert?

Wenn du immer nur ein Frame im FIFO speicherst, kannst du es doch nach 
fehlgeschlagenem CRC komplett löschen. Gibst du halt das Signal, dass 
was im FIFO ist, erst nach erfolgreichem CRC an die Logik dahinter 
weiter....

von ijuz (Gast)


Lesenswert?

Einfach 2 fifos verwenden, eines fuer die Daten und eines fuer einen 
descriptor in dem laenge und ein crc_valid bit enthalten ist.
Die Daten koennen dann einfach in das fifo geshiftet werden und das 
raushiften beginnt erst wenn der descriptor vorliegt. Je nach valid bit 
fuer das naechste modul oder nach devnull.

@Mathi
Dafuer haben die lattice fifos kein register am output und ein komisches 
Interface. Aber ok, das sind natuerlich nur minimale Probleme gegenueber 
den anderen, wenn man sich auf lattice eingelassen hat.

von SuperWilly (Gast)


Lesenswert?

Hi,

hast du mehrere "Pakete" in einem Fifo stehen, so musst du
dir eine Fifo-Logik überlegen, die in der Lage ist, die 
Schreibzeiger-Position (im Falle einer korrekten Prüfsumme) für die 
Leseseite frei zu geben
bzw. zu löschen (im Falle einer falschen Prüfsumme).
Ich empfehle dir, ein RAM-Template zu verwenden und dir die Zeiger-Logik 
drumherum zu bauen.
Erster Schritt: Eigene "normale" Fifo-Beschreibung überlegen (Xilinx 
bietet hier einige interessante Papers)
Zweiter Schritt: Schreibzeiger- Confirm/Clear Funktion einbauen.
Voraussetzung: 1 Takt

Bei Dual-Clock-Fifos gestaltet sich die Implementierung dieser 
Schreibzeiger-Funktion wesentlich schwieriger ...

Gruß,
SuperWilly

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.