Anfängerfrage bzgl Variablen und Signalen

Gast #2564686
Lesenswert?

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
Moderator (Firma: Titel) Persönliche Seite #2564752
Lesenswert?

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.
Gast #2565004
Lesenswert?

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

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... ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren