Forum: FPGA, VHDL & Co. Bildverarbeitung mit einem FPGA


von Sebastian Reichert (Gast)


Lesenswert?

Hallo,

laut euren Seiten zu FPGAs und DSPs sind letztere das ideale Werkzeug
um Digitale Signalverarbeitung (und speziell auch Bildverarbeitung)
durchzuführen. Wie gut eignen sich hierzu FPGAs, wenn ich möglichst
schnell (Graustufen-)Bilder, die von einem CCD-Chip kommen, verarbeiten
will(FFT, Mustererkennung, o.ä.)?
Wie sieht es bei den genannten Architekturen hinsichtlich der
Speicherintensität des Prozesses aus?
Grundsätzlich würde ich das ganze natürlich erst mal auf einem PC
testen, aber mir geht es nur mal generell um die Realisierbarkeit.
vielen Dank schon im Voraus..

Gruß
Sebastian

von Jürgen Schuhmacher (Gast)


Lesenswert?

Bildaufbereitung auf FPGA-Basis hat dann Vorteile, wenn man rudimentäre
Operationen (Glättung, Kantendetektion, LineInterplation etc.)
betreiben möchte. Zudem hat man dann Vorteil, wenn man parallel an den
Datenstrom des Chips drankkommt. Eine Grauinterpolation von virtuellen
Zeilen- oder die Auswertung bestimter CC-Typen mit integrierter
Interpolation durch Mehrfachabtastung lässt sich in einem FPGA
Punktweise parallelisieren: Für eine Überabtastung von 8 je Zeile hätte
man gerade einen Registerbedarf von z.B. 8x2048 LE-Zellen. Je nach Platz
könnte man die Interpolation dann auf z.B. 16 Punkte je Zeile
beschränken und benötigte nur 64 kleine Rechenwerke mit einem
Zeitbedarf von 16 x 8 x 8 Clks + Latenz. Auf diese Weise stünde das
Ergebnis eine Bildzeile später zur Verfügung. Das ist mit einem DSP
unmöglich. Der müsste jeden der 8x8=64 Virtuellen Punkte für jeden
Bildpunkt nacheinander rechnen.

Betrachtet man aber die reine Rechenleistung im 1:1-Vergleich, dann ist
der DSP architektonisch meist überlegen, besonders bei aufwändigen
Algorithmen. Zudem sind komplexe Oprationen in C sehr rasch zu
formulieren.

von Kest (Gast)


Lesenswert?

Man kann alles in einem FPGA unterbringen, egal, wie kompliziert alles
ist. Die Vorteile eines FPGA (Designs) ist, dass man die
Speicherbandbreite so auslegen kann, wie man lustig ist bzw. wie man
braucht.

Ich sitze gerade an einem Bildverarbeitungsdesign im FPGA
(Konzeptphase) und ich kann berichten, dass ich, wie Jürgen schon
gesagt hat, volle Kontrolle habe - ein DSP würde sowas nie im leben
schaffen (2 GPixel/s). So lange man nur kleine Bilder und nicht
Echtzeit hat, ist alles sowieso kein Problem.

Alles in einem würde ich sagen, dass ein FPGA nur in Verbindung mit
schnellem Speicher (mehrere Buffer) gute Dienste leistet.

Kest

von Sebastian Reichert (Gast)


Lesenswert?

Danke für die Antworten.
Bei deiner Antwort habe ich nicht alles 100%ig verstanden, Jürgen, aber
ich schätze mal eine Kreuzkorrelation von 2 Graustufenbildern fällt
nicht unter eine "rudimentäre Rechenoperation" oder?

von Jürgen Schuhmacher (Gast)


Lesenswert?

Doch: Solche Aspekte wie "Pixel(t+1) heller als Pixel(t)" und "Pixel
(x-1) < Pixel (x)" können für alle Pixel in der pipeline parallel
prozessiert und mit einem clock ausgewertet werden. Die
Grauwertinterpolatin wiederum läuft ja auch nur über Additionen und
Teiler, wobei man hier schlauerweise natürlich 2,4 oder wie oben 8
nimmt: Während ein DSP bei Teilen durch 8 nämlich noch 3mal "rollen"
muss, braucht das umverdrahte Ergebnis im FPGA sogar überhauptkeine
Zeiz zum Teilen!

