www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Einfache Frage zu variable


Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

eine Variable benutzt man ja innerhalb eines Prozesses wenn man direkt 
auf den im Prozess geänderten Wert zurückgreifen will.

Ich habe gelesen das dieser Wert nur bis zum nächsten Prozessdurchlauf 
gespeichert wird.

Was genau bedeutet das?

Was passiert mit der Variable am Ende des Prozesses?

Bsp.:

conversion : process(RESET, CLK)
variable v_start_conv : std_logic := '0';
begin
...
end process;

Welchen Wert hat die Variable beim erneuten Ausführen des Prozesses (in 
dem Fall bei der nächsten Clockflanke)?

Danke

Tom

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau das, was auch in C mit einer lokalen Variable passiert: Sie ist 
einfach nicht mehr vorhanden, bzw steht wieder auf deinem 
Initialisierungswert von 0.

Eine Variable in VHDL ist kein "physisch vorhandenes" Signal, sondern 
nur ein Konstrukt, um die Programmierarbeit zu vereinfachen.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So hatte ich mir das auch gedacht aber bei der Simulation bleibt die 
variable auch über das Verlassen des Prozesses hinaus vorhanden und 
behält auch ihren Wert. Das finde ich komisch da es nicht dem entspricht 
was ich erwartet hätte bzw dem was Du gerade beschrieben hast.

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Variable entspricht eher einer statischen Variable in C: sie behält 
ihren Wert bis zum nächsten Prozessaufruf. In der Synthese wird das bei 
Bedarf (wenn die Variable im Prozess vor der ersten Zuweisung gelesen 
wird) durch ein Latch bzw. ein Flip-Flop realisiert.

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja richtig, du hast Recht. Die Variable behaelt ihren Wert bei. War mir 
bisher noch nicht aufgefallen, da ich Variablen, wenn ich sie denn mal 
benutze, immer am Anfang explizit durch eine Zuweisung initialisiere.

Falls dein Code synthetisiert werden soll, musst du aber ueberpruefen, 
ob du dir damit nicht ein Latch und kein Flipflop erzeugst.

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Falls dein Code synthetisiert werden soll, musst du aber ueberpruefen,
ob du dir damit nicht ein Latch und kein Flipflop erzeugst."

Genau dazu passt der 2. Teil von Andreas' Antwort!

Wer also clever ist:
- verwendet so wenige Variablen wie möglich
- schreibt die Variablen-Zuweisungen gleich am Anfang der 
Prozess-Beschreibung
- verwendet keine Variablen, wenn er nichtmal deren Verhalten richtig 
kennt (Jan M. - sorry)

@Tom
... Variable ...
"Ich habe gelesen das dieser Wert nur bis zum nächsten Prozessdurchlauf
gespeichert wird."
VHDL ist eine Hardware-Beschreibungssprache. Man kann damit im Prinzip 
auch Programme schreiben, die z.B. Files einlesen, manipulieren und 
wieder rausschreiben aber das war nicht das Hauptziel bei VHDL.
Woraus kann sich also der Wert einer Variablen im FPGA bestimmen?
- Input-Ports
- Signale (also Register / FFs)
- Konstanten, also feste Verdrahtung
- andere Variablen bzw. die Variable selber
mehr fällt mir nicht ein. Die genannten Quellen können sich durch einen 
'Prozeßdurchlauf' zwar ändern, aber die Variable wird trotzdem immer den 
Wert haben der ihr zugewiesen wird und nicht z.B. auf 0 gehen.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ich immernoch nicht ganz verstehe ist folgendes:

Ich weise der Variablen am Anfang (also bim Starten des Prozesses) einen 
Wert zu (und zwar 0).

Das heisst doch das egal welchen Wert die Variable beim verlassen des 
Prozesses und auch darüber hinaus hat, Sie müsste beim erneuten 
ausführen des Prozesses wieder 0 gestezt werden. Oder??

Genau das kann ich in der Simulation nämlich nicht erkennen. Die 
Variable wird von mir irgendwann im Prozess auf 1 gesetzt und danach 
müsste sie bei der nächsten positiven Taktflanke (also wenn der Prozess 
zum nächsten mal ausgeführt wird) wieder 0 gesetzt werden weil die 
Initialisierung wieder stattfindet. Wird sie aber nicht....

Warum?

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Variable wird mit '0' initialisiert, genau einmal, nicht bei jedem 
Aufruf. Das entspricht exakt der lokalen statischen Variablen in C.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso, OK.

Ich dachte das das ganze bei jedem Aufruf des Prozesses stattfindet.

Vielen Dank

Tom

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.