Forum: FPGA, VHDL & Co. wie ist VHDL?


von Müllmann (Gast)


Lesenswert?

Hi,

ich will mal mit VHDL lernen anfangen und wollte nur wissen wie
"schwer" das so ist. Ich kenne C/C++ und kann damit gut umgehen? Kann
man es etwa auch so beschreiben - vom Umfang her?

gruß
Mm

von tom (Gast)


Lesenswert?

oooh je, ich kenne sowohl C/C++ als auch VHDL und ich muss sagen das
sind zwei ganz verschiedene Welten. Also ich finde C/C++ ja eigentlich
ganz einfach und der Umstieg in die Denkweise von VHDL ist mir sehr
schwer gefallen, nicht nur dass die Syntax eine ander ist, nein auch
die ganze Denkweise ist wesentlich anderst. Also ich denke dir wird es
auch nicht einfach fallen, insbesondere weil es nicht sehr viele
Informationen im I-Net gibt. Zu Büchern kann ich nix sagen da ich
keines habe, nur Schulungsunterlagen. Also am besten ist es du machst
einen VHDL Kurs oder so

von Timmo H. (masterfx)


Lesenswert?

Kann ich nur bestätigen, das ist ganz furchtbar. Besonders wenn man
vorher schon mit C/C++ zu tun hatte. Probleme machen die Sachen einfach
wegen der Parallelität. Bei allen Programmiersprachen ist es eben einfac
h eine sequentielle Abfolge. Beispiel eine for-Schleife. Bei C wird es
nacheinander durchlaufen, bei VHDL läuft eben alles parallel ab. Da
kommt man am Anfang absolut nicht drauf klar.

von Xenu (Gast)


Lesenswert?

VHDL ist eine Hardwarebeschreibungssprache und keine
Programmiersprache.

Man beschreibt damit digitale Hardware und programmiert sie nicht.
Ein programmierbarer Logikbaustein (FPGA,CPLD) ist kein Prozessor, in
dem ein Programm "abläuft". "Programmierbar" heissen diese
Bausteine deshalb, weil man die interne Verschaltung ihrer digitalen
Logikblöcke verändern kann.

Wenn Du VHDL lernen willst, musst Du über digitale Hardware Bescheid
wissen. Dein C/C++-Wissen wird Dir da nicht viel weiterhelfen.

von Jörg S. (Gast)


Lesenswert?

Also ich muss sagen das ich recht schnell in VHDL reingefunden habe.
Hatte vorher nur basiswissen von C++ und gute Digitaltechnik kentnisse.
Wie schon geschrieben wurde ist die Digitaltechnik dabei sehr wichtig.
Wenn man da keine Ahnung hat, dürfte es schwierig werden.

Als informationsquelle haben mir neben dem Internet 2 Bücher gedient:
1) "Designers Guide to VHDL" müsste das erste gewesen sein, bin mir
aber nicht ganz sicher.
2) CAE-gestützte IC-Entwurfsmethoden (ISBN: 3827295505). Das hatte ich
noch von einer anderen Vorlesung an der UNI "übrig". Da geht es nur
"nebenbei" um VHDL.

Viel lern man natürlich wenn man sich fertige "Routinen" ansieht (hat
mir jedenfalls geholfen).

von Jörg S. (Gast)


Lesenswert?

Hab's doch noch gefunden:
Das erste Buch war "VHDL for Programmable Logic" :)

von FPGAküchle (Gast)


Lesenswert?

IMHO sind C/C++ Kenntnisse hinderlich für den Einstieg in Logikentwurf.
Die Probleme sind umschiffbar, wenn man sich erst zuletetzt an den
Editor setzt und VHDL hackt. Zuerst muss das datenblatt der
anzusteuerenden Peripherie (das was am FPGA dranklemmt) verstanden
haben. Dann muss das Blockschaltbild stehen. Daraus muss der datenpfad
(Multiplexer, register etc) und der Kontrolpfad (FSM,Counter)
abgeleitet werden.
Nun kann man sich frühestens dem VHDL-Coding widmen. Anschliessend muss
man sich den ganzen restlichen FPGA kram hinwenden (constraints,
pinning).

VHDL macht IMHO 10% des FPGA-entwirfs aus. Nicht zeitlich aber vom
benötigten Hintergrundwissen. 50 % des angewandeten Wissens steckt im
verständiss von dig. Hardware allgemein, der rest ist FPGA Interna und
tool-wissen.

Der Tödliche Fehler besteht in der Denkfolge: Ich kann C, VHDL ist
ähnlich, also kann ich schon 80% des Handwerks. Das ist so wenn man auf
den Everest will und glaubt alles mit Internetrecherche nach einem
Billigflug nach Kathmandu erledigt zu haben.

