Ethernet CRC Prüfung - nur gültige Daten in ein FIFO

Gast #1002776
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.
Gast #1002848
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.
Gast #1002876
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.
Gast #1004574
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.
Gast #1011171
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

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