En los diagramas, las líneas a la derecha son salidas y todas las demás (desde arriba, abajo o izquierda) son entradas.
next b0 b1 b2
number B0 ─ XOR ─┬──┘ B1 ─ XOR ─┬──┘ B2 ─ XOR ─┬──┘
counter ┌──┘ └─ NOT ─┐ ┌──┘ └─ NOT ─┐ ┌──┘ └─ NOT ─┐
1 ─┴──────────── AND ─c1─┴──────────── AND ─c2─┴──────────── AND ── ...
c[0] = 1 | Note: sum[i] = c[ i ] + B[i]
for i in n | = 2*c[i+1] + b[i]
b[ i ] = B[i] ^ c[i] | = c[i+1] <<1 + b[i]
c[i+1] = ~b[i] & c[i] | = (~b[i] & c[i]) <<1 + b[i]
carry-out = c[n+1] | = (B[i] ^ c[i]) +
| (~(B[i] ^ c[i]) & c[i]) <<1
Si se debe usar un medio sumador:
b[i]
B ────┬── XOR ──── to use a half B[i] ──┬───────┬───── XOR ────┘
┌──────┘ half adder without │ ┌─ XOR ─────┘
│ └────┐ adder circuit trace XOR ─┤
C ──┴──── AND ──── crossings you │ └─ XOR ─────┐
can use this: C[i] ──┴───────┴───── AND ─ c[i+1] ── ...
Un simple decremento es una negación complementada: D-1 = ~-D
.
La negación es el complemento de 2, que es un complemento incrementado: -D = ~D +1
.
Por lo tanto, D-1 = ~(~D +1)
, así que una complementación combinacional (paralela) a lo largo de los bits antes y después
Basta un incremento secuencial.
Sin embargo, enlace el circuito de decremento secuencial es aún más simple:
previous d0 d1 d2
count D0 ── XOR ─┬──┘ D1 ── XOR ─┬──┘ D2 ── XOR ─┬──┘
(decrement) ┌──┘ └──┐ ┌──┘ └──┐ ┌──┘ └──┐
1 ─┴─────── AND ─ b1 ─┴─────── AND ─ b2 ─┴─────── AND ── ...
b[0] = 1
for i in n
d[ i ] = D[i] ^ b[i]
b[i+1] = d[i] & b[i]
borrow-out = b[n+1]