Vorschlag: verstehe das Blockschaltbild eines uC wie zum Atmel AVR,
programmieren den in Assembler und stell dir vor welche FlioFlops jetzt
schalten. Wenn du dann in VHDL einsteigst gehts erheblich leichter.

von Heinz Schenk (Gast)


Lesenswert?

"
Vorschlag: verstehe das Blockschaltbild eines uC wie zum Atmel AVR,
programmieren den in Assembler und stell dir vor welche FlioFlops
jetzt
schalten. Wenn du dann in VHDL einsteigst gehts erheblich leichter."


Also sowas für einen Einstieg in VHDL vorzuschlagen grenzt ja schon an
Größenwahn, oder aber man will keine "neuen" in dem Kreis haben.



An den Postersteller:

Such Dir einige kleine Schaltungen aus (FF,Schieberegister,Counter) und
bau die mal irgendeinem kleinen CPLD auf. Taster ran, LED ran, evtl.
Quarzoszillator ran und los geht's.
Im Webpack gibt es auch Vorlagen für die einzelnen Baugruppen.

Also, keine Angst und loslegen.



ts

von Klaus F. (kfalser)


Lesenswert?

Ich glaube, FPGAküchle hat schon so vielen geholfen, daß es nicht ganz
fair ist, ihm zu unterstellen, er möchte keinen neue im Kreis haben.

Das Beispiel mit dem AVR ist wirklich ein bischen übertrieben, aber
Kenntnisse in Digitaltechnik sind die Voraussetzung für VHDL. Wer nicht
weiss, was ein Flip-Flop ist und wie man es verwendet, sollte nicht mit
VHDL anfangen.

von Heinz Schenk (Gast)


Lesenswert?

...so schrieb es ja auch!

ts

von -Daniel- (Gast)


Lesenswert?

Hallo

ich als VHDL Anfänger und C,C++,Python ... alter Hase
insbesondere Richtung Systemprogrammierung bin im
Moment die Syntaxphase durch. Ich hab früher mir auch Ada
mal angeschaut insofern ist mir das leicht gefallen.
Das mit Parallität im Entwurf(Denken) ist so eine Sache ...
im Grunde genommen, hat man als Programmierer auch
(mach einer sehr oft sogar) damit zu tun. zB Synchronisation
zwischen Threads, welche constraints für eine Funktion gelten,
wenn diese kmalloc mit GFP_KERNEL aufruft und sich möglicherweise
schlafen lägt. Oder was im Processkontext läuft und was nicht.
Wie gesagt, mach einer als Programmierer kann ein Lied davon singen.
Mein Problem mit VHDL ist deswegen technischer Natur ..
wie werden die event's intern im Simulator abgearbeitet, was für
constraints und undefined behavieur hat man bei welchen Konstrukten.

Aber ich bin da gerade mittendrin :)

Schöne Grüsse, Daniel

von FPGAküchle (Gast)


Lesenswert?

#Das Beispiel mit dem AVR ist wirklich ein bischen übertrieben, aber
#Kenntnisse in Digitaltechnik sind die Voraussetzung für VHDL. Wer
nicht
#weiss, was ein Flip-Flop ist und wie man es verwendet, sollte nicht
mit
#VHDL anfangen.

Jungs, gut das Ihr mich "großenwahnsinnig" nennt oder als einen
Hardwerker brandmarkt der Softwerker aus seiner Ecke vergraulen will.
Sonst verliert auf dem Schlachtfeld der Digitalentwicklung schon mal
die Bodenhaftung. Mal ein bißchen Jugenderinnerung wie ich mich zu VHDL
geprügelt habe:

Ich habe ET studiert und privat ein bisserl C gehackt. Die C-kenntnisse
waren bei den ersten VHDLentwürfen (während Praktikum) ziemlich
hinderlich. Es lief zwar durch den Compiler aber da ich alles mit C
verglich war die Hardware gräulich oder genauer gesagt es liess sich
nicht synthetisieren. War beim Praktikum auch egal weil die nur Code
für einen verteilten Simulator wollten (so was wie modelsim im Netzwerk
statt auf einem einsamen PC). Zwar kriegt man VHDL-Code durch den VHDL
simulator wenn man denkt wie:
-libraries sind so was wie #includes
-generics sind so was wie #defines
-if und for sind identisch zu C

