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
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..)
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. ;-)
> 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.
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)
@ 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
> 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.
@ 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ß ;-)
???
>> 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.
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...
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.