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.
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.
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.
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.
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....
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.