Frage zu elsif

Gast #4188957
Lesenswert?

Hallo,

ich habe eine kurze Frage zu der elsif-Bedingung und zwar in diesem 
Fall:
1
if Bed1 then
2
...
3

4
elsif Bed2 then
5
...
6

7
elsif Bedi3 then
8
...
9

10
elsif Bed4 then
11
...
12

13
end if;

Da es hier in meinem Programm zu Problemen kommt vermute ich, dass wenn 
beispielsweise Bed2 und Bed3 erfüllt sind diese parallel ausgeführt 
werden. Ist das so richtig?

Vielen Dank
Herb
Gast #4188965
Lesenswert?

Herbert schrieb:
> Da es hier in meinem Programm
Du machst VHDL und beschreibst Hardware. Damit ist dein Code kein 
Programm, sondern eine Logikbeschreibung!

> zu Problemen kommt vermute ich, dass wenn
> beispielsweise Bed2 und Bed3 erfüllt sind diese parallel ausgeführt
> werden. Ist das so richtig?
Nein das ist nicht richtig. Dein Konstrukt stellt eine Hierarchie dar, 
d.h. Bedingung 1 hat die höchste Priorität, während Bedingung 4 die 
niedrigste hat. Sind Bedingung 2 und 3 erfüllt, wird lediglich Bedingung 
2 als erfüllt gesehen.
Gast #4188996
Lesenswert?

Duke Scarring schrieb:
> Sind alle Signale ordentlich einsynchronisiert?

Alle Signale werden in meinem Design mit der positiven Taktflanke 
synchronisiert. Ist es sinnvoll die Signale um wenige ns zu verzögern 
wie es in den fertigen Xilinx-Blöcken der Fall ist?

Duke Scarring schrieb:
> Stimmen die Sensitivitätslisten?

Alle meine Prozesse sind nur vom CLK abhängig deshalb würde ich 
behaupten, dass die Sensitivitätslisten nur mit CLK stimmen.
Moderator (Firma: Titel) Persönliche Seite #4189055
Lesenswert?

Herbert schrieb:
> Beim Untersuchen des Prozesses im Chipscope wird mir allerdings ein
> Ergebnis geliefert, dass nur durch die Erfüllung zweier Bedingungen
> erhalten werden kann.
Vermutlich ein asynchroner Eingang in einer FSM.
Siehe das da: 
http://www.lothar-miller.de/s9y/archives/64-State-Machine-mit-asynchronem-Eingang.html

Man könnte mehr sagen, wenn man mehr von der Beschreibung sähe...

Herbert schrieb:
> Alle Signale werden in meinem Design mit der positiven Taktflanke
> synchronisiert.
Sind alle deine externen Signale synchron zum Takt, oder hast du da 
solche Sachen wie Taster, Schalter oder irgendwelche Sensoren dran?

> Ist es sinnvoll die Signale um wenige ns zu verzögern
> wie es in den fertigen Xilinx-Blöcken der Fall ist?
Hört sich irgendwie nach "Murks" oder "falsch verstanden" an...

Herbert schrieb:
> In der Simulation stimmen die Ergebnisse auf der Xilinx Hardware nicht.
Fehlt da ein Komma nach "Ergebnisse"?
Oder stimmen auch in der Simulation die Ergebnisse nicht, wenn du eine 
Xilinx-Hardware verwendest?
Gast #4189541
Lesenswert?

Herbert schrieb:

> Da es hier in meinem Programm zu Problemen kommt vermute ich, dass wenn
> beispielsweise Bed2 und Bed3 erfüllt sind diese parallel ausgeführt
> werden.

Steht dieses Konstrukt in einem kombinatorischen process könnte es sein 
das für Bed2 die Werte gesetzt werden das Bedi3 erfüllt ist und somit im 
nächsten Durchlauf als true agearbeitet wird. Das ist dann nicht 
wirklich parallel, kann aber im getakten Chipscope so ausschauen als ob 
es gleichzeitig ausgeführt wird.

MfG,
#4192505
Lesenswert?

Hallo Herbert,

Herbert schrieb:
> ...
> ...
> ...
> ...
Darfst Du und kannst Du ein wenig mehr erzählen, was Du an der Stelle 
der "..." machst? Ist es eine reine kombinatorische Logik, die mit der 
verschachtelten if Anweisung beschrieben wird?

Fpga K. schrieb:
> könnte es sein
> das für Bed2 die Werte gesetzt werden das Bedi3 erfüllt ist
Verstehe ich nicht. Ich freue mich über Präzisierung.

Gruß
Matz
Gast #4192768
Lesenswert?

Matz K. schrieb:

> Fpga K. schrieb:
>> könnte es sein
>> das für Bed2 die Werte gesetzt werden das Bedi3 erfüllt ist
> Verstehe ich nicht. Ich freue mich über Präzisierung.
1
process(cond4Bedi3)
2
...
3
if Bed1 then
4
 ...
5
 
6
 elsif Bed2 then
7
   cond4Bedi3 <= true;
8
 ...
9
 
10
 elsif cond4Bedi3 then
11
 ...
12
 
13
 elsif Bed4 then
14
 ...
15
 
16
 end if;

MfG,
Gast #4192914
Lesenswert?

