Vejamos um somador binário de um bit.
- Tem três entradas, a parcela A, a parcela B, e o "carry-in" (o vai-um de entrada, vem-um?).
- Tem duas saídas, a soma A+B, e o "carry-out" (o vai-um de saída).
Primeiro temos de começar por saber o que é que queremos à saída para cada uma das combinações de entrada, fazemos as tabelas de verdade para as duas saídas:
Código:
Ci A B | A+B Co
-----------------
0 0 0 | 0 0
0 0 1 | 1 0
0 1 0 | 1 0
0 1 1 | 0 1
1 0 0 | 1 0
1 0 1 | 0 1
1 1 0 | 0 1
1 1 1 | 1 1
Se tens dúvidas até aqui tens de começar tudo do princípio (representação em binário, somas e subtracções, etc).
Basta olhar para ver que o bit A+B é 1 quando:
- Ci é 0 e, ou o A é 1 e B é 0, ou o A é 0 e o B é 1
- Ci é 1 e, ou o A é 0 e o B é 0, ou o A é 1 e o B é 1.
Logo: A+B = ~Ci A ~B + ~Ci ~A B + Ci ~A ~B + Ci A B
Se eu dispuser da operação XOR: A+B = A XOR B XOR Ci
De forma semelhante: Co = A B + Ci A + Ci B
Tendo o somador de um bit, pego em quatro desses somadores para fazer um somador de 4 bits, com o carry out dos menos significativos ligado ao carry in dos mais significativos.
Código:
A3 B3 A2 B2 A1 B1 A0 B0
| | | | | | | |
----- ----- ----- -----
Cout-| |---| |---| |---| |--Cin
----- ----- ----- -----
| | | |
A+B3 A+B2 A+B1 A+B0
R3 R2 R1 R0
Agora, há duas situações:
- Ou a soma é inferior a 10 e nesse caso a saída do somador BCD de um algarismo é igual àqueles quatro bits de saída e o Cout é 0.
- Ou a soma é superior ou igual a 10, e nesse caso, tenho que subtrair 10 àquele resultado. Como é que eu faço isso? Com outro somador binário de quatro bits.
Escusado será dizer que a soma é igual ou superior a 10 se ou o Cout é 1 ou R3 for 1 E R1 OU R2 forem 1, ou seja Cout + R3 (R2 + R1). Chamemos a esta decisão a variável D.
Em esboço:
Código:
A3 B3 A2 B2 A1 B1 A0 B0 Ci
| | | | | | | | |
--------------------- |
| |----
---------------------
| | | |
R3 0 R2 1 R1 1 R0 0
| | | | | | | |
---------------------
| |--0
---------------------
| | | |
Y3 Y2 Y1 Y0
Cout = D
~D R3 Y3 D ~D R3 Y2 D ~D R1 Y1 D ~D R0 Y0 D
| | | | | | | | | | | | | | | |
AND AND AND AND AND AND AND AND
| | | | | | | |
--- --- --- --- --- --- --- ---
| | | | | | | |
OR OR OR OR
| | | |
Z3 Z2 Z1 Z0
Subtrair 10 (dez) ao resultado, é o mesmo que adicionar -10, se eu representar -10 em complemento para dois fica 0110.
As saídas do somador BCD de um algarísmo são o Z3, Z2, Z1, Z0 e Cout, que é o vai-um.
Para a resposta final ao teu exercício basta juntar dois destes lado a lado.
PS: Isto é o problema de vos porem primeiro um programa (circuit maker) na frente em vez de aprender como se faz no papel.
A vossa geração fica com a impressão de que há um programa para tudo, se eu quiser fazer X, então basta instalar e usar o programa Y. E a culpa não é vossa... Neste fórum, vemos perguntas como "Que programa utilizar para programar?"........
É perfeitamente possível desenhar um microprocessador pequeno só em papel.
Nenhum programa substitui o saber fazer. Os programas só servem para ajudar, tornar menos cansativo o nosso trabalho (evitar a borracha, os fios que ficam emaranhados, meter uma escala).