Die komplizierten Dinge sind REAL-Multiplaktionen und
Filteroperationen, die zudem noch auf den finalen Datenstrom angewendet
werden - also eindimensional laufen. Diese im FPGA zu machen, bringt
erstens nicht mehr viel, kostet aber unendliche Implementierungzeit.

Wie gesagt, es kommt darauf an, ob und wie Du an den Chip drankkommst:
Bildverarbeitung per FPGA, das aus einer ferigen Kamera mit ADC
gespeist wird, also nur einen sequentiellen Datenstrom erhält ist nicht
mehr so effektiv.

von Sebastian Reichert (Gast)


Lesenswert?

Also ich werde leider aus den ganzen Infos noch nicht ganz schlau. Ich
bin noch Laie auf dem Gebiet und deinen ersten Beitrag mit den
Zahlenbeispielen konnte ich nicht wirklich nachvollziehen, Jürgen.
Für mich widerspricht sich hier auch noch vieles; einerseits sagt ihr,
FPGAs sind sehr gut geeignet wenn die Daten parallel in den FPGA
gespeist werden können und auch in der Rubrik "DSP" auf dieser Seite
wird mal erwähnt, dass FPGAs noch mehr DSP-Rechenleistung bringen, weil
sie mehr MAC Befehle in einem Zyklus verarbeiten können.
Wenn ich aber auf Herstellerseiten recherchiere, sind DSPs für
Signalverarbeitung (u.a. Bildverarbeitung) das optimale, und FPGAs
können zu Optimierungszwecken mit ins System integriert werden.
Viele Fragen und Anliegen auf einmal - ich verlange jetzt auch nicht
eine umfangreiche Lösung, das is weng viel verlangt, aber vllt kennt
jemand z.B. zufällig eine Quelle wo DSPs und FPGAs genauer
gegenübergestellt werden - das technische Grundverständnis habe ich
eigentlich aus meinem Studium schon..


Gruß
Sebastian

von Jürgen Schuhmacher (Gast)


Lesenswert?

Sagen wir es mal so: Grundsaätzlich sind FPGAs deutlich teuer, wenn man
eine definierte Gesamtrechenleistung eines DSPs realisieren will. Hat
man aber eine Minimalzeitanforderung, die von einem FPGA durch
teilweise ECHTES paralleles Arbeiten leichter erfüllt werden kann, dann
müsste man, um zum selben Ergebnis zu kommen, einen extrem
leistungsfähigen DSP heranziehen oder mehrere parallel schalten, was
wiederum deutlich teuer wäre.

von Klaus Falser (Gast)


Lesenswert?

Vielleicht hilft Dir weiter, wenn Du Dir überlegst, daß ein FPGA nur
dann richtig schnell sein kann, wenn alle zu verarbeitenden Daten im
FPGA Platz haben.
Nur dann kann das FPGA schnell darauf zugreifen.
Wenn Dein Algorithmus z.B. nur eine Zeile bearbeitet, dann geht das
locker.
Bei einer 2-dimensionale Korrelation über das ganze Bild brauchst Du
z.B. 800 x 600 x 8Bit/Pixel = 3.840.000 Bits an internem Speicher.
Das wird dann schon ein teureres FPGA.
Du kannst natürlich ein externes RAM an das FPGA anschließen, aber dann
werden wahrscheinlich zu Zugriffe auf die Daten die
Verarbeitungsgeschwindigkeit bestimmen und Du gewinnst nichts gegenüber
einem FPGA.

Grüße
Klaus

von Klaus Falser (Gast)


Lesenswert?

Muß natürlich heißen : Du gewinnst nichts gegenüber
einem DSP.

Klaus

von Jürgen Schuhmacher (Gast)


Lesenswert?

