mikrocontroller.net

Forum: FPGA, VHDL & Co. Bildverarbeitung mit FPGA


Autor: Markus Red_corner04 (markus-red_corner04)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

Ich werde ab Oktober eine Diplomarbeit schreiben und befinde mich
derzeit schonmal in der Recherche- Phase. Hier mal ein kurzer Überblick
zu meinem Thema:
Es soll ein Bildmustergenerator mittels FPGA realisiert werden. Der
grobe Ablauf mal im Überblick:
Ein Bitmap- File soll in einem Speicher eingelesen werden. Anschließend
sollen die Daten im FPGA etwas manipuliert und über eine VGA-
Schnittstelle ausgegeben werden.

Bereits jetzt stellen sich mir einige grundlegende Fragen:

1) Wie kann ich ein Bitmap- File mittels VHDL in das RAM des FPGA
einlesen?

2) Welche Kenntnisse benötige ich über den BMP- Standard ?

3) Wie organisiere ich mir am einfachsten den Speicher auf dem FPGA ?

4) Wie erstelle ich aus den Bilddaten schließlich einmal das VGA-
Format für die Ausgabe ?

5) Wie läuft die Ansteuerung der VGA- Schnitstelle ab ?

Und nun meine Bitte an Euch: Wer hat sich schonmal mit einem ähnlichem
Thema beschäftigt und kann mir u.U. wertvolle Tipps oder vielleicht
sogar mit VHDL- Code weiterhelfen? Besonders hilfreich wären mir Tipps
zum Einlesen des Bitmaps- Bildes in den Speicher, wird das doch das
erste zu lösende Problem sein. Zum jetzigen Zeitpunkt sind mir jegliche
Ratschläge hilfreich. Gerne kann ich Euch auch noch genauere
Informationen über mein Thema geben.

Autor: Henrik K. (henrik)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin zwar noch nicht soweit wie du, aber ein paar Anregungen versuche
ich mal zu geben. Ansonsten sollen mich die Profis hier bitte
korrigieren.

Zu 1) Verstehe ich nicht ganz, willst du zur Entwicklungszeit die Datei
schon reinladen? Denke nicht, deshalb solltest du dir zuerst eine
Schnittstelle überlegen wie du die Daten im System mit dem FPGA
einlesen kannst. Da würde sich eine Schnittstelle zum PC (RS232 , USB)
anbieten, die vom einem MC verwaltet wird, der deinen FPGA (oder dessen
Speicher) "füttert" wenn Daten kommen.
Wenn du das BMP-Format im PC demontierst (über Standartbefehle kann du
ja die Farb.inf. einzelner Pixel abfragen, wenn du das Bild z.B. in
eine Canvas-Komponente geladen hast; damit ergibt sich dann auch die
Möglichkeit jpg und gif ... zu laden => Kenntnisse über das Format
brauchst du nicht!) und nur die Pixelposition samt Farbinformation
rüber schickst, kannst du dir das im FPGA sparen.

Für den Speicher könnte man ein Ram und einen Flash nehmen. Der Flash
soll dazu dienen, Muster abspeichern zu können (nach dem Ausschalten),
sodass nicht für jede Anwendung deines Gerätes ein PC notwendig ist.
Wenn dieser beim Lesen schnell genung ist, kannst du dir den Ram
schenken. Einen grösseren Ram im FPGA selbst programmiern tut man
nicht; das ist Platzverschwendung. Da nimmt man besser ein externes Ram
oder einen FPGA der bereits genügend Ramzellen fest integriert hat
(gibts glaube ich nicht so oft).

Zu 4) (Auch nicht ganz klar was gemeint ist) Angenommen dein
(Teil-)Bild ist 45x100 Pixel gross und das ausgegebene Signal hat eine
Auflösung von 200 Pixel pro horizontaler Linie (nur mal als Beispiel),
dann sind Pixel 0 bis 44 die ersten 45 horizontalen Pixel aus dem Bild,
Pixel 45 des erzeugten Signals ist wieder Pixel 0 aus den Bild; Pixeln
89 des erz. Sig. ist wieder Pixel 44 des Bildes etc. (der Rest wird
nicht verwendet, also abgeschnitten). So reihst du dein Teilbild
aneinender. Das ließe sich wohl mit zwei Zähler implementieren, die als
max. Wert die Länge bzw. Breite des Testbildes minus 1 haben.
So kommst du der Reihe nach an die Pixel des zu erz. Signals.

Zum Thema VGA-Schnittstelle wurde hier schon einiges gemacht. Einfach
mal Forumssuche verwenden. Soweit ich weiss hat ein Nutzer namens Hagen
hier schon einmal eine Art Grafikkarte auf einem CPLD programmiert.
Daraus ließe sich wahrscheinlich einiges ableiten.

Soweit die Anregungen.
Hoffe mal da ist nicht zuviel Schrott drin.

Gruss Henrik

Autor: Markus Red_corner04 (markus-red_corner04)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zu 1) Klar so war dasvon mir schon geplant. Die DAten werden über eine
Schnittstelle geladen.
Dein Vorschlag zum BMP- Format klingt recht gut. Kennst du die
Standardbefehle und was ist eine Canvas- Komponente? Ich hätte mir halt
sonst das Bild über eine C oder C++- Routine eben zuerst demontiert.


Zur VGA- Geschichte. Danke für deine Ausführungen und nach dem Nutzer
Hagen werde ich dann mal suchen...

Gruß
Markus

Autor: Sven Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin...

