MuLö 5

Wambolo
Computerversteher
Computerversteher
Beiträge: 381
Registriert: 18. Okt 2007 11:36

MuLö 5

Beitrag von Wambolo »

Hi,

warum ist in A1 bei c1 folgendes angegeben:
C1: Kombinatorische Logik, da wegen if (C1 = '1') C1 := '0' identisch zu C1 := '0' vollständig

warum ist das identisch? kann nicht C1 auch undefiniert sein?

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Re: MuLö 5

Beitrag von Stumpf.Alex »

Ich vermute mal, dass liegt daran, dass wir hier von Hardwaresynthese reden. In der Hardware existiert ein "unbekannt" oder "undefiniert" nicht (mit Ausnahme der Tri-States). Diese Begriffe sind meines Erachtens Erfindungen der Simulationswerkzeuge.

xAx
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 157
Registriert: 6. Mär 2008 17:20

Re: MuLö 5

Beitrag von xAx »

hätte da ein paar fragen zur mulö der aufgabe 1.
Ein potenzielles Register ist zeitlich lokal, falls es räumlich lokal ist. Es muß
außerdem immer geschrieben werden, bevor es gelesen wird
[Y/SUMX]: [...] Nicht zeitlich lokal, da nie gelesen.
gibt es solche überraschungen dann auch in der klausur?! :shock: :evil: bestätigt mir, dass beide aussagen stimmen, und ich bin mittwoch net da :wink:
aber das dürfte kein problem sein, denn: ich muss eine klausur schreiben bevor sie gelesen wird. ergo kann ich nicht durchfallen :twisted:
leider meint die synthese in xilinx auch, dass es latches/FFs werden, weshalb ich mich nur über die definition in den folien wundern kann.
Getaktete process-Blöcke [...] Vollständigkeit ist nun irrelevant.
if(s_C0'event and s_C0 = '1') then [...] C3 := "0"; [...] end if;
C3: Kombinatorische Logik, da wegen if (C3 = 1) C3 := ’0’ identisch zu C3 := ’0’ vollständig.
Sicherlich auch nur ein schlechter Scherz. hatte extra noch in http://www.d120.de/forum/viewtopic.php?f=193&t=15747 nachgefragt.
C3 ist btw imo nicht zeitlich lokal. wenn doch, danke für eine erklärung, weil es ja passieren kann, dass C3 gelesen wird, bevor es geschrieben wird:

Code: Alles auswählen

tmp := "0"&(S1(I downto I) + S2(I downto I) + C3) ;
C3 := tmp(1 downto 1);
C2: Kombinatorische Logik, da zeitlich lokal und vollständig.
process(s_C0) wird bei steigender und bei fallender flanke ausgelöst. bei fallender flanke sollte (s_C0'event and s_C0 = '1') false sein und somit wird C2
in diesem processdurchlauf nicht geschrieben. ist es trotzdem vollständig? (warum?)

letzte verständnisfrage: tmp "entfällt" in beiden process blöcken, C0 und C2 werden jeweils zu kombinatorischer logik. wie kommt das zu stande? immerhin
wird tmp eine addition zugewiesen, das ergebnis z.T. sogar direkt an das PR eines ausgangsport "gesendet". C0 und C2 machen auch nicht mehr.
Nichts ist wie es scheint!
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Zuletzt geändert von xAx am 14. Mär 2009 16:17, insgesamt 99-mal geändert.

H. Gregor Molter
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 169
Registriert: 16. Dez 2004 20:17
Kontaktdaten:

Re: MuLö 5

Beitrag von H. Gregor Molter »

xAx hat geschrieben:hätte da ein paar fragen zur mulö der aufgabe 1.
Ein potenzielles Register ist zeitlich lokal, falls es räumlich lokal ist. Es muß
außerdem immer geschrieben werden, bevor es gelesen wird
[Y/SUMX]: [...] Nicht zeitlich lokal, da nie gelesen.
gibt es solche überraschungen dann auch in der klausur?! :shock: :evil: bestätigt mir, dass beide aussagen stimmen, und ich bin mittwoch net da :wink:
Ja. Beide Aussagen sind korrekt. :twisted:
Aussage 1: Es ist räumlich lokal.
Aussage 2: Es wird geschrieben, bevor es gelesen wird.
PR ist zeitlich lokal, gdw. Aussage 1 und Aussage 2 zutrifft.

Aber: In diesem Fall ist Y z.B. nicht in einem getakteten Prozess. Daher ist es ausreichend nur die Vollständigkeit zu betrachten.
xAx hat geschrieben:
Getaktete process-Blöcke [...] Vollständigkeit ist nun irrelevant.
if(s_C0'event and s_C0 = '1') then [...] C3 := "0"; [...] end if;
C3: Kombinatorische Logik, da wegen if (C3 = 1) C3 := ’0’ identisch zu C3 := ’0’ vollständig.
Sicherlich auch nur ein schlechter Scherz. hatte extra noch in http://www.d120.de/forum/viewtopic.php?f=193&t=15747 nachgefragt.
C3 ist btw imo nicht zeitlich lokal. wenn doch, danke für eine erklärung, weil es ja passieren kann, dass C3 gelesen wird, bevor es geschrieben wird:

Code: Alles auswählen

tmp := "0"&(S1(I downto I) + S2(I downto I) + C3) ;
C3 := tmp(1 downto 1);
C2: Kombinatorische Logik, da zeitlich lokal und vollständig.
process(s_C0) wird bei steigender und bei fallender flanke ausgelöst. bei fallender flanke sollte (s_C0'event and s_C0 = '1') false sein und somit wird C2
in diesem processdurchlauf nicht geschrieben. ist es trotzdem vollständig? (warum?)
Hier ist in der Tat ein Fehler in der MuLö.

C3 ist ein Flip-Flop, da es nicht zeitlich lokal ist und in einem getakteten Prozess steht.

C2 ist Kombinatorik, da es zeitlich lokal ist.

Die Aussage über die Vollständigkeit ist überflüssig.
xAx hat geschrieben: letzte verständnisfrage: tmp "entfällt" in beiden process blöcken, C0 und C2 werden jeweils zu kombinatorischer logik. wie kommt das zu stande? immerhin
wird tmp eine addition zugewiesen, das ergebnis z.T. sogar direkt an das PR eines ausgangsport "gesendet". C0 und C2 machen auch nicht mehr.
'Entfallen' ist unglücklich gewählt. tmp wird jeweils, wie C2, zu Kombinatorik.

xAx
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 157
Registriert: 6. Mär 2008 17:20

Re: MuLö 5

Beitrag von xAx »

Mnemonic hat geschrieben:
xAx hat geschrieben:
Ein potenzielles Register ist zeitlich lokal, falls es räumlich lokal ist. Es muß
außerdem immer geschrieben werden, bevor es gelesen wird
[Y/SUMX]: [...] Nicht zeitlich lokal, da nie gelesen.
gibt es solche überraschungen dann auch in der klausur?! :shock: :evil: bestätigt mir, dass beide aussagen stimmen, und ich bin mittwoch net da :wink:
Ja. Beide Aussagen sind korrekt. :twisted:
Aussage 1: Es ist räumlich lokal.
Aussage 2: Es wird geschrieben, bevor es gelesen wird.
PR ist zeitlich lokal, gdw. Aussage 1 und Aussage 2 zutrifft.
moment, welche beiden aussagen meinst du, seien korrekt? ich jedenfalls meinte mit "dass beide aussagen stimmen", dass sowohl die gesamte definition von "zeitlich lokal" stimmt, als auch die mulö, dass "Nicht zeitlich lokal, da nie gelesen.". meiner meinung nach wird nunmal etwas immer geschrieben, bevor es gelesen wird, auch wenn es nie gelesen wird. wenn ich ein buch schreibe und niemand liest es (wahrscheinlich :mrgreen:), dann habe ich es trotzdem geschrieben, bevor es gelesen wurde. ergo frage ich mich, ob folgende definition vll. besser wäre:
Ein potenzielles Register ist zeitlich lokal, falls es räumlich lokal ist. Es muß
außerdem immer geschrieben werden, bevor es mindestens einmal gelesen wird
Nichts ist wie es scheint!
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Zuletzt geändert von xAx am 14. Mär 2009 16:17, insgesamt 99-mal geändert.

ChristianK
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 127
Registriert: 13. Sep 2007 01:15
Wohnort: Darmstadt
Kontaktdaten:

Re: MuLö 5

Beitrag von ChristianK »

wie ist das denn allgemein so mit der Reihenfolge innerhalb eines Prozesses? Mehrere nicht-blockende Zuweisungen werden ja scheinbar parallel ausgeführt:

process begin
a<=b;
b<=c;
c<=a;
end process;

In dem Beispiel sind also a, b, c alle nicht zeitlich lokal... Wie ist das wenn man da blockende Zuweisungen reinbringt:

process begin
a <= b;
b<=c;
c := d;
d <= a;
end process;

Werden dann zuerst die ersten beiden Zuweisungen quasi parallel ausgeführt, dann die Dritte und dann die Vierte? Demnach wäre a hier ja dann zeitlich lokal?

oder wie ist es mit der zeitlichen Lokalität von a in diesen Beispielen?
process begin
if(a='1') then
a<=e;
end if;
end process;

process begin
if(e='1') then
e<=a;
end if;
a<='1';
end process;

process begin
if(e='1') then
e<=a;
end if;
a:='1';
end process;

Lässt sich das irgendwie klug zusammenfassen wie der Ablauf innerhalb eines process geht und welche Rolle blockende und nicht-blockende Zuweisungen dabei spielen?

Steven
Kernelcompilierer
Kernelcompilierer
Beiträge: 425
Registriert: 2. Sep 2008 10:00
Wohnort: Frankfurt am Main

Re: MuLö 5

Beitrag von Steven »

Ich versuche mal, mein (Un-/Teil- / usw.)Verständnis der Sache darzulegen. Wenn etwas nicht stimmt, weist mich bitte darauf hin.
ChristianK hat geschrieben:process begin
a<=b;
b<=c;
c<=a;
end process;

In dem Beispiel sind also a, b, c alle nicht zeitlich lokal.
Ja, das sehe ich auch so.
ChristianK hat geschrieben:process begin
a <= b;
b<=c;
c := d;
d <= a;
end process;
Hier wird zuerst für das Signal "a" der aktuelle Wert von b vorgemerkt, geschrieben wird aber noch nichts. Analog wird für b der Wert von c vorgemerkt. C wird mit dem aktuellen Wert von d überschrieben und für d wird der Wert von a vorgemerkt. Erst nachdem der Prozessblock vollständig durchlaufen wurde, werden nun die vorgemerkten Signal-Wert Paare geschrieben. Die nicht-blockende Zuweisung merkt sich also, was du zuweisen willst, ändert den Signalwert aber erst später, d.h. im aktuellen Durchlauf des Prozessblocks benutzt du immer den alten Wert. Konsequenz: a ist imho. zeitlich nicht lokal.
ChristianK hat geschrieben:process begin
if(a='1') then
a<=e;
end if;
end process;
Zeitlich nicht lokal.
ChristianK hat geschrieben:process begin
if(e='1') then
e<=a;
end if;
a<='1';
end process;
Zeitlich nicht lokal, du merkst den Wert von a für eine Zuweisung an e vor, bevor du a schreibst.
ChristianK hat geschrieben:process begin
if(e='1') then
e<=a;
end if;
a:='1';
end process;
Wie oben, auch nicht lokal.

Ich hoffe, das stimmt soweit. Falls es jemand besser weiß: Korrigiert es bitte!

Benutzeravatar
~usz
Mausschubser
Mausschubser
Beiträge: 69
Registriert: 18. Okt 2007 10:46

Re: MuLö 5

Beitrag von ~usz »

xAx hat geschrieben:
Ein potenzielles Register ist zeitlich lokal, falls es räumlich lokal ist. Es muß
außerdem immer geschrieben werden, bevor es gelesen wird
[Y/SUMX]: [...] Nicht zeitlich lokal, da nie gelesen.
[...] ergo frage ich mich, ob folgende definition vll. besser wäre:
Ein potenzielles Register ist zeitlich lokal, falls es räumlich lokal ist. Es muß
außerdem immer geschrieben werden, bevor es mindestens einmal gelesen wird
Einige Überlegungen dazu: Angenommen wir hätten ein potentielles Register, welches nur geschrieben, aber wirklich niemals von jemandem gelesen würde, dann hätte dieses Register keine Existenzberechtigung und müsste wegoptimiert werden.
Deshalb kann meiner Meinung nach mit "wird niemals gelesen", nur "niemals in dieser Entity gelesen" gemeint sein. Die konkrete Situation ist ja wie folgt: Die potentiellen Register Sum0 bis Sum3 sind in der Entity als Ausgänge deklariert (es handelt sich dabei implizit um Signale) und können so durchaus von einem anderen übergeordneten Modul gelesen werden. Dadurch ist das potentielle Register aber nicht mehr räumlich lokal, kann also auch nicht zeitlich lokal sein.
Die allzu allgemein formulierte Implikation "nie gelesen" -> "nicht zeitlich lokal" scheint in diesem Zusammenhang wohl eher zur Verwirrung beizutragen...

Steven
Kernelcompilierer
Kernelcompilierer
Beiträge: 425
Registriert: 2. Sep 2008 10:00
Wohnort: Frankfurt am Main

Re: MuLö 5

Beitrag von Steven »

~usz hat geschrieben:Deshalb kann meiner Meinung nach mit "wird niemals gelesen", nur "niemals in dieser Entity gelesen" gemeint sein. Die konkrete Situation ist ja wie folgt: Die potentiellen Register Sum0 bis Sum3 sind in der Entity als Ausgänge deklariert (es handelt sich dabei implizit um Signale) und können so durchaus von einem anderen übergeordneten Modul gelesen werden. Dadurch ist das potentielle Register aber nicht mehr räumlich lokal, kann also auch nicht zeitlich lokal sein.
Das macht Sinn. Die Ausgänge eines synchronen Prozesses sind synchron und damit brauchen wir ein FlipFlop zum Puffern der Daten während der Zustandszeit. Würden wir nur kombinatorische Logik verwenden, wäre der Ausgang fast zwingend asynchron oder wir bräucthen eine Rückkopplung, d.h. wir würden ein FlipFlop emulieren, was wieder auf das Gleiche hinausläuft.

FeG
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 182
Registriert: 6. Dez 2007 07:01

Re: MuLö 5

Beitrag von FeG »

Hi,

es wäre nett, wenn die Definition von "zeitlicher Lokalität" nochmal offizilell exakt formuliert würde. Konkret: Kommt es jetzt nur darauf an, dass ein Register immer geschrieben wird, bevor es gelesen wird oder muss es auch zudem mindestens einmal gelesen werden? Ersteres ist die Definition auf den Folien, zweiteres eine verwaschene Begründung der Musterlösung (bei der sich auch die Frage stellt, was mit Registern ist, die erst geschrieben aber nur in einem If-Zweig gelesen werden... diese werden dann ja nicht immer gelesen).

Gruß
FeG

Osterlaus
BSc Spammer
BSc Spammer
Beiträge: 1263
Registriert: 23. Aug 2007 12:46
Wohnort: DA

Re: MuLö 5

Beitrag von Osterlaus »

Zu den nicht-blockenden Zuweisungen hat Wolfgang Heenes im letzten Jahr eine gute Hilfestellung aufs Hilfsblatt für CMS (Vorsicht: Verilog, kein VHDL!) geschrieben:
Wertet in jedem Zeitschritt zunächst alle Ausdrücke
auf der rechten Seite aus, Transparente Zwischenspeicherung, Schließlich Zuweisung an die linke Seite, Modelliert Parallelzuweisung.

Osterlaus
BSc Spammer
BSc Spammer
Beiträge: 1263
Registriert: 23. Aug 2007 12:46
Wohnort: DA

Re: MuLö 5

Beitrag von Osterlaus »

Mnemonic hat geschrieben:
C2: Kombinatorische Logik, da zeitlich lokal und vollständig.
process(s_C0) wird bei steigender und bei fallender flanke ausgelöst. bei fallender flanke sollte (s_C0'event and s_C0 = '1') false sein und somit wird C2
in diesem processdurchlauf nicht geschrieben. ist es trotzdem vollständig? (warum?)
Hier ist in der Tat ein Fehler in der MuLö.

C3 ist ein Flip-Flop, da es nicht zeitlich lokal ist und in einem getakteten Prozess steht.

C2 ist Kombinatorik, da es zeitlich lokal ist.

Die Aussage über die Vollständigkeit ist überflüssig.
xAx hat geschrieben: letzte verständnisfrage: tmp "entfällt" in beiden process blöcken, C0 und C2 werden jeweils zu kombinatorischer logik. wie kommt das zu stande? immerhin
wird tmp eine addition zugewiesen, das ergebnis z.T. sogar direkt an das PR eines ausgangsport "gesendet". C0 und C2 machen auch nicht mehr.
'Entfallen' ist unglücklich gewählt. tmp wird jeweils, wie C2, zu Kombinatorik.
Schade, dass dies in der Musterlösung noch nicht korrigiert wurde.

Antworten

Zurück zu „Archiv“