aber auch das hat mit hardware nix zu tun.
Dann habe ich mir die VLSI-prozessorentwurf Vorlesung in die Ohren
blassen lassen. Jetzt wurden die Blockbilder verständlich und ich
wusste was mit Datenpfad anzufangen. Dann hat man Assembler
programmiert und register wurden verständlich sowie ein Stück vom
Steuerwerk (Sprung ist Neuladen eines counters, Flags sind
kombinatorisch aus dem Ausgangsregister der ALU abgeleitet). Der
Durchbruch kam beim Diplom, VHDL,AlteraFPGA und asynchrones RAM. Ich
hatte VHDL_Code zum anpassen und einen Kollegen der mir geduldig den
ganzen Alteraflow erklärte ("im ACF stellst du das pining ein, hier
musst Du ein constraint setzten, bei signalen über Taktgrenzen musst du
synchronisieren"). Das war eigentlich das Wichtigste, einen Kollegen
der einem alles mal vorführt sonst würde ich heute noch Doku lesen.
Apropo lesen, entscheident ist ein "Synthese Coding Style", also auf
welchen Teil von VHDL habe ich mich zu beschränken, das da wirklich
Hardware rauskommt.
Irgendwann gings an Modelle schreiben, also Code für die Simu der die
Nicht- FPGA Hardware simuliert. Hier kann man wirklich alles wie ein
C-Programmierer ausprobieren, es wird ja nicht durch die Synthese
gepresst. Nun waren die C-kenntnisse hilfreich, nicht mehr
hindernissreich.

Nur FF zu kennen halte ich für den VHDL Einstieg nicht ausreichend.
damit kann man nicht viel machen IMHO. Aber vielleicht erleichtert es
den Einstieg ein paar wenig komplexere Standardchips nachzubauen. Also
einen counter mit Siebensegmentdecoder, oder ein LED-Lauflicht. Fand
ich aber nicht besonders befriedigend. Und Prozesorren als Hardware zu
verstehen ist nicht so "Hardcore" wie es scheint, siehe Eigenbau-CPU
http://mycpu.mikrocontroller.net/index2.htm

Oder eine klassiche Funkuhr ohne Microcontroller und so:
http://www.fuhs.biz/dcf77.shtml

Nun aber Schluss!

von Heinz Schenk (Gast)


Lesenswert?

FPGAküchle

...entschuldige das "größenwahnsinnig", Deine Bezeichnung Harscore
hätte wohl eher gepaßt.

Ich bin auch von dem Fall ausgegangen, daß der, der es lernen will,
zunächst mal eine Ansammlung vonn  TTL- oder CMos-IC ersetzen will, und
das dann auf einem kleinen CPLD beginnt.
Kleine Schritte, die einem aber die prinzipielle Vorgehehnsweise zeigt,
und bei denen man Fehler auch noch leicht erkennen und beseitigen kann.

Mich hätte das zumindest abgeschreckt, hätte man mir erzählt, die
implementierung eines Softcores ist die Voraussetzung für den Einstieg
in VHDL.

Nix für ungut..

ts

von Patrick Berger (Gast)


Lesenswert?

HAllo,
also ich will dann auch nochmal meinen Senf dazu geben.
Im Rahmen meines Studiums ist mir VHDL so manches Mal über den Weg
gelaufen.
Es ist eine Verhaltenssprache, Du beschreibst also wie sich die
Hardware verhalten soll...

Du hast Schnittstellen (entities)
und das Verhaltensmodell in einer .vhd Datei...

Ich kann da nur empfehlen das Buch VHDL-Synthese (Reichard, Schwarz aus
dem Oldenbourg Verlag 3-486-25809-5)durchzuarbeiten und mal bei xilinx
vorbeizuscheuen. Das ISE Web-PAck ist frei für die entwicklung
(komplette Entwicklungsumgebung + ModelSim als Simulator) und der ich
nenn es mal "Compiler" ist auch sehr gut, man muss sich nur an ein
Paar grundregeln halten...
Ich empfehle dazu das "In depth Tutorial" von Xilinx. Das alles
zusammen ist hervorragend zum Selbststudium geeignet.

Eines noch hinterher, du musst , um effizient zu Coden, tatsächlich ein
bisschen Ahnung von Gatterstrukturen haben, denn so musst Du denken...
Es ist haarig da einzusteigen, wenn man so wie ich ganz gut
Hochsprachen Programmieren kann.

Viel Erfolg und gutes Gelingen

von Thomas P. (pototschnig)


Lesenswert?

Hallo,

ich persönlich hab auch schon mehrere Jahre mit Programmiersprachen wie
Pascal, C/C++, Basic, verschiedene Assembler usw programmiert und fand
es sehr schwierig in VHDL reinzukommen. Ich fand nicht wirklich die
Denkweise kompliziert, weil ich eigentlich schon mehr Wissen in
Digitaltechnik habe - ich fand es aber richtig schwierig, dass man zB
IFs eigentlich nur innerhalb von Prozessen anwenden darf/soll und
andere Eigenheiten von VHDL. Dachte echt ich würde es nie lernen :-)
Genaugenommen bin ich immer noch ein Newbie, obwohl ich mittlerweile
schon was nicht ganz-triviales gebaut habe - es wird aber noch lange
dauern, bis ich wirklich sagen kann, dass ich VHDL "kann".