Stimmt im Prinzip, aber ein schnelles RAM läuft mit mindestens dem
vollen FPGA-Takt mit und ist nicht wirklich langsamer als die block-RAM
Zellen im FPGA solange keine zweiter Fremdbus auf dem RAM rumnuckelt!
Zudem könnte man an einen breiten FPGA mit entsprechenden PINs mehrere
RAMs parallel anflanschen und gleichzeitg nutzen, indem man z.B.
Bildbereiche aufteilt und parallel rechnen lässt. Ferner ist eine
ühysikalische RAM-Duplikation dann sinnvoll, wenn man über pipelines
arbeitet und eingehende Daten sofort weiterleiten will: Es entfallen
Read/Write/Adressumschaltungen und wait state Situationen. Sowas haben
wir ja hier. Ferner muss im Brreich Video oft mit umschaltbaren
Shadow-RAMs gearbeitet werden: Mit einem FPGA kann ich sehr leicht und
verlustlos umschalten, ob ich zwei RAMS parallel fülle, alternierend
beschriebe bzw. lese oder im Pendelbetrieb Daten von einem ins andere
schaufele. All das geht mit einem DSP oder MC mit einem Daten-ADressbus
nicht bzw nur schön brav nacheinander.
Wenn man es trickreich macht, lassen sich sogar langsame RAMS mit
mehreren waitstates so zeitlich versetzt parallelsieren, daß man mit
JEDEM 100MHz FPGA-Takt Adressen für Quell- und Zielrams setzt und den
aktiuell verfügbaren DAten vorheriger Schritte einen
Verarbeitungsschritt in den Rechenstufen antriggert. Die wait states
und Verzögerungen infolge langsamer RAMSs und kombinatorischer- oder
delaybehafteter Rechenstufen tauchen dann nur als Latenz auf. Wenn ein
kompletter Schreib und Lesezyklus dann 10clks benötigt, hätte man bei
einem DSP 10 x Zahl der RAM-Zugriffe. Ein Zyklus von 1Mio Bildpunkten
wären bei einem FPGA dann aber nur rund 1Mio + 10clks!!!!

Das große Problem der FPGAs ist eben nur, daß die interne Hardware für
Multiplikationen etc. sehr begrenzt ist und schon bei sehr wenig
Algebra sofort erschöpft ist.

von Sebastian Reichert (Gast)


Lesenswert?

weiterhin vielen dank für die ganzen antworten ...
was bedeutet der letzte punkt bei dir genau, jürgen?
wo ist der FPGA schneller erschöpft als ein vergleichbarer DSP?
meinst du damit, dass z.B. eine komplizierte multiplikation durchaus
einen ganzen oder mehrere taktzyklen benötigen kann?

Sebastian

von Jürgen Schuhmacher (Gast)


Lesenswert?

Nein, die konventionellen FPGAs haben z.B. eine Anzahl fest
eingebetteter DSP-Einheiten, die vorwiegend als Multiplizierer agieren.
Hat man einige rechenintensive Funktionen zusammen, sind die rasch
verbraucht. Weitere Funktionen werden über Software verdrahtet oder
über Multiplexing, was die Leitstung rapide senkt. Eine FPU eines DSP
z.B. hat da deutlich mehr Reserven.

Was konkret die Multiplikation angeht: Im Prinzip geht das bis zu
höchsten Taktraten innerhalt eines Clocks. Aber stelle dir mal einen
breiten Multiplizierer vor, der intern aus mehreren einzelnen Stufen
realsiert wird: Dort kommen noch Additionen hinzu. Zusammen mit der
Verdrahtung reicht es dann nicht mehr für hohe Taktraten.

Beispiel: Ich habe einen Aufbau vor einer DSP-Einheit, die eine
Amplitudenkorrektur (A = a x k, mit k = 0... 1,0) vornimmt: Die
arbeitet mit 48 Bit Genaugikeit (damit hinten noch 32 Bit rauskommen)
und lässt sich aktuell mit maximal knapp 100 MHz takten. Ich habe jetzt
zwei parallel geschaltet, um auf die Solldatenrate von 160MHz zu
kommen.

Am Besten, Du nimmst Dir mal eine kostenlose Webedition einer
Designsoftware und baust mal ein wenig rum. Die Synthese wirft Dir ja
dann aus, wie schnell die Architektur ist und welche Reserven genutzt
werden.

