Montando o circuito da unidade lógica e aritmética (ALU) - Parte 1
Hoje, vamos tratar de uma das partes mais importantes de um computador: a unidade lógica e aritmética (ULA).
Circuito da unidade aritmética em teste com o barramento (os LEDs azuis são para demonstrar o estado do barramento :)
Como este assunto é um pouco mais complexo do que os anteriores, vamos estudá-lo e montá-lo em duas partes:
a unidade aritmética;
a unidade lógica e o circuito de seleção de operação lógica ou aritmética (soma, subtração, e, ou, etc).
Nessa primeira parte, como mostrado acima, trataremos da unidade aritmética.
Este estudo dependerá de uma boa dose de lógica booleana. Portanto, abra seu baú do conhecimento e resgate a lógica das portas XOR, a soma e subtração binária, a lógica do complemento de 2, etc.
O circuito aritmético que montamos faz duas operações básicas: soma e subtração de números binários. Como se sabe, as operações de multiplicação e divisão nada mais são do que somas e subtrações binárias sucessivas.
Para que nosso circuito seja capaz de fazer subtrações, estamos trabalhando com circuitos que implementam a lógica do complemento de 2. Para quem não se lembra, o complemento de 2 é uma forma de se escrever um número binário negativo.
Para transformarmos um número binário positivo em negativo, seguimos os seguintes passos:
complementa-se (transforma-se os 0s em 1s e os 1s em 0s) todos os dígitos binários do número;
ao valor complementado, soma-se 1.
Por exemplo, transformando o número 13 em -13 pela lógica do complemento de 2:
00001101 <--- número 13 em binário
11110010 <--- complemento
+ 1 <--- soma-se 1 ao complemento
11110011 <--- resultado: -13
Outra coisa que se faz necessário lembrar, como eu já disse, é a lógica da porta XOR (ou exclusivo - eXclusive OR):
A B SAÍDA
Você deve estar se perguntando: "Mas porquê tudo isso?".
Como precisaremos implementar o complemento de 2 para podermos efetuar subtrações no nosso circuito aritmético, faremos isso utilizando portas lógicas do tipo XOR e, mais ainda, utilizaremos o bit de carry do somador (calma, falarei mais sobre ele).
Vou colocar a porta XOR aqui para ficar melhor para entender.
Cada porta XOR (usaremos 8 pois nosso computador é de 8 bits) complementa 1 bit do nosso número.
A coisa funciona da seguinte maneira e é bastante simples (analise a tabela da porta XOR que escrevi acima):
Quando temos a entrada B da porta XOR em LOW (nível lógico baixo - 0), a saída S recebe o valor de A, ou seja, se A estiver em HIGH (nível lógico alto -1) e B em LOW, S recebe HIGH.
Por outro lado, quando a entrada B da porta XOR estiver em HIGH, a saída recebe o valor de A complementado. Olha aí o pulo do gato! (Confira a lógica pela tabela da porta XOR).
Novamente, lembre-se de que teremos 8 portas XOR. Uma para tratar cada um dos bits do nosso número de 8 bits (1 byte).
Até esse momento, temos nosso número complementado. Mas, ainda precisamos somar 1 à esse resultado para que tenhamos nosso número negativo pela lógica do complemento de 2.
Agora vem o segundo pulo do gato:
Como estamos trabalhando com somadores (full adders) com carry, se você se lembrar, toda vez que há um "estouro" na soma feita pelo somador, ele ativa um bit de carry, dizendo que precisa "mandar um" para a próxima casa. Esse é o famoso "vai um".
Em nosso circuito utilizamos dois 74LS283, que são somadores binários de 4 bits com carry (4-bit full adder with fast carry).
Para fazer a soma de 1 que precisamos, fizemos o seguinte:
Quando houver um "estouro" no somador menos significativo (o que trata dos 4 bits menos significativos do nosso byte), ele habilitará o pino de carry-out que está ligado ao pino de carry-in do somador mais significativo. Esse, por sua vez, ao receber esse sinal de carry, somará 1 automaticamente ao resultado.
Com isso, teremos nosso número complementado e adicionado de 1!
É claro que isso somente é utilizado no caso da subtração pois, com o número complementado de 2, podemos fazer a soma desses números (um positivo e outro negativo, por exemplo). Portanto, nosso circuito faz somente somas!
Em tempo: o circuito integrado utilizado para as portas XOR é o 74LS86 que é um CI com 4 portas XOR de 2 entradas.
Vou deixar algumas fotos abaixo, dessa primeira parte do circuito da ULA e, também, da base que suportará nosso computador de 8 bits. Para a base, comprei um quadrado de MDF de 40 x 40 cm e estou colando as protoboards nela com a fita que vem nas próprias protoboards.
Como já estou montando o computador em sua base, os circuitos do IR e do registrador B ainda não foram colados.