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