Lothar M. schrieb:
> Zum Glück kann so etwas hier nicht passieren, weil/wenn nur synchrone
> Prozesse beteiligt sind.
> Denn Herbert schrieb:
>> Alle meine Prozesse sind nur vom CLK abhängig deshalb würde ich
>> behaupten, dass die Sensitivitätslisten nur mit CLK stimmen.

Ah, OK. Wenn man die verdrehte Argumentationskette, Grammatikgehaspele 
und den Konjunktiv auf die Aussage reduziert:
"Alle Prozesse haben eine sensitivity list mit dem einzigen Element Clk 
(Takt im FPGA)"

dann passt die These "kombinatorische Prozesse" natürlich nicht.

Vollständiger Code als Anhang würde solche Fehlvermutungen verhindern. 
Da der noch nicht vorliegt wird das Problem wohl in einer Lösung oder in 
der Kapitualtion geendet sein.

MfG,
Gast #4192999
Lesenswert?

Lothar M. schrieb:
> Fpga K. schrieb:
>> Da der noch nicht vorliegt wird das Problem wohl in einer Lösung oder in
>> der Kapitualtion geendet sein.
> Oder es ist noch in Arbeit. So ein asynchroner Eingang kann ganz hübsche
> Nebeneffekte haben...  ;-)

Arbeit macht Geräusche - ja, ich sehe das Posten von Code als "Geräusch" 
an.
Da es aber um  Herbert (Gast) still geworden ist gehe ich eher von 
"solved/aborted" aus als von "on progress". ;-)

MfG,
Gast #4194169
Lesenswert?

Fpga K. schrieb:
> Da es aber um  Herbert (Gast) still geworden ist gehe ich eher von
> "solved/aborted" aus als von "on progress". ;-)

Das Problem ist "solved". Ich habe den unsauberen elsif-Block durch eine 
einfachere Abfrage lösen können. Warum das aber in der Simulation (ja 
entschuldigt, ich habe ein Komma vergessen) funktioniert hat und auf der 
Hardware nicht mehr, konnte ich mir nicht erklären.
Den Code zu posten halte ich für weniger sinnvoll, da das nur unnötige 
Verwirrung stiftet.

Fpga K. schrieb:
> "Alle Prozesse haben eine sensitivity list mit dem einzigen Element Clk
> (Takt im FPGA)"

Genau so ist es.

Lothar M. schrieb:
>> Ist es sinnvoll die Signale um wenige ns zu verzögern
>> wie es in den fertigen Xilinx-Blöcken der Fall ist?
> Hört sich irgendwie nach "Murks" oder "falsch verstanden" an...

Da muss ich nochmal einhaken, weil mich das wirklich interessiert. Dazu 
das Bild im Anhang.
Ich nehme an, dass der Block A näher an der Clk-Quelle sitzt als Block 
B. Somit erhält der Clk an B eine zusätzliche Verzögerung, durch den 
örtlichen Abstand.
Gibt A nun seine Daten an B aus (an der steigenden Taktflanke) liegen an 
B bereits die neuen Daten (1) an. Da der Takt allerdings verzögert ist, 
liest B fälschlicherweise die neuen Daten (1) ein anstatt der 0.

Wenn die Ausgabe von A verzögert wäre (wie in den vorgefertigten 
XILINX-Blöcken), würde die 0 eingelesen werden.

Habe ich da jetzt was ganz falsch verstanden? :D
Angehängte Dateien:
#4194228
Lesenswert?

> Habe ich da jetzt was ganz falsch verstanden? :D

Du hast damit verstanden, warum die Clock-Netzwerke in FPGAs (und alles 
was dazugehört ala PLL/DLL/DCM, BUFG, ...) so kompliziert sind. Die 
sorgen genau dafür, dass der Takt an allen angeschlossenen Flipflops 
exakt gleichzeitig ankommt, unabhängig von der Anzahl der FFs, ihrem 
Ort, der Temperatur oder sonstwas. Nur damit funktioniert synchrones 
Design.
#4194368
Lesenswert?

Georg A. schrieb:
> dass der Takt an allen angeschlossenen Flipflops
> exakt gleichzeitig ankommt

Naja, ganz exakt ist es ja dann doch nicht, und das heisst dann "clock 
skew" (Du findest diese Info in der STA = Static Timing Analysis).

Damit Du da nicht reinrasselst müssen Setup- und Hold-Zeiten eingehalten 
werden, und das wiederum ist Aufgabe der Synthese & des Optimierers. Ob 
diese Zeiten alle eingehalten werden sagt Dir ebenfalls die STA (falls 
die Anforderungen = "Timing Constraints" sauber definiert wurden).
Moderator (Firma: Titel) Persönliche Seite #4194467
Lesenswert?

Herbert schrieb:
> Da der Takt allerdings verzögert ist, liest B fälschlicherweise die
> neuen Daten (1) ein anstatt der 0.
Eine solche "race condition" zu verhindern, das ist die Aufgabe der 
FPGA-Designer. Du kannst dich darauf verlassen, dass das nicht passiert, 
solange du das Design nicht "übertaktest".

Das hier beschriebene Problem hat aber grundlegend nichts mit 
asynchronen Eingängen zu tun, weil es sich ja nur innerhalb des FPGAs 
abspielt.

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