Uma Unidade Lógica Aritmética (ALU)
Simples
A ULA é a parte da CPU que é responsável por realizar operações lógicas e aritméticas.
Nesta implementação em particular, a ULA é bem simples. Ela recebe duas entradas (e1 e e2)
de 8 bits, além de outra entrada, também de 8 bits, que é o código de operação. A saída é o
resultado da operação (8 bits também) feita com as entradas e1 e e2.
As operações que a ULA deve implementar são as listadas abaixo. O código da operação é
os 3 bits menos significativos da entrada código do circuito:
Operação Código
OR 000
NAND 001
NOR 010
AND 011
ADD 100
SUB 101
Para os operadores lógicos, a operação é feita bit a bit. Para as operações aritméticas, a
operação é feita considerando os números em complemento de dois. Para somar os
números 9 e 2, por exemplo, teríamos os seguintes valores de entrada e saída:
e1 = 00001001 (9)
e2 = 00000010 (2)
código = 00000100 (ADD)
A saída será 00001011 (11)
Para realizar a subtração (SUB), a ULA converte o segundo operando em um número
negativo (em complemento de dois) e realiza a soma normalmente.Para obter o complemento
de dois invertemos os bits e somamos 1 ao número invertido. Para subtrair 2 de 9 ( 9 - 2), por
exemplo, teríamos os seguintes valores de entrada e saída:
e1 = 00001001 (9)
e2 = 00000010 (2)
código = 00000101 (SUB)
A saída será 00000111 (7)
Como dito acima, as operações lógicas são feitas com os respectivos pares de bits (bit 0 de
e1 com o bit 0 de e2 , bit 1 de e1 com o bit 1 de e2 , e assim por diante até o bit 7). Por
exemplo, para realizar a operação AND entre 9 e 10, por exemplo, teríamos os seguintes
valores de entrada e saída:
código = 00000011
e1 = 00001001 (9)
AND e2 = 00001010 (10)
---------------------
saída = 00001000 (8)
Detalhes de implementação
• Temos 6 operações. Como projetar o circuito para escolher a operação correta?
Uma forma simples de se fazer isso é deixar que todas ou algumas das
operações sejam realizadas simultaneamente, e escolher o resultado correto. Por
exemplo, as entradas e1 e e2 podem chegar tanto ao circuito AND quanto ao
OR. O resultado de cada operação é enviado a um mesmo multiplexador (2:1)
que seleciona o resultado correto e o envia à saída. O seletor do multiplexador
está, neste caso, diretamente relacionado ao código da operação (entrada
código ).
• As operações de soma e subtração podem causar overflow. Não se preocupe
com isso. Apenas ignore o bit de carry do somador.
• ⚠ Importante: para a implementação da ULA você vai utilizar apenas as portas
lógicas básicas: NOT, AND, e OR. Não use circuitos prontos da biblioteca do
Logisim como somadores, contadores, etc. Logo, se você tiver que usar, por
exemplo, um multiplexador (e você vai precisar usar alguns), você terá primeiro
que construir este circuito a partir das portas lógicas básicas para depois utilizá-
lo na ULA. No Logisim você faz isso adicionando um novo circuito no menu
Project -> Add Circuit . Depois de implementá-lo, ele aparecerá na lista de
componentes disponíveis para serem adicionados ao seu circuito principal (o
circuito da ULA).