Canvas ist AFAIK eine Javaklasse die recht komfortabel den Zugriff auf
Bilddaten erlaubt. Also zumindestens gibts in Java diese Klasse, ob die
jetzt gemeint war ist ne andere Frage.

Wie groß soll denn die dargestellte Grafik sein? Ungekehrt: auf welchem
FPGA soll das stattfinden? Kann ja nicht alles sein was der Käfer machen
soll.

Kleiner Tip: Xilinx Spartan3 Eval-Board. Billig, komplett mit VGA
Ausgang zum basteln.

--
 Sven Johannes

Autor: Henrik K. (henrik)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Canvas ist ein Basisklasse von Image; eine Basisklasse für alle Arten
von Grafiken, so ist es jedenfalls in Delphi. War sehr praktisch
anzuwenden um Bilder zu manipulieren, da es, wie schon gesagt, in Image
eine Load-Funktion gab, die nahezu alle Grafikformate importieren
konnte. Mit den Standartfunktionen von Canvas konnte man dann alles
machen. Wie das unter C++ heisst weiss ich nicht. Die Standartbefehle
bezogen sich auf Pixelmanipulation, das Zeichen von Rechtecken,
Kreisen, Linien  etc..

In Delphi ginge das ungefähr so:


bool procedure senden();

var hohe, breite: integer;
var Farbe: TColor; // TColor besteht aus 3 Byte, für jede Farbe also
256 Abstufungen
var Wert: Byte;

begin

from(hohe=0 to Image1.ClientHeight) do
from (breite=0 to Image1.ClientWidth) do
begin
Farbe:=Image1.Canvas.Pixels[hohe, breite]; //Lese Farbe des Pixels
Wert:=Bearbeite(Farbe); // hier musst du den Wert von TColor deinen
Vorstellungen anpassen
Sende(hohe);   // Positionsangaben
Sende(breite);
Sende(Wert) // an deinen MC
end;

end;

(habe lange nicht mehr Delphi programmiert; nur um Schema zu
verdeutlichen)

Gruss Henrik

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Markus
kommt das Bitmap-File vom PC ? Für das Laden ins FPGA / RAM
gäbe es X Möglichkeiten, da musst Du sicher überlegen, was
für die Anwendung am besten wäre.

meine erste Idee wäre :
simplen UART ins FPGA einbauen oder FT232 / FT245 verwenden
und das ganze mit dem PC verbinden. Wenn genügend Block-RAMs
im FPGA sind (wieviel Speicher brauchst Du ?), dann die
Daten direkt im FPGA speichern, ansonsten externen Speicher
verwenden. Speicher im FPGA gibts bis > 10 MBits.

Wenns etwas anspruchsvoller sein soll :
Flash-Karte ans FPGA stöpseln, MMC oder sonstwas und von dort
die Daten einlesen.
Wer konfiguriert denn das FPGA ? soll das ein Config-PROM machen
oder ein Mikrocontroller oder der PC ?
Über einen FT245 von FTDI könntest Du wahrscheinlich das FPGA
vom PC aus konfigurieren und danach auch Daten rüberschicken.

Oder soll das ganze als Stand-Alone laufen können ?
Fragen über Fragen ...

Autor: Markus Red_corner04 (markus-red_corner04)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@FPGA- User

zu deinen Fragen, soweit sie jetzt schon beantwortbar sind. Für das
Laden ins FPGA/RAM habe ich mir vorerst auch erstmal einen simplen UART
vorgestellt. Was den Speicherplatz anbelangt, so gehts vorerst nur mal
um Demonstrationszwecke, sprich die Speicher auf dem FPGA sollten
vorerst reichen. Im weiteren Verlauf wäre natürlich die Variante mit
Flash- Karten oder MMC schon sehr interessant. Hier ist sicher die
Frage, ob das dann jetzt für die Diplomarbeit nicht zu umfangreich wird
und ich nachher zu viele offene Baustellen habe.
ZUr Konfiguartion: Da bin ich ehrlich gesagt auch noch bischen am
überlegen, was das beste ist. Im Endzustand, sicher nach der
Diplomarbeit, ist es schon angedacht das ganze mal als Stand- Alone
laufen zu lassen. Ziel ist es ja im Prinzip, beispielsweise auf Messen
ein einfaches Demonstrationsobjekt zum vielfältigen Einsatz von FPGA's
zu zeigen. Von demher wäre wohl ratsam, die Konfiguration mittels
Mikrocontroller zu realisieren. Lass mich da aber auch gerne eines
besseren belehren.

Autor: Tobias Danz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Markus,

kannsz du mir sagen, wo du deine Diplomarbeit schreibst? Ich habe
nämlich ein ähnliches Thema in meinem Praxissemester gehabt und bin an
der fehlenden Unterstützung in der Firma daran gescheitert? Mich würde
ienfach interessieren, ob du in der selben Firma bist?
Gruß Tobias

Autor: Bodo Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Markus.

Als ehemaliger Entwickler von CCD-Kameras ( da allerdings noch in
C++),LVDS seriell_ausgabe usw.interessiert mich ihr Projekt. Da ich
z.Zt. an einem Projekt für eine 3-D Erfassung und Wiedergabe
arbeite,unter Zuhilfenahme von FPGA's und VHDL der Firmen xxxxx !
koennte ich ihnen vielleicht einige Verfahrensweisen und konkrete
Vorschläge unterbreiten. Sollten sie noch Interesse haben, dann einfach
kurze Mail an mich.

Bodo Mueller

Autor: 123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.