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?
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
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"...
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.
>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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.