Aufgabe 6.3 Serienparallete Mul -> Frage zu XV und YV

tmx-master
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 253
Registriert: 25. Okt 2006 17:44

Aufgabe 6.3 Serienparallete Mul -> Frage zu XV und YV

Beitrag von tmx-master »

Hi,
ich habe eine Frage zur Aufgabe 6.3 Serienparallete Multiplikation und hier speziell eine Frage zu XV und YV.

Frage: In dem Algo wird zu Beginn XV und YV ermittelt und festgehalten. Im weiteren Verlauf des Algos spielen diese Vorzeichen jedoch überhaupt keine Rolle mehr bzw. es wird damit nichts mehr gemacht. Klar ist ja, dass in Anhängigkeit von den beiden Vz das Ergebnis ggf. korrigiert werden muss.

Erklärungsversuch:
Wenn man z.B. 2 2KZ hat, dann müsste man ja von beiden erst mal den Betrag (also die pos. Zahl) ermittelt (wenn sie oder eine davon nicht schon pos. sind / ist). Die beiden Vz sind festzuhalten (XV, YV). Das Ergebnis der Mul ist ja dann auf jeden Fall immer positiv. Wenn jetzt X oder Y neg. gewesen war, dann ist nun von dem positiven Ergebnis die neg. Darstellung zu ermitteln (1. Negieren, 2. +1 addieren -> neg. 2KZ).

Kann das mal jemand kommentieren bzw. ergänzen?
Gruß TM

Benutzeravatar
Tigger
Kernelcompilierer
Kernelcompilierer
Beiträge: 404
Registriert: 26. Okt 2007 17:35
Wohnort: Hofheim
Kontaktdaten:

Re: Aufgabe 6.3 Serienparallete Mul -> Frage zu XV und YV

Beitrag von Tigger »

Deine Erklärungen sind soweit richtig. Bei der SP-Multiplikation werden immer nur die Beträge multipliziert. In der Aufgabe werden allerdings keine 2K, sondern vorzeichenbehaftete Zahlen verwendet. Sprich die Zahlen liegen schon als Betrag vor und die Vorzeichen werden separat übergeben und auch separat zurückgegeben. Das Vorzeichen wird hier einfach mit assign pv = xv ^ yv; ermittelt. Bei 2K Zahlen müsste man in der tat erst die Beträge bilden und die Vorzeichen wider separat behandeln. Vorsicht: Der Wertebereich des Betrags einer 2K zahl ist nur halb so groß wie der gesamte Wertebereich. Sprich wenn man nach der Addition eine führende 1 hat, gab es einen Overflow. Einzig beim Fall, dass der Rest nur aus 0en besteht (1000....) bin ich mir nicht ganz sicher. Waren die Vorzeichen unterschiedlich und folglich das Ergebnis negativ, hätten wir ja ein korrektes Ergebnis (-2^(n-1)). Ist das Endergebnis aber positiv, können wir die Zahl nicht in 2K darstellen => Overflow. Müssen wir diesen Fall separat abfragen oder kann man das irgendwie umgehen?

tmx-master
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 253
Registriert: 25. Okt 2006 17:44

Re: Aufgabe 6.3 Serienparallete Mul -> Frage zu XV und YV

Beitrag von tmx-master »

Tigger hat geschrieben:...Vorsicht: Der Wertebereich des Betrags einer 2K zahl ist nur halb so groß wie der gesamte Wertebereich. ...
Das ist aber bei der vorzeichenbehafteten Zahl auch so. Das MSB ist ausschließlich für das Vz reserviert. Von daher sehe ich gar keinen Unterschied zum 2KZ.
Gruß TM

Benutzeravatar
Tigger
Kernelcompilierer
Kernelcompilierer
Beiträge: 404
Registriert: 26. Okt 2007 17:35
Wohnort: Hofheim
Kontaktdaten:

Re: Aufgabe 6.3 Serienparallete Mul -> Frage zu XV und YV

Beitrag von Tigger »

tmx-master hat geschrieben:
Tigger hat geschrieben:...Vorsicht: Der Wertebereich des Betrags einer 2K zahl ist nur halb so groß wie der gesamte Wertebereich. ...
Das ist aber bei der vorzeichenbehafteten Zahl auch so. Das MSB ist ausschließlich für das Vz reserviert. Von daher sehe ich gar keinen Unterschied zum 2KZ.
Stimmt, nur in unserem Beispiel wurde ja das Vorzeichen separat übetragen, was ja bei Vz behafteten Zahlen möglich ist, und deshalbkann man ja den kompletten Wertebereich des Betrags ausschöpfen. Bei 2K kann man ja das Vorzeichen nicht separat übertragen, weshalb ich vorsorglich nochma drauf hingewiesen habe, dass man den Wertebereich korrigieren muss. Sonst bekäme man nämlich bei Zahlen die im Wertebereich liegen zwar das richtige Ergebnis, aber bei einem OV keinen Fehler, sondern einfach nen falschen Wert zurück.

