Forum: FPGA, VHDL & Co. Wie kann man komplexere Algorithmen in VHDL implementieren?


von Mac81 (Gast)


Lesenswert?

Hallo zusammen!

Ich plane im Rahmen meiner Diplomarbeit einen etwas komplexeren 
Algorithums aus der Bildverarbeitung in VHDL zu implementieren. Bisher 
habe ich in VHDL nur einfache Komponenten implementiert.

Zu diesem Zweck, möchte ich mich erstmal mit der grundsätzlichen 
Herangehensweise vertraut machen. Wie kann man z. B. einen in C oder 
Matlab gegeben Algorithmus in VHDL effizient implementieren? VHDL ist ja 
doch deutlich mehr low-level. Wie greife ich da z. B. korrekt auf den 
RAM zu?

Gibt es zu diesem Thema gute Literatur oder Webseiten? Zu detailliert 
brauche es auch nicht zu sein; eine Webseite, die einen groben Überblick 
liefert, würde mir für den Anfang auch schon mal reichen.

Das einzige Buch zu diesem Thema, das ich bisher gefunden habe, ist 
"VHDL-Synthese" von Reichardt und Schwarz.

Ich bedanke mich für hilfreiche Informationen.

Mac

von Maximilian .. (maxpautsch)


Lesenswert?

wenn du die algorithmen in matlab hast, kannst du sie vom hdl-coder 
umsetzen lassen. (http://www.mathworks.com/products/slhdlcoder/ - 
vielleicht hat ja deine uni/fh eine lizenz dafür..)

von Mac81 (Gast)


Lesenswert?

Bzgl. dem HDL-Coder hatte ich neulich schon eine Diskussion geführt mit 
einem Kommilitonen/Kollegen. Ich kann mir irgenwie kaum vorstellen, dass 
da sinnvoller VHDL-Code bei rauskommt (zumindest kein effizienter), 
sonst würde das ja jeder so machen.

Und nein: die 15.000 Dollar für die Lizenz hat mein Institut nicht 
übrig. ;-)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> kaum vorstellen, dass da sinnvoller VHDL-Code bei rauskommt
> (zumindest kein effizienter)
Was ist Effizienz? Nur die Betrachtung benötigter Ressourcen?
Ist es nicht auch effizient, die Design-Phase abzukürzen? Denn
wenn ich mit meinem Produkt 1/4 Jahr vor der Konkurrent rauskomme, und 
eine dann schon entsprechende Marktdurchdringung habe, ist das auch 
effizient.

Es ist leider so, dass das Mittelmaß der Standard ist. Und das betrifft 
auch sowas wie Effizienz.

> sonst würde das ja jeder so machen.
> Die 15.000 Dollar für die Lizenz hat mein Institut nicht übrig. ;-)
Evtl. wird das jeder so machen, wenn die Tools bezahlbar werden.
Evtl. würdest auch du es so machen, wenn dein Institut die Tools hätte.

> hatte ich neulich schon eine Diskussion geführt mit einem
> Kommilitonen/Kollegen.
Diese Diskussionen hatte man früher bezüglich der Effizienz Assembler 
vs. C (z.B.).
Wenn einer eine Ahnung davon hat ist ein Assemblerprogramm schneller als 
ein compiliertes C-Programm. Allerdings kann man heutzutage kein 
Windows-Programm in Assembler schreiben (wohlgemerkt: ich spreche vom 
Mittelmaß, klar gibt es Spezis, die machen sogar sowas).

Und genauso ist es (wird es kommen) bei FPGAs: die (effiziente) 
Implementierung auf RTL-Ebene tritt in den Schatten. Ins Licht kommt 
eine Hochsprachenbeschreibung (Matlab, C,...) und eine dynamische 
Aufteilung zwischen Software und Hardware.

von nixda (Gast)


Lesenswert?

hi,

als alternative zur vhdl road gibt es auch die moeglichkeit der 
c-synthese. ist evtl. gerade im algorithmenlastigen bereich interessant.

das muesste bei allen grossen mit dabei sein, zb. (ohne preference)

http://www.mentor.com/products/esl/multimedia/catapult_websem.cfm
http://www.cadence.com/products/sd/silicon_compiler/Pages/default.aspx
http://www.bluespec.com
http://www.synplicity.com/products/dsp_solutions.html

btw: fast alle eda hersteller haben "hochschul-programme" oder 
"uni-lizenzen". frag doch mal den hersteller eures vertrauens :-)

mfg

von Maik H. (littlechip)


Lesenswert?

Um was für einen Algorithmus handelt es sich den?

Ich habe mir mal das Buch "Digital Signal Processing with Field 
Programmable Gate Arrays" gekauft und finde das eigentlich ganz gut für 
den Einstieg. (Gibt es idR auch in jeder Unibib).

