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


von Tom (Gast)


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

von Jan M. (mueschel)


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.

von Tom (Gast)


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.

von Andreas S. (andreas) (Admin) Benutzerseite


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.

von Jan M. (mueschel)


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.

von Mark (Gast)


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.

von Tom (Gast)


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?

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

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

von Tom (Gast)


Lesenswert?

Achso, OK.

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

Vielen Dank

Tom

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.