von Natan (Gast)


Lesenswert?

> mit 48 Bit Genaugikeit (damit hinten noch 32 Bit rauskommen)
> und lässt sich aktuell mit maximal knapp 100 MHz takten.

Auf welchen Chip bezieht sich das?

von D. I. (Gast)


Lesenswert?

Jürgen Schuhmacher schrieb:
> Wie gesagt, es kommt darauf an, ob und wie Du an den Chip drankkommst:
> Bildverarbeitung per FPGA, das aus einer ferigen Kamera mit ADC
> gespeist wird, also nur einen sequentiellen Datenstrom erhält ist nicht
> mehr so effektiv.

Soso, also wenn ich einen Sobelfilter über ein Bild drüberziehe, welches 
ich Pixel für Pixel bekomme muss ich nur warten bis ich die ersten 3 
Zeilen gepuffert habe und dann kann ich ziemlich schnell den Rest 
berechnen ;) oder wenn man wirklich derbe ist versuche ich ein 
systolisches Array zu bauen.

von Natan (Gast)


Lesenswert?

Da Du schon auf einen 3 Jahre alten Beitrag antwortest, hätte ich auch 
eine Frage:

> wenn ich einen Sobelfilter über ein Bild drüberziehe, welches
> ich Pixel für Pixel bekomme muss ich nur warten bis ich die ersten
> 3 Zeilen gepuffert habe
Wie ist Deine Aussage zu verstehen?

von D. I. (Gast)


Lesenswert?

Natan schrieb:
> Da Du schon auf einen 3 Jahre alten Beitrag antwortest, hätte ich auch
> eine Frage:
>
>> wenn ich einen Sobelfilter über ein Bild drüberziehe, welches
>> ich Pixel für Pixel bekomme muss ich nur warten bis ich die ersten
>> 3 Zeilen gepuffert habe
> Wie ist Deine Aussage zu verstehen?

Aufs Datum habe ich nicht geachtet, ich meinte dass es nicht stimmt dass 
man da massiv an Effektivität verliert

von Bildverarbeiter (Gast)


Lesenswert?

Ich habe einen solchen Filter im FPGA laufen und keine Probleme damit. 
Sehr effektiv und nutzvoll. Ich bevorzuge nur noch FPGAs, weil ich so im 
Nachhinein zeitkritische Anwendungen implementieren kann, die ich vorher 
nicht gesehen habe - oder der Kunde nicht gesehen hat. Wenn man eine CPU 
genommen hat, die am Anschlag war, ist Essig.

FPGAs sind einfach flexibler. Man kann schlimmstenfalls sogar noch 
Hardware addieren, indem man z.B. über einige Pins Rechenoperationen 
rausstreamed und extern in einem Zusatz FPGA rechnen lässt.

Das geht mit einem Prozessor nicht.

von Pumpernickel (Gast)


Lesenswert?

D. I. schrieb:
> Jürgen Schuhmacher
>> Bildverarbeitung per FPGA, das aus einer ferigen Kamera mit ADC
>> gespeist wird, also nur einen sequentiellen Datenstrom erhält ist nicht
>> so effektiv
> Soso, also wenn ich einen Sobelfilter über ein Bild drüberziehe, welches
> ich Pixel für Pixel bekomme muss ich nur warten bis ich die ersten 3
> Zeilen gepuffert habe und dann kann ich ziemlich schnell den Rest
Genau das ist der Vorteil des FPGA, dass er die Daten in Echtzeit 
speichern und verarbeiten kann, während der DSP das nicht kann. Ich 
würde daher auch sagen, dass der FPGA diesbezüglich durchaus effektiv 
ist, gerade bei sequenziellem Datenstrom.

In dem Zusammenhang noch eine Anmerkung von mir (wenn hier schon die 
Grundlagen erörtert werden):

Inzwischen (der Beitrag stammt ja von 2006) gibt es für FPGAs zahlreiche 
Cores mit BV-Algorithmen und Vorlagen, sowie Filtern und Convertern, die 
man einfach instanziieren kann, um sie zu verwenden. Ich kenne kaum noch 
eine BV-Applikation, die Bilder ohne FPGAs generiert oder prozessiert.

