Forum: FPGA, VHDL & Co. Zwei Fragen zu VHDL


von Peterchen (Gast)


Lesenswert?

Hallo, ich bin totaler VHDL Neuling.
Ich habe bisher nur einen Zähler pogrammiert, den man mit zwei Tasten 
sagen kann in welche Richtung er zählen soll.
Deshalb meine Fragen:
1. Wie kann man in VHDL eine Tastenentprellung programmieren?
2. Gibt es sowas wie Funktionen in C? Ich möchte an Prozesse Variablen 
(keine Signale übergeben).
3.Ich bin noch auf der Suche nach guten Tutorials.

Danke für eure Hilfe.

von Lo (Gast)


Lesenswert?

Fang erstmal mit drittens an, dann wirst du 1. leicht selbst hinbekommen 
und sehen, dass das mit 2. (so einfach) nichts wird, weil du mit deinen 
Programmen echte Hardware beschreibst, die ist nicht so variabel.
Mein Tipp zum Einstieg:

ISBN: 3827370477

von Peterchen (Gast)


Lesenswert?

Danke für deine Antwort.

> und sehen, dass das mit 2. (so einfach) nichts wird, weil du mit deinen
> Programmen echte Hardware beschreibst, die ist nicht so variabel.

Es gibt doch "shared" Variablen. Sind die nicht synthetisierbar?

von Duke Scarring (Gast)


Lesenswert?

> Es gibt doch "shared" Variablen. Sind die nicht synthetisierbar?
Wahrscheinlich nicht in dem Sinne, den Du Dir vorstellst.

Möglicherweise hilft Dir da die Zwei-Prozess-Methode eher weiter:
http://www.gaisler.com/doc/vhdl2proc.pdf
http://www-md.e-technik.uni-rostock.de/lehre/vlsi_i/vhdlf.ppt

Duke

von Gast (Gast)


Lesenswert?

Jedem Prozess innerhalb einer entitty stehen automatisch alle Signal der 
anderen Prozesse (lesend) zur Verfügung. Du musst da nix übergeben.
Nur schreiben darfst du die Signale nur in einem Prozess.

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


Lesenswert?

> 2. Gibt es sowas wie Funktionen in C?
> Ich möchte an Prozesse Variablen (keine Signale übergeben).
Vergiss zuallererst die "C"-Denkweise, damit wirst du bei der 
Hardwarebeschreibung (es ist keine Hardwareprogrammierung) sehr bald 
Schiffbruch erleiden.

Was du funktionell am ehesten mit C-Funktionen vergleichen kannst, sind 
Packages, die eine definierte (Entity) Schnittstelle haben, und in einem 
Hauptmodul eingebunden werden.
Prozeduren und Funktionen in VHDL haben funktionell mit C-Funktionen 
nichts zu tun. Du kannst schon versuchen, diese Syntaxelemente so zu 
verwenden, aber dann kommst du recht schnell an die Grenzen dieser 
Konstrukte.

von Lo (Gast)


Lesenswert?

>(es ist keine Hardwareprogrammierung)

Jeden Neuling diese Aussage an den Kopf zu werfen, halte ich für 
kontraproduktiv, da man als dieser Neuling das Ganze weder verstehen 
kann noch verstehen muss, bevor man einsteigt. Es werden Zeilen in einen 
Editor geschrieben, und nach diesen Zeilen macht dann irgendein Ding 
das, was ich in diesen Zeilen geschrieben habe. Das ist, Korrektheit hin 
oder her, programmieren. Es gibt genug Beiträge hier, wo schon darüber 
geredet wird, aber dem Anfänger hilft es wie gesagt überhaupt nicht.

von Peterchen (Gast)


Lesenswert?

Spezieller Dank geht an Duke Scarring für die Links.

> Vergiss zuallererst die "C"-Denkweise..

Werde ich machen. Man versucht nun mal am Anfang Parallelen zu bereits 
bekannten Dingen zu finden.

> Prozeduren und Funktionen in VHDL haben funktionell mit C-Funktionen
> nichts zu tun.

Habe ich auch schon festgestellt.

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


Lesenswert?

> aber dem Anfänger hilft es wie gesagt überhaupt nicht.
Gut, jedem Häfele sein Deckele ;-)

Was ich damit klarstellen möchte, ist, dass es auch jedem Anfänger klar 
ist, dass er eben nicht irgendwas programmiert, sondern mit FFs und 
Logik eine Schaltung aufbaut. Und die Denkweise dazu ist eine komplett 
andere, als beim Programmieren in z.B. C oder Assembler.

> Es werden Zeilen in einen Editor geschrieben, und nach diesen Zeilen
> macht dann irgendein Ding das, was ich in diesen Zeilen geschrieben habe.
Dann programmierst du deine Texte in einer Textverarbeitung?
Denn auch da "werden Zeilen in einen Editor geschrieben, und nach diesen 
Zeilen macht dann irgendein Ding das, was ich in diesen Zeilen 
geschrieben habe".

von Der Besucher (Gast)


Lesenswert?

Hi Lo,

ich denke nicht, das Herr Miller "jemanden etwas an den Kopf wirft".
Seine Aussage ist der Dreh- und Angelpunkt zum Verständnis von 
Hardwarebeschreibungssprachen. Signalzuweisungen laufen in der Schaltung 
parallel(!) ab (jetzt lasse ich mal die Beschreibung von Testbenchen 
oder Verhaltensmodellen aussen vor). Ein (C-)Programm wird hingegen 
sequentiell abgearbeitet.

wenn in einem process z.B: folgendes steht:
X <= 4;
Y <= X;
wunder sich die meisten Neulinge über den Wert, der in Y steht (der 
natürlich alles andere als 4 sein kann, je nach der letzten Zuweisung).

