Forum: FPGA, VHDL & Co. VHDL - Prozess - Variablen


von Simon (Gast)


Lesenswert?

Hallo,

angenommen ich verwende in einem Prozess eine Variable, die mehrmals in 
verschiedenen sequentiellen Schritten beschrieben und wieder gelesen 
wird.
Die Timing Analysis des implementierten Designs sagt mir dass das 
geforderte Timing für den Prozess eingehalten wird. Kann ich nun davon 
ausgehen dass ich auch wirklich IMMER den aktuellsten Wert der Variable 
lese? Oder gibt es irgendwelche Einschränkungen, die die per Definition 
"sofortige" Übernahme des neuen Wertes verhindern?

von Daniel (Gast)


Lesenswert?

Simon schrieb:
> Kann ich nun davon
> ausgehen dass ich auch wirklich IMMER den aktuellsten Wert der Variable
> lese?
Ja.

> Oder gibt es irgendwelche Einschränkungen, die die per Definition
> "sofortige" Übernahme des neuen Wertes verhindern?
Nein. Es kann allerdings sein, das die Kombinatorik zu komplex (bzw. zu 
lang) wird und Dein Timing nicht mehr passt.

Daniel

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Simon schrieb:
> Kann ich nun davon ausgehen dass ich auch wirklich IMMER den
> aktuellsten Wert der Variable lese?
Ja, aber der Synthesizer muss alle Zwischenschritte, die diese Variable 
macht, parallel und gleichzeitig ausrechnen. Es wird da dann auch 
nirgends etwas "gelesen", sondern es gibt nur ein "alles gleichzeitig 
ausrechnen"...

von Simon (Gast)


Lesenswert?

Dass das Timing einen Strich durch die Rechnung machen kann wusste ich, 
daher habe ich diesen Fall ausgeschlossen :)  Danke für eure Antworten, 
das war die Bestätigung nach der ich gesucht habe, da ich zu diesem 
Thema teilweise wage Aussagen gefunden habe.

von Martin (Gast)


Lesenswert?

>angenommen ich verwende in einem Prozess eine Variable, die mehrmals in
>verschiedenen sequentiellen Schritten beschrieben und wieder gelesen
>wird.

Soll dass jezt heissen Du  hast blocking assignments
verwendet?
Poste mal  lieber den Code.

von Martin (Gast)


Lesenswert?

Blocking assignment executes "in series" because a blocking assignment 
blocks execution of the next statement until it completes. Therefore the 
results of the next statement may depend on the first one being 
completed.

Non-blocking assignment executes in parallel because it describes 
assignments that all occur at the same time. The result of a statement 
on the 2nd line will not depend on the results of the statement on the 
1st line. Instead, the 2nd line will execute as if the 1st line had not 
happened yet

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Martin schrieb:
> Soll dass jezt heissen Du hast blocking assignments verwendet?
In VHDL?

von Simon (Gast)


Lesenswert?

Martin schrieb:
>>angenommen ich verwende in einem Prozess eine Variable, die
> mehrmals in
>>verschiedenen sequentiellen Schritten beschrieben und wieder gelesen
>>wird.
>
> Soll dass jezt heissen Du  hast blocking assignments
> verwendet?

Nein.

von Erklärbär (Gast)


Lesenswert?

Vielleicht hilft Dir die Vorstellung, dass die Variablen nur während der 
Synthese verwendet werden, um beim Bauen zu helfen. Die haben also 
keinerlei "timing" welches für das Endprodukt relevant wäre.

Einzig ihre Art der Verwendung führt zu der einen oder anderen richtigen 
(oder auch falschen) Schaltungsfunktion. Wenn diese stimmt, passt es.

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.