Hallo Leute, und zwar habe ich ein Problem mit folgendem VHDL-Code! Mit dem Ausgang Y im Prozess! (siehe Anhang) In einer if then-Anweisung bekommt y ständig einen neuen Wert, da die Anweisungen ja sequentiell abgearbeitet werden! Wenn ich nun eine Wahrheitstabelle erstelle, dann kriegt zunächst jedes a=0 eine 1 zugewiesen! Dann wird die zweite Anweisung abgearbeitet! Wenn b=0, dann kriegt y den Wer 0 zugewiesen und die erste Anweisung wird überschrieben! Und das selbe mit dem Eingan c! Wenn ich die Wahrheitstabelle nun erstelle kriege ich folgendes Ergebnis(siehe Anhang, ypink)! Die richtige Lösung ist jedoch (Anhang ylila)! Ich hoffe ihr könnt mir weiterhelfen! Danke schon mal im Voraus
Mans A. schrieb: > Wenn ich die > Wahrheitstabelle nun erstelle kriege ich folgendes Ergebnis(siehe > Anhang, ypink)! Die richtige Lösung ist jedoch (Anhang ylila)! Es wäre etwas eindeutiger, wenn du die y-Spalte grün und rot gemacht hättest (die Unterscheidung zwischen pink und lila und die zuordnung zu deinen tatsächlichen Stiftfarben ist etwas problematisch). Die Ergebnisse der ersten Y-Spalte sind jedenfalls die korrekten, nicht die der zweiten y-Spalte. Betrachte z.B. die Kombination a=1, b=0, c=1. In der zweiten Zeile des Prozesses wird y der Wert Z zugewiesen. Da die folgende Abfrage (if a=0) nicht erfüllt ist kannst du den gesamten if-then Block bis zu zugehörigen endif überspringen (also die nächsten 5 Zeilen) - es gibt also keine weitere Zuweisung an y, die das Z überschreiben könnte.
Achim S. schrieb: > Da die folgende Abfrage (if a=0) nicht erfüllt ist kannst du den > gesamten if-then Block bis zu zugehörigen endif überspringen Anders ausgedrückt, Du könntest in der Wahrheitstabelle in den Reihen 3 und 4 die Argumente "b" und "c" auch als "don't care" markieren, in der Reihe 2 das Argument "c" - und somit verdeutlichen, dass das zuvor vor dem (if a=0)-Block gesetzte "Z" gilt.
:
Bearbeitet durch User
> Da die folgende Abfrage (if a=0) nicht erfüllt ist kannst du den > gesamten if-then Block bis zu zugehörigen endif überspringen (also die > nächsten 5 Zeilen) - es gibt also keine weitere Zuweisung an y, die das > Z überschreiben könnte. Also, wenn die erste Anweisung nicht korrekt ist, werden die anderen nicht durchgearbeitet? In C# ist das jedoch anders, wenn die erste if Anweisung nicht stimmt, wird dann die nächste abgearbeitet!
Mans A. schrieb: > In C# ist das jedoch anders, wenn die erste if Anweisung nicht stimmt, > wird dann die nächste abgearbeitet! Wenn das if in C# einen ganzen Anweisungsblock abdeckt (das Teil mit den geschweiften Klammern), dann stuert die if-Abfrage die Durchführung des gesamten Blocks. In VHDL gilt das if-then bis zum zugehörigen end if (oder bis zu einem zugehörigen elsif oder else sofern vorhanden).
Mans A. schrieb: > In einer if then-Anweisung bekommt y ständig einen neuen > Wert, da die Anweisungen ja sequentiell abgearbeitet werden! Falsch. In VHDL werden die Signale erst am Ende des Prozesses zugewiesen, nicht zwischendurch. Wird ein Signal im Prozess nicht zugewiesen, dann bleibt der alte Wert erhalten (die Synthese schenkt dir dann meist ein Latch). Nachtrag: Wenn du die Einrückungen (zu jedem "if" gehört ein "end if") ordentlich machst, dann siehst du auch besser, wie alles zusammenhängt.
:
Bearbeitet durch User
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.