Aber das ist so wie mit dem Autofahren ... Wenn man mal weiß wie man
schaltet, Gas gibt und bremst, dann kann man sich auf das eigentliche
Fahren konzentrieren und muss nicht mehr über die Bedienung des Autos
nachdenken.

Die Basics sind meistens komplex zu erlernen - aber sobald man das mal
begriffen hat, gehts schnell voran.

Mfg
Thomas Pototschnig

von Peter Rinas (Gast)


Lesenswert?

Hallo zusammen
Also das beruhigt mich ja ungemein, daß es andere gibt, die da auch so
Probleme haben in VHDL einzusteigen. Ich komme von der Hardwareseite.
Mein Problem war nicht die Sprache als solche, sondern Fragen wie: wie
stelle ich das Timing sicher (Gatter A muß vor Gatter B schalten, und
zwar um x ns). Wie erzeugt man überhaupt ein definiertes Timing. Wie
beginne ich ein Projekt und wie behalte ich die Übersicht? Das sich nur
ca. 20 % des VHDL Codes überhaupt synthesisieren lassen erfährt man auch
nur am Rande. Ich habe früher einmal einen CPLD von Lattice
programmiert, allerdings mit Schaltplan, wo ich längst nicht diese
Probleme hatte. Schaltpläne finde ich auch heute noch sympathischer,
sehe aber auch, daß man bei 5000.000 Gattern auf einem Chip nicht mehr
weit damit kommt.
Habe einen ganzen Zoo an Büchern und Tutorials, White papers, Appl.
papers etc. überflogen, um mir eine Übersicht zu verschaffen. Ich
stimme FPGAküchle in seinen Ausführungen vollkommen zu, da ich es
ähnlich gemacht habe.  Zum Lernen habe ich mir erst einmal das
Starterkit Spartan 3E (Xilinx) von Trenz elctronic für 179 € gekauft.
Das hat auch AD/DA-Wandler und deckt einen ziemlich großen Bereich an
möglichen Anwendungen ab. Dazu kann man bei Xilinx einige Anwendungen
(Stichwort: PicoBlaze, ein Softcore embedded Controller, solltest Du
Dir unbedingt anschauen) herunterladen, die speziell für dieses Kit
geschrieben wurden. Nichts triviales wie Halbadder und ähnliches,
sondern richtig professionelles Zeug wie Einlesen AD-Werte, Ausgabe
DA-Werte, Einlesen eines OnBoard Encoder (zum Verändern von
Parametern), Ausgabe von Zeichen auf dem Onboard LCD-Display etc. Für
das Geld also eine richtig runde Sache, zum Einstieg genau das
richtige. Ich habe kein Board gefunden, was einen ähnlichen
Leistungsumfang für das Geld bietet.
Falls Du Literaturhinweise brauchst, kann ich Dir einige geben, auch
pdf's über VHDL (sehr bauchbar!)zum runterladen habe ich eine ganze
Menge.
Gruß
Peter

von David Madl (Gast)


Lesenswert?

Hallo Peter,

ich plane auch demnächst in VHDL einzusteigen und hätte gern deine PDFs
(Links?)... (FPGAküchle hat es doch nicht geschafft, mir Angst zu
machen, trotz vorhandener C-Kenntnisse ;-)
(wenn ich länger brauche, dann brauche ich halt länger... Geduld
schadet nie)
Dankeschön :o)

p.s. beim Stöbern habe ich Folgendes gefunden:
http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=39&No=14&Revision=018&PartNo=1#section
evtl. Meinungen zu diesem Board?

Gruß
David

von Nick (Gast)


Lesenswert?

Kann zum Einstieg nur das "LiveDesign" Evaluation Board empfehlen.
Wird soweit ich weiß von Altium vertrieben und kostet 100 $.

http://www.altera.com/products/devkits/partners/kit-alt-live-design.html

Hat jede Menge Peripherie und man kann schön alles Stück für Stück
ausprobieren. Vom einfachen Addierer bis zum integrierten 32 Bit RISC
Softcore Prozessor mit externen RAM und Grafikausgabe.

Beispielprojekte von der einfachen Schaltung bis zum komplexen System
sind auch dabei.