von J. S. (engineer) Benutzerseite


Lesenswert?

Meine damalige Aussage "nicht so effektiv" bezog sich nicht auf den 
Vergleich FPGA/DSP sondern auf die Art, wie der Sensor angebunden ist: 
Üblicherweise wird bei "normalen Sensoren" Pixel für Pixel ausgegeben, 
wie ein Monitor sie benötigt, um das Bild direkt darzustellen.

Leistungsstarke Sensoren mit hoher Auflösung haben dagegen oft mehrere 
parallel Ausgänge mit denen die Pixel gruppenweise ausgegeben werden 
können Die zu prozessieren gelingt nur mit FPGAs effektiv und gegenüber 
dem eindimensionalen Ausgang dann auch richtig schnell.

Im eindimensionalen Fall packen das Video-DSPs auch noch, wenn sie 
schnell genug arbeiten - sie sind ja im Vergleich viel höher getaktet, 
als FPGAs. Die Frage ist halt immer, was "Echtzeit" im konkreten Fall 
heisst.

von The Expert (Gast)


Lesenswert?

Pumpernickel schrieb:
> Inzwischen (der Beitrag stammt ja von 2006) gibt es für FPGAs zahlreiche
> Cores mit BV-Algorithmen und Vorlagen, sowie Filtern und Convertern, die
> man einfach instanziieren kann, um sie zu verwenden.
Die gab es damals auch schon :-)
Manche tun immer so, als seien FPGAs etwas Neues und letzte Woche erst 
erfunden worden. Schon vor 10 Jahren haben wir Bildverarbeitung mit 
FPGAs gemacht und vor 5 Jahren mit partiell rekonfigurierbaren V2Pro.

> Ich kenne kaum noch eine BV-Applikation, die Bilder ohne FPGAs
> generiert oder prozessiert.
Da kenne ich aber einige! FPGAs haben ihr einsatzgebiet, aber DSPs 
werden immer schneller und besetzten immer mehr Applikationen, die einst 
FPGAs vorbehalten waren. Schon mit einem schnuddeligen 500MHz-Blackfin 
hat man RAM und VideoDSP-Power genug, um rudimentäre Bildprozessierung 
zu betreiben.

von Tobias (. (Gast)


Lesenswert?

Ich möchte in die Expertenrunde fragen, wie sich das heute entwickelt, 
hat. Gegenüber der Aussage zuletzt, sind wieder 5 Jahren vergangen.

Wurden die FPGAs durch Video-DSPs wirklich so verdrängt, wie The Expert 
es postuliert?

The Expert schrieb:
> aber DSPs werden immer schneller und besetzten immer mehr
> Applikationen, die einst FPGAs vorbehalten waren.

Ich habe nicht den Eindruck. Eher im Gegenteil.

von S. R. (svenska)


Lesenswert?

Hängt von der Anwendung ab.

In Smartphones sind meines Wissens keine FPGAs drin, sondern spezielle 
DSPs, welche große Datenmengen von den Kamerasensoren nehmen, sehr viel 
Bildaufbereitung damit treiben und im Zweifelsfall auch 
codieren/komprimieren. Dazu kommen neuerdings "Neuroblöcke", mit denen 
Gesichts- oder Objekterkennung gemacht werden.

Wie das im Rest der Bilder-und-Videowelt aussieht, weiß ich nicht.

Ich sehe aber einiges an Bastelkram mit Raspberry Pi und vergleichbaren 
Systemen.

: Bearbeitet durch User
von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Tobias N. schrieb:
> Wurden die FPGAs durch Video-DSPs wirklich so verdrängt, wie The Expert
> es postuliert?

Immer haeufiger kommen MPSoCs Systeme mit FPGA, GPU und CPU (z.B. von 
Xilinx die Zynq Ultrascale+) zum Einsatz. Damit lassen sich dann 
wirklich komplexe Dinge anstellen und man kann je nach Anforderung des 
entsprechenden Video Algorithmus diesen in dem einen oder anderen 
Teilsystem laufen lassen.

Diese Teile sind jedoch relativ teuer, gross und "hungrig". Im Broadcast 
Bereich und der Medizintechnik (z.B. Endoskopie) sind diese FPGAs 
(besser gesagt MPSoCs) genau das richtige. Kleine Stueckzahlen und hohe 
Verkaufspreise rechtfertigen da eigentlich immer deren Verwendung 
(sofern man auch auf die Processing Power angewiesen ist).

Diese Entwicklung sieht man auch im SDR Bereich. Mittlerweile bietet 
Xilinx die RFSoCs an, welche sauschnelle ADCs und DACs beinhalten. Man 
kann momentan wirkluch den Trend erkennen, dass man versucht moeglichst 
viele Funktionen in einen Chip zu bekommen (was ich als Entwickler 
natuerlich klasse finde :-)).