und das
Y <= X;
X <= 4;
auch noch das selbe ist grenzt dann schon Hexerei.

Ich denke Hardwarebeschreibung und Programmierung ist wie Äpfel mit 
Birnen zu vergleichen. Aber andernfalls kann man viele Methoden aus der 
Softwareentwicklung auch auf Hardwareentwicklung anwenden. HW und SW 
ergänzen sich gegenseitig und oft muß man lange abwägen, welche Teile 
man als HW und welche man als SW realisiert. Beides hat seine Vor- und 
Nachteile.

Aber vielleicht sehe ich das auch vollkommen falsch...

Der Besucher

von Peterchen (Gast)


Lesenswert?

> Signalzuweisungen laufen in der Schaltung
> parallel(!) ab (jetzt lasse ich mal die Beschreibung von Testbenchen
> oder Verhaltensmodellen aussen vor). Ein (C-)Programm wird hingegen
> sequentiell abgearbeitet.
Das bereitet mir kein Kopfzerbrechen. Ich habe auch schon in der 
"sequentiellen Programmierung" mit parallelen Prozessen gearbeitet. In 
VHDL sind ja auch sequentielle Abläufe möglich.

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


Lesenswert?

> Ich habe auch schon in der "sequentiellen Programmierung" mit
> parallelen Prozessen gearbeitet.
Irrtum. Das sind nur scheinbar parallele Abläufe. Denn wenn da nur 1 
CPU ist, kann die auch nur 1 Berechnung/Transfer gleichzeitig machen.

> In VHDL sind ja auch sequentielle Abläufe möglich.
Ja, indem die anderen Zustände (die ja in der Hardware tatsächlich 
gleichzeitig da sind) einfach nicht aktiviert werden. So ist z.B. in 
einer SM immer nur 1 Zustand aktiv, und es wird sequentiell in einen 
anderen Zustand weitergeschaltet.

von Lo (Gast)


Lesenswert?

>Dann programmierst du deine Texte in einer Textverarbeitung?
>Denn auch da "werden Zeilen in einen Editor geschrieben, und nach diesen
>Zeilen macht dann irgendein Ding das, was ich in diesen Zeilen
>geschrieben habe".

Komisch, ich hab bei meiner Textverarbeitung gerade geschrieben "gib mir 
10000 €!", es kam keine Fehlermeldung, aber ich hab trotzdem kein Geld 
bekommen. Brauche ich einen anderen Compiler? Oder hinkt dein Vergleich 
doch etwas arg? ;)

>Signalzuweisungen laufen in der Schaltung parallel(!) ab
Das ist wichtig und richtig, aber dem Anfänger nutzt dafür der oben 
bemängelte Satz nichts. Woher soll der denn wissen, wie Hardware genau 
funktioniert und was sie kann und was nicht?

Ich will ja seine Aussage nicht verteufeln, ich fand es zu meiner 
Anfangszeit jedenfalls immer sinnlos, diesen Satz gesagt zu bekommen, 
weil er mich nicht weitergebracht hat.

von Der Besucher (Gast)


Lesenswert?

@peterchen:

schau mal hier:
http://www.itiv.uni-karlsruhe.de/opencms/opencms/de/study/vhdl/

Das sollte für den ersten Einstieg erstmal reichen.

Der Besucher

von Nephilim (Gast)


Lesenswert?

also ich empfand es bei meinem einstieg als sehr hilfreich vorher die 
sicht der elektronik gekannt zu haben. so hatte ich viel schneller eine 
gewisse vorstellung was ich da eigentlich im fpga erzeuge.

von Peterchen (Gast)


Lesenswert?

> Signalzuweisungen laufen in der Schaltung parallel(!) ab
> Das ist wichtig und richtig, aber dem Anfänger nutzt dafür der oben
> bemängelte Satz nichts. Woher soll der denn wissen, wie Hardware genau
> funktioniert und was sie kann und was nicht?
> Ich will ja seine Aussage nicht verteufeln, ich fand es zu meiner
> Anfangszeit jedenfalls immer sinnlos, diesen Satz gesagt zu bekommen,
> weil er mich nicht weitergebracht hat.
Also, weder stören mich solche Aussagen, noch bringen sie mich irgendwie 
weiter. Mir ist schon klar, daß mein CPLD im Grunde nicht viel mehr 
kann, als würde ich einen Haufen Logik-ICs von Hand zusammenlöten. Nur, 
bis zu welchem Grad Abstraktion möglich ist und VHDL-Compiler und 
Synthesetool Kleinkram abnehmen können, muß ich noch rausfinden. Lasst 
euch daher nicht von den dummen Grundlagenfragen ärgern, die einer 
stellt, der sich erst seit zwei Tagen damit beschäftigt.

von Der Besucher (Gast)


Lesenswert?

@Nephilime:
Ich kannte zuerst auch die wichtigen Konstrukte der Digitalelektronik, 
sowie Entwurfs- und Optimierungsmethoden bevor ich nur eine Zeile HDL 
geschrieben habe. Aber mit VHDL und FPGAs ist der Einstieg unbestritten 
viel schneller und einfacher möglich und man bekommt auch Resultate zum 
"anfassen". Nur verlernen viele, nach halbwegs optimale Lösungen zu 
suchen. Nur wenn nicht alles ins FPGA "passt" wird dann optimiert.

Der Besucher

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


Lesenswert?

> Komisch, ich hab bei meiner Textverarbeitung gerade geschrieben "gib mir
> 10000 €!"
> ... aber ich hab trotzdem kein Geld bekommen.
Ja, da hast du offenbar nicht unterstützte Syntaxelemente verwendet ;-)

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.