zum RAM zugriff:
kommt auf deinen FPGA an, bei Xilinx gibt es einen 
MemoryInterfaceGenerator (MIG) der nimmt einem einen Großteil der Arbeit 
ab (einfach mal auf der Xilinx HP suchen, gibt eine Menge PDFs zu dem 
Thema)

von Falk B. (falk)


Lesenswert?

@  Lothar Miller (lkmiller)

>Wenn einer eine Ahnung davon hat ist ein Assemblerprogramm schneller als
>ein compiliertes C-Programm.

Ja, aber . . .

> Allerdings kann man heutzutage kein
>Windows-Programm in Assembler schreiben

Wäre auch vollkommen dämlich.

> (wohlgemerkt: ich spreche vom Mittelmaß,
> klar gibt es Spezis, die machen sogar sowas).

Und was soll dieses Mittelmaßgefasel? Die Dummen und Faulen nehmen C und 
die "echten" Profis Assembler?
C'mon!

Wer Systemprogrammierung in ASM macht hat EINIGE Dinge nicht verstanden 
und verbrennt viel Geld.

>Und genauso ist es (wird es kommen) bei FPGAs: die (effiziente)
>Implementierung auf RTL-Ebene tritt in den Schatten.

Was am Ende aber vollkommen normal und ab einer bestimmten Komplexität 
notwendig ist. Ausserdem bleibt immer noch die Möglichkeit, die 
Bausteine per Hand zu optimieren, quasi den Compiler zu verbessern. Und 
damit erreicht man dann mit der Hochsprache nahezu die 
Leistungsfähigkeit der RTL-Profilösung, allerdings in einem Bruchteil 
der Zeit, mit weniger Detailkenntnis und bei wentlich verbesserter Les- 
und Wartbarkeit.
Und man hat am Ende mehr Leistung und Effizienz.

MFG
Falk

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Man kann auch einen Softcore in den FPGA brennen und das C-Programm für 
diesen compilieren ;)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Und was soll dieses Mittelmaßgefasel?
> Die Dummen und Faulen nehmen C und die "echten" Profis Assembler?
> C'mon!
OK, aber hast du schon mal ein durchschnittliches aktuelles C-Programm 
angeschaut? Wie verheerend umständlich das oft programmiert ist? Weil 
der Programmierer nicht (mehr) weiß, was er da eigentlich tut?
Ich könnte dir da einige Stories von einem BIOS-Hersteller erzählen, der 
nicht weiß und nicht herausfindet, womit sein BIOS in den ersten 20 
Minuten nach dem Booten alle 15 Sekunden Rechenzeit verplempert.

Wie auch immer: es wird immer die Mittelmäßigkeit regieren.
Das ist ganz einfach so (Hoch lebe Gauß ;-)


BTW:
Ich programmiere auch in C.
Und ich kann den Assembleroutput vom Compiler lesen.
Nur so konnte ich z.B. auch schon drei Fehler in Compilern finden:
Tasking 68k, Imagecraft AVR und Intel XScale.

von Falk B. (falk)


Lesenswert?

@  Lothar Miller (lkmiller)

>OK, aber hast du schon mal ein durchschnittliches aktuelles C-Programm
>angeschaut?

Nein.

> Wie verheerend umständlich das oft programmiert ist? Weil
>der Programmierer nicht (mehr) weiß, was er da eigentlich tut?

Kann sein.

>Wie auch immer: es wird immer die Mittelmäßigkeit regieren.
>Das ist ganz einfach so (Hoch lebe Gauß ;-)

???

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

>> Das ist ganz einfach so (Hoch lebe Gauß ;-)
> ???
Na, die Glocke (oder war das Schiller? ;-)
Es gitb wenige Dumme und wenige Genies und viel dazwischen.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Richtig lustig wird es, wenn Ingeneure, die sich zwar mit ihrem 
Fachgebiet sicherlich gut auskennen, die aber programmiertechnisch 
ungeübt sind oder deren Programmierkenntnisse uralt sind, eine 
Berechnung programmieren oder "echten" Programmierern erklären, wie das 
denn gehen soll. Da kommen extrem tolle Sachen bei raus...

von Matthias G. (mgottke)


Lesenswert?

Die Frage, ob man  komplexere Algorithmen in VHDL implementieren oder in 
C stellt sich doch nicht anhand der Vorlieben einiger Entwickler. 
Zumindest sollte es nicht so sein.
Sowohl die sequenzielle Programmierung eines Controllers als auch die 
Programmierung in Hardware haben Ihre Vorteile und stärken. Es läßt sich 
nun mal nicht alles in C lösen. Vieles macht aber auch in VHDL keinen 
Sinn.

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.