Welche Art von Speicher ermöglicht die meisten parallelen Lese-/Schreibvorgänge pro Taktzyklus in einem FPGA?

Wenn Sie sich eine grundlegende Bewegungserkennung vorstellen, bei der Sie zwei Frames im Speicher gespeichert haben: einen vorherigen 640 x 480-Frame und den aktuellen 640 x 480-Frame, welche Art von Speicher (SRAM, DRAM, SDRAM, DDR SDRAM usw.) würde das paralleleste Lesen/Schreiben ermöglichen Operationen pro Taktzyklus ? Beispielsweise würde die perfekte Lösung das gleichzeitige Lesen von zwei Frames (307.200 x 2 Pixel) in einem Taktzyklus ermöglichen. Was ist der beste Speicher dafür, der im FPGA eingebaute SRAM oder ein externer Chip wie DDR SDRAM? (Im Großen und Ganzen würde ich nach einem FPGA-Entwicklungsboard suchen, das die geringsten Kosten und die geringste Größe mit der größten parallelen Lese-/Schreibfähigkeit aufweist.)

Wirklich? Wenn Sie von 24-Bit-Farbe ausgehen, würde dies 14,74 Mbit pro Taktzyklus erfordern - selbst wenn Sie also DDR verwenden würden, wären 7 Millionen Pins erforderlich! Warum braucht man solche Geschwindigkeiten?
Mit einem High-End-FPGA und einem 64 Bit breiten DDR3-Speicher mit einer Taktfrequenz von 800 MHz können Sie Daten mit etwa 100 Gbit/s übertragen. Das würde also ungefähr 150 uS dauern, um zwei Frames zu kopieren.
Ein Virtex-7 X1140T hat 1880 BlockRAMs mit jeweils 72 Bit Interface -> 135.360 Bit pro Zyklus. Zurück zu normalen Geräten ... Normalerweise würde man schätzen, wie viele MiByte/s ein bestimmter Algorithmus benötigt ...
Virtex-7 oder DDR3 800 MHz fpga sind nicht "kleinste Kosten und Größe". @ user2514676, ich denke, Sie gehen das Problem nicht richtig an. Die meisten Videoanwendungen (nie Bewegungserkennung durchgeführt, aber ich bin mir ziemlich sicher, dass es nicht "speziell" ist) lesen jedes Bildpixel einmal pro Durchgang und halten es so lange im Register / BlockRAM, wie es für den Algorithmus erforderlich ist, was normalerweise eine begrenzte Menge von ist Linie. Daher ist Ihre Anforderung, in jedem Zyklus 1 Pixel schreiben und 2 Pixel lesen zu können, was für 640 x 480 bei 60 fps für jede Speichertechnologie der letzten 15 Jahre erreichbar sein wird.
Du gehst das falsch an. Wenn Ihre Bilder von einer normalen Radarkamera stammen, haben Sie ~30 Bilder pro Sekunde und zB 600.000.000 Taktzyklen pro Sekunde. Daher verarbeiten Sie einen Frame nicht in einem Taktzyklus und sitzen dann für die verbleibenden Millionen von Taktzyklen bis zum nächsten Frame im Leerlauf. Sie tun dies pixel- oder regionenweise.

Antworten (1)

Dual-Port-Block-RAM und LUT-RAM sind so gut wie unschlagbar, da sie sich auf dem FPGA-Chip befinden und der Zugriff darauf keine I/O-Pins erfordert. Wenn Sie nicht genügend Kapazität im Block-RAM haben, können Sie das Problem mit externem Speicher lösen. QDR SRAM ist dual portiert und hat daher die doppelte Bandbreite von SDRAM, dies kann für einige Anwendungen nützlich sein, obwohl es sehr teuer ist. DDR3-SDRAM ist wahrscheinlich die billigste Option, aber selbst das ist relativ langsam im Vergleich zu dem, was Sie mit LUT-RAM und Block-RAM machen können.

Ich denke, Sie gehen mit Ihrem Design in die falsche Richtung. Außerdem würde die Logik allein eine absolut gigantische Menge an Platz verbrauchen, wenn Sie so viele Eingänge wirklich verarbeiten müssen, und passt möglicherweise nicht auf die größten heute verfügbaren FPGAs. FPGAs zeichnen sich durch sehr schnelle Pipeline-Verarbeitungsvorgänge aus. Sie sollten herausfinden, wie viele Pixel pro Sekunde Sie verarbeiten müssen (640 x 480 x fps) und dann herausfinden, wie Sie Ihren Bildverarbeitungsalgorithmus implementieren, um dieses Leistungsniveau zu erreichen. Im Allgemeinen besteht die Idee darin, eine kleine Anzahl von Pixeln pro Taktzyklus einzulesen und sie dann in geordneter Weise zu verarbeiten.