Forum: FPGA, VHDL & Co. Anfängerfrage bzgl Variablen und Signalen


von AllerAnfang (Gast)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

von Klaus Falser (Gast)


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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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

von AllerAnfang (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.