ripple carry addierer

OP (Firma: hinter den 7 bergen) #1576760
Lesenswert?
• ▲
▼
Hi,

ich versuche gerade eine vhdl übungsaufgabe nachzuvollziehen code ist 
angehängt ich kapier das Synthese ergebnis net ganz (siehe screenshot)
wie man darauf sieht kommt bei dieser Operation:

      0011  (A)
exor  1001  (B)
-----------------
exor  0000  (C)

=>    1100  raus

ich habs mal von hand gemacht aber ich krieg das hier raus:

      0011  (A)
exor  1001  (B)
-----------------
      1010
exor  0000  (C)

=>    1010

wenn ich die zeile richtig verstehe :
"return AIN xor BIN xor CIN;"
muss man erst A und B xor machen und dann das ergebnis xor mit C

Das ganze kommt mir vor wie ein halbaddierer aber wo in meiner rechnung 
is der denkfehler?

auch aus dem übertrag werde ich net schlau diese operation z.b.:

      0011  (A)
      1001  (B)
      0001  (C)

"return(AIN and BIN) or (AIN and CIN) or (BIN and CIN);"

A & B => 0001 => dann würde doch diese bedingung hier "(AIN and BIN)" 
richtig sein oder nicht? also müsste carry_out eine 1 ausgeben bleibt 
aber auf 0 hoffe jemand weiß rat
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #1576786
Lesenswert?
• ▲
▼
> ich kapier das Synthese ergebnis net ganz (siehe screenshot)
Das ist die Waveform einer Simulation, aber kein Syntheseergebnis.
Das Ergebnis der Synthese heißt RTL-Schaltplan.

> muss man erst A und B xor machen und dann das ergebnis xor mit C
Die Reihenfolge ist egal... :-o

> dann würde doch diese bedingung hier "(AIN and BIN)"
> richtig sein oder nicht?
Diese Funktionen bearbeiten über die for-Schleife jeweils nur 1 Bit, das 
ist dir bewusst?

Der Addierer funktioniert auf jeden Fall, die Simulation passt... ;-)
Gast #1576823
Lesenswert?
• ▲
▼
ok kein kopfzerbrechen mehr habs raus diese zeilen hier hätte ich mir 
genauer ansehen sollen:

 SUM_VAR(I) := SUM_FUNC(A(I),B(I),CARRY_VAR(I));
 CARRY_VAR(I+1) := CARRY_FUNC(A(I),B(I),CARRY_VAR(I));

z.b. beim ersten durchlauf

 SUM_VAR(0) := SUM_FUNC(A(0),B(0),CARRY_VAR(0));
                          1    1            0
=>  AIN xor BIN xor CIN = 0

 CARRY_VAR(1) := CARRY_FUNC(A(0),B(0),CARRY_VAR(0));
                              1    1            0
=> (AIN and BIN) or (AIN and CIN) or (BIN and CIN)
    gibt 1 zurück weil AIN and BIN = 1 ergibt und damit steht für

den nächsten durchlauf in Carry_var(1)
     SUM_VAR(1) := SUM_FUNC(A(1),B(1),CARRY_VAR(1));
                              1    0            1
eine 1 drin die operation:
     =>  AIN xor BIN xor CIN = 1 xor 0 xor 1 ergibt dann 0

ich hätte mir das mit dem übertrag genauer ansehen sollen

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