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
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.
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.
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.
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.
"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.
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?
Die Variable wird mit '0' initialisiert, genau einmal, nicht bei jedem Aufruf. Das entspricht exakt der lokalen statischen Variablen in C.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.