www.mikrocontroller.net

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


Autor: Peterchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peterchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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_...

Duke

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peterchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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".

Autor: Der Besucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peterchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Der Besucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@peterchen:

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

Das sollte für den ersten Einstieg erstmal reichen.

Der Besucher

Autor: Nephilim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peterchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Der Besucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.