tmx-master
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 253
Registriert: 25. Okt 2006 17:44

Re: Aufgabe 6.3 Serienparallete Mul -> Frage zu XV und YV

Beitrag von tmx-master »

Na ja, auch bei Vz-Behafteteten Zahlen ist das Vz (z.B.bei 5-Bit-Zahlen) mit dabei, nämlich b4. Der Wertebereich ist ja der der 2KZ - Zahlen (fast) identisch.

Für die ser. Mul. werden in beiden Fällen die Bits b4 von X und Y mit 0 belegt (also der Betrag und somit positive Zahl) und die Mul. dann auch mit je 5 Bit ausgeführt.

X: 010010
Y: 10001

P2_P1: 00000 10001 (initial)
...

Also: Wenn man den Betrag hat (egal, ob der aus einer vz-behafteten Zahl oder eine 2KZ stammt), dann wird mit allen n-Bits gerechnet.
Gruß TM

Benutzeravatar
Tigger
Kernelcompilierer
Kernelcompilierer
Beiträge: 404
Registriert: 26. Okt 2007 17:35
Wohnort: Hofheim
Kontaktdaten:

Re: Aufgabe 6.3 Serienparallete Mul -> Frage zu XV und YV

Beitrag von Tigger »

tmx-master hat geschrieben:Also: Wenn man den Betrag hat (egal, ob der aus einer vz-behafteten Zahl oder eine 2KZ stammt), dann wird mit allen n-Bits gerechnet.
Wieso? In Aufgabe 6.3 wird ja die SB-Multiplikation ja auch mit 4 Bits audgeführt, obwohl die Zahl, inklusive vz-Bit, 5 Bit groß ist.

tmx-master
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 253
Registriert: 25. Okt 2006 17:44

Re: Aufgabe 6.3 Serienparallete Mul -> Frage zu XV und YV

Beitrag von tmx-master »

Für die Darstellung des Zahlenbereiches von x = -4 und y = 6 reichen aber 3 Bit aus. Ich denke das sind also 3-Bit-Zahlen plus eine Stelle für das Vz, bzw. zur Darstellung als 2KZ, also insgesamt 4-Bit-Zahlen und keine 5-Bit-Zahlen.

Wäre x = -10 und y = 13, dann wären es 5-Bit-Zahlen.

Also auch wenn der Betrag das MSB nicht braucht, muss das MSB bei der Mul mit berücksichtigt werden! (Also das ist meine Meinung. Wenn man nur mit je 3 Stellen multipliziert kommt glaube ich auch was anderes raus.)
Gruß TM

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

Re: Aufgabe 6.3 Serienparallete Mul -> Frage zu XV und YV

Beitrag von Steven »

Tigger hat geschrieben:Bei 2K Zahlen müsste man in der tat erst die Beträge bilden und die Vorzeichen wider separat behandeln.
Bei 2K kann man aber auch mit der Gesamtzahl rechnen ohne vorher den Betrag zu bilden. Hinterher korrigiert man dann wie folgt:
1. y ist negativ: Komplement von x addieren
2. x ist negativ: Komplement von y addieren
3. x und y sind negativ: Beide komplemente addieren

tmx-master
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 253
Registriert: 25. Okt 2006 17:44

Re: Aufgabe 6.3 Serienparallete Mul -> Frage zu XV und YV

Beitrag von tmx-master »

Ja, das wird als sog. herkömmliche Weise für die Mul von 2KZ bezeichnet, entspricht aber nicht der serienparallelen Mul. Das wären in der Klausur 2 verschiedene Aufgabenstellungen.
Gruß TM

Benutzeravatar
Tigger
Kernelcompilierer
Kernelcompilierer
Beiträge: 404
Registriert: 26. Okt 2007 17:35
Wohnort: Hofheim
Kontaktdaten:

Re: Aufgabe 6.3 Serienparallete Mul -> Frage zu XV und YV

Beitrag von Tigger »

tmx-master hat geschrieben:Für die Darstellung des Zahlenbereiches von x = -4 und y = 6 reichen aber 3 Bit aus. Ich denke das sind also 3-Bit-Zahlen plus eine Stelle für das Vz, bzw. zur Darstellung als 2KZ, also insgesamt 4-Bit-Zahlen und keine 5-Bit-Zahlen.

Wäre x = -10 und y = 13, dann wären es 5-Bit-Zahlen.

