Hallo, ich bereite mich gerade auf eine VHDL Klausur vor und zwei Dinge sind mir überhaupt nicht klar. 1) Wie werden Rechenoperationen mit Variablen innerhalb von Prozessen hardwaremäßig gelöst? Variablen haben ja kein Delta-Delay, das heisst keine Laufzeitverzögerung, was ja technisch nicht umsetzbar ist. 2) Wenn ich einen Prozess erzeuge und in die Sensitivitylist das Signal A einfüge, dieses Signal dann mitten im Prozess, durch den Prozess geändert wird, springt man dann aus dem Prozess raus und fängt von vorne an oder wird der Prozess bis zum Ende durchgearbeitet? Viele Grüße
AllerAnfang schrieb: > ich bereite mich gerade auf eine VHDL Klausur vor und zwei Dinge sind > mir überhaupt nicht klar. Na, wenn das die einzigen sind. Aber ich habe den Verdacht, dass du auf der falschen mentalen Ebene unterwegs bist. Du denkst nämlich in einer Programmiersprache und erwartest, dass auch das FPGA das tut... > 1) Wie werden Rechenoperationen mit Variablen innerhalb von Prozessen > hardwaremäßig gelöst? Variablen haben ja kein Delta-Delay, das heisst > keine Laufzeitverzögerung, was ja technisch nicht umsetzbar ist. Du willst ein idealisertes sprachliches Denkmodell in Hardware transformieren. Das geht so nicht. Variablen sind (GENAU wie Signale) nur Informationsträger. Ob sie diese Information nur weitergeben oder speichern können, hängt von der Beschreibung ab. Rechenoperationen werden also in logische Grundfunktionen zerlegt, die dann miteinander verdrahtet werden. Und in der realen Hardware haben Variablen genau die selben Laufzeiten wie Signale. Beide Informationsträger werden ja auf das selbe Silizium abgebildet. > 2) Wenn ich einen Prozess erzeuge und in die Sensitivitylist das Signal > A einfüge, dieses Signal dann mitten im Prozess, durch den Prozess > geändert wird, springt man dann aus dem Prozess raus und fängt von > vorne an oder wird der Prozess bis zum Ende durchgearbeitet? Auch wenn du das "nur" simulierst, kann sich kein Signal während der Berechnung des Prozesses ändern, denn die logische Abarbeitungszeit des Prozesses ist 0, und der Rechner kann auch nur 1 Prozess gleichzeitig bearbeiten. Das FPGA "bearbeitet" immer alle Prozesse gleichzeitig, weil ja jeder Prozess in Hardware umgerechnet worden ist. > 2) Wenn ich einen Prozess erzeuge und in die Sensitivitylist das Signal > A einfüge, dieses Signal dann mitten im Prozess, durch den Prozess > geändert wird, springt man dann aus dem Prozess raus und fängt von > vorne an oder wird der Prozess bis zum Ende durchgearbeitet? Es gibt in einem Prozess, der in Hardware abgebildet wurde, keinen "Anfang" und kein "Ende". Es ist einfach alles gleichzeitig da!. Und deshalb wird das "Ergebnis" eines Prozesses in der Hardware nur durch Laufzeiten und Verzögerungen begrenzt. Wenn sich da irgendwann ein Signal ändert, dann braucht es eben ein paar ns, bis das durch die Logik durchmarschiert ist.
AllerAnfang schrieb: > 2) Wenn ich einen Prozess erzeuge und in die Sensitivitylist das Signal > A einfüge, dieses Signal dann mitten im Prozess, durch den Prozess > geändert wird, springt man dann aus dem Prozess raus und fängt von vorne > an oder wird der Prozess bis zum Ende durchgearbeitet? Bei VHDL gilt, dass alle Signale ihre neuen zugewiesenen Werte erst dann erhalten, wenn der Prozess das nächste Mal stoppt. Eine Zuweisung in einem Prozess A <= A or B; arbeitet zunächst mit dem alten Wert von A weiter. Erst am "Ende" oder beim nächsten wait erhält A den neuen Wert. Da A nun geändert, und wenn A in der Sensitivity List des Prozess ist, fängt der Prozess von neuem an. So etwas ergibt dann aber meist keine realierbare Hardware, bzw. endet in einer Hardwareschleife. Sinnvoll sind deshalb in der Regel nur getaktete Prozesse.
Klaus Falser schrieb: > So etwas ergibt dann aber meist keine realierbare Hardware, Das spezielle Beispiel ist aber tatsächlich relisierbar und ein einfaches Latch... > bzw. endet in einer Hardwareschleife. Die berühmte kombinatorische Schleife entsteht, wenn Anfänger in der Zwei-Prozess-Schreibweise im kombinatorischen Prozess etwas hochzählen (a <= +1;). Weil sie dann noch versteckt in einem case vergraben ist, erkennt das Synthesetool eine solche Schleife nur schwer und meldet bestenfalls Latches: http://www.lothar-miller.de/s9y/categories/36-Kombinatorische-Schleife > Sinnvoll sind deshalb in der Regel nur getaktete Prozesse. Das wäre dann die Ein-Prozess-Schreibweise... ;-) http://www.lothar-miller.de/s9y/archives/43-Ein-oder-Zwei-Prozess-Schreibweise-fuer-FSM.html Und am besten revolutionär und radikal gleich so: http://www.lothar-miller.de/s9y/archives/16-Takt-im-Prozess.html AllerAnfang schrieb: > ich bereite mich gerade auf eine VHDL Klausur vor Aber das war jetzt ein wenig über den Tellerrand der Klausur hinausgeschaut... ;-)
Vielen Dank für die sehr ausführliche Hilfe. Da muss man doch mehr umdenken als gedacht (im Gegensatz zu "normalen" Programmiersprachen).
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.