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

Gast #1002776
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.