Also auch wenn der Betrag das MSB nicht braucht, muss das MSB bei der Mul mit berücksichtigt werden! (Also das ist meine Meinung. Wenn man nur mit je 3 Stellen multipliziert kommt glaube ich auch was anderes raus.)
Also in Aufgabenteil b steht man soll vorzeichenbehaftete Zahlen mit 4Bit Betrag (4bit + vz-bit = 5bit) multiplizieren (Auch in 2K brauchste dann insgesammt 5 bit für die Darstellung). Tatsächlich werden aber nur die 4 Betragsbits in den Multiplizierer geworfen. Das MSB (also das 5, sowohl bei vz als auch beim Betrag der 2k-Zahl) wird bei der Multiplikation nicht benötigt, da es ja immer 0 ist. Allerdings muss man mit den Overflows aufpassen. Und das Problem, wenn man das MSB mitnimmt ist halt, das es beim OV keinen Fehler gibt, sondern nur nen falschen (negativen) wert. Wenn du das MSB aber weglässt, würde der Multiplizierer einfach das OV-Flag setzen (falls er sowas hat).

kamel123pl
Windoof-User
Windoof-User
Beiträge: 28
Registriert: 10. Nov 2005 14:36

Re: Aufgabe 6.3 Serienparallete Mul -> Frage zu XV und YV

Beitrag von kamel123pl »

always @(x or y) begin
p2[3 : 0] = 4'b0000;
p1[3 : 0] = y[3 : 0];
repeat (4)
if (p1[0]==1)
{p2, p1} = {x[3 : 0] + p2[3 : 0], p1[3 : 1]}; sollte hier nicht {1'b0,x[3 : 0] + p2[3 : 0], p1[3 : 1]}; wegen des schiftens
else
{p2, p1} = {1'b0, p2[3 : 0], p1[3 : 1]};
end
endmodule

Benutzeravatar
Tigger
Kernelcompilierer
Kernelcompilierer
Beiträge: 404
Registriert: 26. Okt 2007 17:35
Wohnort: Hofheim
Kontaktdaten:

Re: Aufgabe 6.3 Serienparallete Mul -> Frage zu XV und YV

Beitrag von Tigger »

Gehört da wirklich immer ne 0 an den Anfang? Wird der durch die Addition evtl. entstandene OV nicht mitgeschiftet?

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

Re: Aufgabe 6.3 Serienparallete Mul -> Frage zu XV und YV

Beitrag von Steven »

Wichtig ist vor allem, dass immer geshiftet wird, auch wenn vorher addiert wurde - die rote Anmerkung im Verilog-Code ist also durchaus berechtigt. Bei der Sache mit dem Vorzeichen beim Shift bin ich mir gerade auch nicht sicher.

Benutzeravatar
Tigger
Kernelcompilierer
Kernelcompilierer
Beiträge: 404
Registriert: 26. Okt 2007 17:35
Wohnort: Hofheim
Kontaktdaten:

Re: Aufgabe 6.3 Serienparallete Mul -> Frage zu XV und YV

Beitrag von Tigger »

Naja geschiftet wird ja schon, da von p1 ja nur die ersten 3 bits genommen wird. Wenn dann das Ergebnis der Addition aber keinen OV auslöst, ist das Ergebnis nur 7 Bits lang. Die frage ist was Verilog dann macht. Wenn es das Fehlende MSB einfach mit ner 0 füllt (was am logischsten wäre) stimmt das ergebnis ja. Aber dann hätten sie sich das einzelgne Bit unten beim einfachen Schift auch sparen können.

tmx-master
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 253
Registriert: 25. Okt 2006 17:44

Re: Aufgabe 6.3 Serienparallete Mul -> Frage zu XV und YV

Beitrag von tmx-master »

Tigger hat geschrieben:... Wenn dann das Ergebnis der Addition aber keinen OV auslöst, ist das Ergebnis nur 7 Bits lang. Die frage ist was Verilog dann macht. Wenn es das Fehlende MSB einfach mit ner 0 füllt (was am logischsten wäre) stimmt das ergebnis ja. Aber dann hätten sie sich das einzelgne Bit unten beim einfachen Schift auch sparen können.
Hmm, ich glaube dass Verilog bei der Addition von x[3:0]+p2[3:0] immer ein Bit mehr von den OV automatisch mit anlegt. Hr. Hallbach hat sowas mal bei der Einführung erwähnt. Und dann kann ich mir nur erklären, dass x[3:0]+p2[3:0] immer ein 5-Bit-breites Ergebnis wird und dass dann zusammen mit p1[3:1] wieder zusammen 8 Bit ergeben. Denn eins ist klar: Der OV wird (auf Papier) mit reingeschoben (ist ein MUSS). Als Beispiel dient Folie 3-53, da ist das in der vorletzten Zeile der Fall.

Etwas verwirrend ist dann aber, dass man das Vz des Ergebnisses festhält (pv). Das ist ja dann gar nicht notwendig, denn das Ergebnis stellt doch nach dem Algo (als Beispiel dient Folie 3-53) genau das Endergebnis dar. Wozu dann noch pv festhalten und ausgeben? Versteh ich nicht.

Hmm, das ist alles etwas seltsam, wenn die Vorlesung und dieses Verilog-Programm dan unterschiedlich arbeitet. Was soll man nu annehmen?
Gruß TM

Antworten

Zurück zu „Archiv“