Volladdierer - So richtig?

Jack159

Lieutenant
Dabei seit
Dez. 2011
Beiträge
766
Hallo,

Ich bin gerade dabei mir die Logikgatter anzuschauen und habe nun mal zur Übung den Volladdierer nachgebaut.
Die Formeln habe ich aus Wikipedia genommen (Habe jeweils die vereinfachte Formel am Ende genommen):

6e2d63380a18c5a95b8d7604b7dc3d0c.png

4f7d9b2435564ca4406adb5415e47fa9.png


Hier meine Lösung:
(Mit Wikipedia kann ich sie nicht ganz überprüfen, da meine Version noch stark verbesserungswürdig ist denke ich.

http://www.imagebanana.com/view/1wbba2zi/Volladdierer.jpg
 

Stannis

Lieutenant
Dabei seit
Juli 2011
Beiträge
528
Ohne genauer drüber geschaut zu haben: Der Addierer ist etwas unüblich. Ein Volladdierer addiert meines Wissens nach mindestens 2 jeweils 2 bit große Binärzahlen. Du hast aber nur 3 Bits: x, y und cin.

Ich würde mir den Addierer an deiner Stelle anhand von Zustandstafeln mit den Eingangswerten a0 , b0 , a1 , b1 und den Ausgängen c0 , c1 und z (oder eine andere Variable. Das ist der Übertrag) herleiten. Male die Zustandstafel, baue daraus die Schaltfunktion und vereinfache sie anhand der booleschen Regeln. Die sollte wesentlich unkomplexer sein.
Mit dieser Grundlage könntest du den Addierer auch gleich Prima aus den Logikgattern UND, XOR und OR bauen, damit du dir die Hardware gleich ein wenig vorstellen kannst.
Verzeih mir, aber um die Zeit hab ich nicht die Konzentration. Wenn ichs schaffe, schaue ich mir die Schaltfunktion von dir morgen mal genauer an :)
 

Jack159

Lieutenant
Ersteller dieses Themas
Dabei seit
Dez. 2011
Beiträge
766
Ohne genauer drüber geschaut zu haben: Der Addierer ist etwas unüblich. Ein Volladdierer addiert meines Wissens nach mindestens 2 jeweils 2 bit große Binärzahlen. Du hast aber nur 3 Bits: x, y und cin.

Auf Wikipedia wird der Volladdierer mit 3 Eingängen (x, y, Cin) und 2 Ausgängen (Cout, s) dargestellt. Dabei sind die 3 Eingänge jeweils 1 Bit, welche addiert werden können. Der Ausgang Cout zeigt den "Übertrag" bzw. die linke Ziffer des Ergebnisses an und der Ausgang s zeigt die rechte Ziffer des Ergebnisses an.

http://de.wikipedia.org/wiki/Volladdierer


Verzeih mir, aber um die Zeit hab ich nicht die Konzentration. Wenn ichs schaffe, schaue ich mir die Schaltfunktion von dir morgen mal genauer an :)
Danke ;)
 

ice-breaker

Commodore
Dabei seit
Nov. 2008
Beiträge
4.133
Habs mir nur ganz kurz angesehen, ins Auge gesprungen ist mir aber direkt, dass die Wikipedia Formel ein wenig viele Bedingungen hat: (not x and y and cin) ... or (y and cin)

=> Damit wäre der erste Teil der Formel schon überflüssig, da es ein Spezialfall des anderen Teils ist, und somit weggelassen werden kann. Denn in deiner 2. Formel ist x ein don't care, also ist der Wert egal, er kann 1 oder auch 0 sein, es spielt keine Rolle.


Die Formel für s von Wikipedia ist mir jedoch nicht ganz klar, was soll das Oder mit einer Strich darunter darstellen? ein xor? Damit hätte es keine Diskunktion oder Konjunktion mehr. Ist eine solche gefragt oder soll es nur irgendeine Formel sein?


Kannst du deine Formel mal ausschreiben? Das Paint-Geschmiere ist ziemlich schwierig zu identifizieren. Du solltest aber auch die Rahmenbedingung definieren, unter der deine Formel gelten soll, denn ein xor wird - sofern es eine Konjunktion oder Disjunktion sein soll - nicht verwendet.
 
Zuletzt bearbeitet:

Stannis

Lieutenant
Dabei seit
Juli 2011
Beiträge
528
Ok, jetzt begreife ich.
Mir wird auch klar, was cin sein soll. Das ist der Übertrag des vorherigen Addierers. Wenn man einen Addierer als autonome Eigenheit betrachtet, kann man den auch weglassen, da da kein Übertrag ankommt, da er ja alleine ist.
Deine erste Schaltfunktion scheint korrekt zu sein. cout ist der Übertrag, der immer dann aktiv wird, sobald mindestens zwei 1en addiert werden, das ist korrekt. Auch schön abzuleiten an der schriftlichen Addition:

Code:
   01
+  01
______

   10
Der niederwertigeste Ausgangsbit, s, das keinen Übertrag sondern eine normale Dezimalstelle darstellt, wird einzeln betrachtet eingeschaltet, sobald entweder alle 3 Eingänge aktiv sind - es entstehen ein niedere und eine höhere 1 in den beiden binären Ausgängen, wobei cout weitergereicht wird; oder s wird eingeschaltet - wie du auch richtig geschrieben hast - wenn ein einziger Eingang aktiv ist. Hinter dem "=" fehlt dieser Teil dann aber, als hättest du ihn herausgekürzt. Das darfst du nicht, dann macht der gute Volladdierer nicht, wozu er geschaffen wurde. Tatsächlich ist der Teil vor dem "=" schon vollständig.

Du bist da auf dem richtigen Weg, aber dein mit Paint geschaffener Schaltplan ist etwas eigenartig, daraus werde ich nicht schlau. Am besten machst du dich auf Wiki schlau über die einzelnen Schaltzeichen der Logikfunktionen UND, XOR und OR und zeichnest die mal schön mit Bleistift und Lineal. Später kannst du dann auch Software verwenden oder einfach das Zeug scannen.

Weiterhin hast du jetzt zwar ziemlich richtig die Schaltfunktionen gebildet und man kann im Prinzip auch mit ihnen "arbeiten", im Sinne vom Konstruieren des eigentlichen Schaltplanes, allerdings musst du vorsichtig sein an der Stelle, an der s = 0 ist, also der Übertrag in der Schaltung von Halbaddierer zu Halbaddierer gereicht wird.

Meine Empfehlung um wirklich zu verstehen, was Sache ist: Halbaddierer auf Wiki ansehen, verstehen, Schaltfunktionen aufstellen und dann mal zwei Halbaddierer aneinanderfügen, so dass der erste seinen Übertrag in den zweiten füttert. Dann kriegst du auch schnell ein Gefühl dafür, welchen Zweck dieses in Reihe schalten erfüllt.

Ich hoffe ich konnte helfen.
 
Top