Liegt unter anderem auch darin, dass die Strukturgroessen im Silizium 
immer kleiner werden, die Chips aber nicht wirklich mitziehen koennen 
(hauptsaechlich wegen dem Wire Bonding fuer die Highspeed 
Schnittstellen). Anstatt jetzt immer mehr und mehr Logikzellen in die 
Chips zu packen, werden neue Funktionen in Hardware gegossen, z.B. 
H.264/H.265 Decoder/Encoder (wobei nur ein Teil des Codings in Hardware 
ist, ein Teil ist immer noch in FPGA Logik, inkl. die Anbindung zum 
SDRAM).

: Bearbeitet durch User
von Strubi (Gast)


Lesenswert?

S. R. schrieb:
> In Smartphones sind meines Wissens keine FPGAs drin, sondern spezielle

Einen ICE40 findest du noch öfters...der macht aber kaum BV, eher 
Signalwandlung.

Der Trend geht neben der oben erwähnten komplexen SoCs wohl auch 
vermehrt Richtung GPU und eigendesignte Spezial-DSP-Coprozessoren, 
zumindest beim massgeschneiderter BV, seit in einigen progressiveren 
Domänen nicht mehr nach reiner HW versus SW-Schule entwickelt wird. So 
ein paar Fernost-Firmen sind da recht pfiffig in der Entwicklung von 
Video-Encodern.

Da time to market beim DSP-Ansatz doch deutlich geringer ist und die 
Sache zudem recht flexibel ist ('mal eben zur Laufzeit Mikrocode 
updaten'), ist der klassische DSP sicher nicht vom Tisch, er findet sich 
allenfalls einfach im FPGA wieder. Wird aber kaum einer gross so 
anpreisen, da Developer-Communities Aufwand generieren..

von J. S. (engineer) Benutzerseite


Lesenswert?

Tobias N. schrieb:
> Wurden die FPGAs durch Video-DSPs wirklich so verdrängt, wie The Expert
> es postuliert?

Bei bestimmten Lösungen ist das aus Kostengründen durchaus der Fall. Man 
kommt aber heute um so rascher an Bandbreitenprobleme. FPGAs sind daher 
zumindest immer noch nötig, wenn es um das Anbinden von schnellen 
Bild-Sensoren und -Wandlern geht. Auch zwischen DSP und FPGA gibt es 
limits. Die Lösung bringen SoC-Systeme, in denen die CPUs zwar nicht so 
schnell sind wie externe DSPs, aber eine breitbandige Anbindung zum 
FPGA-Teil hin haben, die sich so zwischen 2 Bausteinen schlecht oder gar 
nicht realisieren ließe.

Bringt man nun noch die Initiative ins Spiel, dass "normale" PC-CPUs 
FPGA-Strukturen bekommen, würde ich den Markt so darstellen, dass die 3 
Bausteinfamilien aufeinander zu wachsen. Wahrscheinlich gibt es in 
einigen Jahren keinen strukturellen Unterschied mehr zwischen 
klassischen CPUs und FPGA-basierten SoC-Systemen. Es gibt nur noch 
Unterschiede im Ausbau bez. internem RAM, Anschlussfähigkeit von 
Speicher (= Anzahl interne Controller) und integrierter Peripherie. Das 
übliche Zeug wie USB, Ethernet, LVDS-SERDES werden die alle serienmäßig 
haben.

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.