VHDL - Prozess - Variablen

Gast #3786879
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?
Gast
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
Moderator (Firma: Titel) Persönliche Seite
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"...
Gast
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.
Gast
>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.
Gast
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
Gast
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.
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.