Grüße

von Axel (Gast)


Lesenswert?

Ich habe früher Studenten betreut, die ihre Diplom/Studienarbeit mit
VHDL gemacht haben. Leute, die aus der C/C++ Ecke kamen haben meistens
sehr schnell die sehr mächtigen Konstrukte, die VHDL bietet, genutzt.
Das gab dann zwar recht schnelle Resultate (zumindest in der
Simulation), leider war der Gate Count, wenn es sich denn
synthetisieren liess, entsprechend hoch. Ausserdem wusste bei Problemen
mit der Netzliste kein Mensch, wie das synthetisiert wurde.

Studenten, die aus der Assembler Ecke oder ohne Vorkenntnisse kamen
hatten es da viel einfacher, weil die sich auf die elementaren
Konstrukte beschränkt haben, bei denen man ziemlich gut erkennt, wie
viel Gatter das ergibt und wie die Struktur aussieht. Da kann man dann
auch das Timing im VHDL wesentlich besser optimieren.

Eigentlich müsste man mit Verilog anfangen, das bietet diese ganzen
Konstrukte gar nicht :-)

Und ganz wichtig: Synchrones Design ist das allerwichtigste. Am Anfang
neigen viele dazu, an der Stelle mal etwas zu schluren, mal schnell
einen kleinen Takt oder eine asynchrone Schleife einzuführen etc. Das
rächt sich und führt dann zu Problemen wie z. B. dieses hier:
"Mein Problem war nicht die Sprache als solche, sondern Fragen wie:
wie stelle ich das Timing sicher (Gatter A muß vor Gatter B schalten,
und zwar um x ns). Wie erzeugt man überhaupt ein definiertes Timing."

Wenn man solche Probleme als Anfänger hat, hat man sich entweder
übernommen (Man sollte nicht gerade mit einem DDR Interface oder so
anfangen) oder man hat einen ungünstigen Ansatz, den man dringend
überarbeiten sollte.

Gruss
Axel

von Klaus F. (kfalser)


Lesenswert?

Die großen Schwierigkeiten kommen doch meist davon, dass einigen meinen
ein FPGA wäre so was wie ein beschleunigter Prozessor, und ich brauche
meine Algorithmus nur von C(C++) auf VHDL umzuschreiben und dann läuft
er noch schneller.
VHDL (oder Verilog) ohne Hardware-Kenntnisse und ohne die Kenntnisse
einer (generischen) FPGA Architektur kann nie etwas gescheites werden.

Meine bescheidene Meinung
Klaus

von Selecta (Gast)


Lesenswert?

Ich bin auch von C/Cpp zu VHDL gekommen, und ich fand das nicht so
schwer. Grund: Ich habe alles als Zustandsautomaten programmiert, da
kommt man auch mit C-Kenntnissen weit!

von J.S. (Gast)


Lesenswert?

Zum Initialbeitrag

Eine ganz gute Uebersicht gibt auch die Literatur die im "Hamburg VHDL
archive" verlinkt ist und online verfuegbar. Im Rahmen einer Vorlesung
ueber Hardware-Software-Codesign und der zugehoerigen Uebungen habe ich
im SS2005 einmal mit einem Altera Max gearbeitet, die Vorlesungsfolien
sind noch online zu finden. Persoehnlich hatte ich nicht das Gefuehl
bei den Uebungen von C++ oder C Kenntnissen behindert zu werden,
vermute allerdings das Du weniger vom Syntax als von Methoden
objektorientierter Programmierung ausgehst.

VHDL ist eine Hochsprache die (mit den entsprechenden Kompilern und
Simulatoren) benutzt wird um aus Verhaltens und Strukturbeschreibungen
Konfigurationen fuer Programmierbare Logikbausteine zu erzeugen.
FPGA's sind die Klasse von Logikbausteinen die Dir , aufgrund der
internen Struktur, die groesste Freiheit dabei geben. Wenn Du VHDL
nicht nur just for Fun lernen willst, sondern ein konkretes Ziel
umsetzen willst wuerde ich Dir empfehlen zu pruefen ob sich dieses auch
mit applicationsspezifischen Prozessoren oder Systems-on-a-Chip also
z.B. Microcontrollern (z.B. AVR's von Atmel) erreichen laesst, die
sich in C oder C++ programmieren lassen.

Gruss

JS

von J.S. (Gast)


Lesenswert?

Nachtrag:

Wer lieber C programmiert kann natuerlich mal nach sowas:

C-To-VHDL High-Level Synthesis Tool

googlen. Allerdings kenne ich keine Erfahrungsberichte darueber.

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.