Universidade Federal Rural de Pernambuco
Unidade Acadêmica de Serra Talhada
UNIDADE LÓGICA ARITMÉTICA - ULA
Infraestrutura de Hardware
FABRÍCIO DE MENESES LUNA
UNIDADE LÓGICA ARITMÉTICA – ULA
INTRODUÇÃO
A unidade lógica e aritmética (ULA) ou em inglês Arithmetic Logic
Unit (ALU) é um circuito digital que realiza operações lógicas e aritméticas. A
ULA é uma peça fundamental da unidade central de processamento (CPU), e
até dos mais simples microprocessadores. É na verdade, uma "grande
calculadora eletrônica" do tipo desenvolvido durante a II Guerra Mundial, e sua
tecnologia já estava disponível quando os primeiros computadores modernos
foram construídos.
PROJETO
A unidade lógica aritmética deverá ser capaz de executar as seguintes operações, que serão selecionadas a partir dos códigos da tabela abaixo:
Seleção F u n ç ã o
S2 S1 S0
0 0 0 F = A + B
0 0 1 F = A - B
0 1 0 F = Complemento a 2 de B
0 1 1 F = A = B
1 0 0 F = A > B
1 0 1 F = A < B
1 1 0 F = A AND B
1 1 1 F = A XOR B
Entradas: 1. Dois vetores A e B de 4 bits (1 para sinal e 3 para o módulo) representando os operandos. Esses números são binários positivos ou negativos (complementados a 2). 2. Um vetor S de 3 bits representando o seletor da operação segundo a tabela exibida acima. Saídas: 1. Um vetor F de 4 bits representando o resultado da operação (para os casos em que a operação retorna um vetor). 2. Um sinal representando overflow (para as operações que podem gerar overflow) 3. Um sinal representado status (para as operações que retornam um booleano)
Esquema de circuitos lógicos da ULA
Componentes
Entradas
Dois vetores de (A e B) de 4 bits, sendo o primeiro bit de sinal (0 para
positivo e 1 para negativo). Caso o número seja negativo, deve-se usar
“Complemento a 2” para representa-lo
Chave seletora
Encarregada de determinar qual função será usada de a acordo com a
seleção, obedecendo o quadro a seguir:
Seleção F u n ç ã o
S2 S1 S0
0 0 0 F = A + B
0 0 1 F = A - B
0 1 0 F = Complemento a 2 de B
0 1 1 F = A = B
1 0 0 F = A > B
1 0 1 F = A < B
1 1 0 F = A AND B
1 1 1 F = A XOR B
Display de 7 segmentos
Foi utilizado o esquema de display de7 segmentos para mostrar as
entradas (A e B), e também, para representar a saída. O display inserido a
esquerda, possui apenas a ligação com o bit de sinal de sua respectiva entrada
ou saída, caso o bit seja 1, o sinal do centro é aceso. O display é capaz de
mostrar números de -7 a 7
Circuito do Display de 7 Segmentos
Temos 4 entradas e 7 saídas, porém no projeto utilizamos apenas 3
entradas, uma vez que o primeiro bit é usado para representar o sinal dos
números. Cada saída do circuito é ligada a um led do display, que acenderá caso
o bit seja 1.
No projeto, dadas as entradas, são ligadas a um circuito
SomadorSubtrator cuja sua saída é ligada a entrada do circuito do display. Essa
medida foi tomada para no caso dos elementos negativos, o circuito realizará o
complemento a 2 para representa-los.
Somador-Subtrator
É o principal circuito, onde todas as funções passam por ele para serem
computadas. Recebe 9 bits de entrada, sendo 4 de A, 4 de B e 1 bit de seleção
(0 para soma e 1 para subtração. Temos 4 bits de saída para o resultado e 1 bit
de saída para Overflow.
Circuito Somador-Subtrator
Temos 4 Somadores Completos ligados em sequência, onde recebem as
entradas A e B, e também a entrada de seleção (0 para soma e 1 para
subtração). No caso de soma, as entradas de A e B entram diretamente nos
somadores completos para que possa ser realizada a operação.
Já em caso de subtração, a chave seletora, envia 1 como entrada não só
para o primeiro somador completo, mas também para os XOR’S onde as
entradas de B estão ligadas. Sendo assim, todas as entradas de B serão
invertidas (1 por 0 e 0 por 1), realizando o complemento a 1. E somando isso a
1 bit de entrada no primeiro somador completo, é possível se obter o
complemento a 2, gerando o número negativo.
Temos 4 bis de saída, sendo 1 de sinal e 1 bit de Overflow. O overflow
indica que o resultado da operação não deverá ser usado. As condições para
que haja overflow são as seguintes:
Operação Operador A Operador B Resultado Indicando Overflow
A+B >=0 >=0 <0
A+B <0 <0 >=0
A-B >=0 <0 <0
A-B <0 >=0 >=0
Somador Completo
Utilizado em sequência para formar o somador subtrator. Trata-se de um
circuito que recebe 2 bits de entrada (A e B) e também o Cin (Vem um). Tem
como saída S (resultado da soma) e Cout (Vai um).
Multiplexador de 2 entradas e 1 seletor
Foram utilizados multiplexadores de 2 entradas e 1 seletor para realizar a
função “Complemento a 2 de B”. Temos uma das entradas aterradas (sempre
será 0) e a outra entrada é “A”.
Vemos no circuito a seguir que existe uma porta AND cujas entradas são
a seleção de função. Essa porta serve para ativar os multiplexadores caso a
seleção seja 010 (Complemento a 2 de B).
Sendo assim, caso a opção de “Complemento a 2 de B” seja selecionada,
é realizada a subtração de B em 0 (zero), pois com a ativação dos
multiplexadores, independentemente do valor de A, a entrada no Somador-
Subtrator será sempre 0 (zero).
Circuito do Multiplexador de 2 entradas e 1 seletor.
Dadas as entradas X que no projeto representa o valor aterrado (sempre
zero) e Y que representa o valor da entrada principal A. Temos como entrada
também a chave de seleção. Caso a chave marque 0, o valor a ser passado é o
valor de Y (Nesse caso, o valor da entrada principal: A), caso a chave marque 1,
o valor a ser passado é o valor de X (valor aterrado, sempre zero).
XOR
Temos 8 entradas, 4 bits de A e 4 Bits de B, com 4 saídas.
Circuito XOR
Dadas as entradas A e B, é realizada a função XOR em cada elemento,
resultando em 4 saídas. A0 xor B0; A1 xor B1; A2 xor B2; A3 xor B3.
AND
Temos 8 entradas, 4 bits de A e 4 Bits de B, com 4 saídas.
Circuito AND
Dadas as entradas A e B, é realizada a função AND em cada elemento,
resultando em 4 saídas. A0 and B0; A1 and B1; A2 and B2; A3 and B3.
Funções A=B; A>B; A<B
Para realizar a função: A=B, realizamos a subtração A-B. Caso o resultado
seja 0, o resultado é verdadeiro. Para que isso seja mostrado, é usado um OR
com as entradas sendo as saídas da subtração e a saída desse OR é negada.
Ou seja, para a saída ser verdadeira, todas as entradas devem ser zero.
Para realizar a Função A>B, também realizamos a subtração A-B, mas
dessa vez, é preciso que pelo menos uma das saídas seja 1 e que o bit de sinal
seja 0.
Para a função A<B, mais uma vez é feita a subtração A-B, e para o
resultado, basta termos um AND negando A=B e A>B. Ou seja, Se A não é maior
nem igual a B, será menor.
Multiplexador de 8 entradas e 3 seletores
Temos 5 multiplexadores, sendo 4 para resultados em forma de vetor e
um para resultado sendo apenas um bit de sinal (booleano).
Em cada multiplexador temos 8 entradas de dados, e 3 seletores, que são
justamente a chave de seleção que indica qual função deverá ser usada.
Circuito Multiplexador de 8 entradas e 3 seletores
Como foi visto, se tem 8 entradas e 3 seletores. Os seletores recebem o
valor da chave de seleção que indica qual função deverá ser usada. Das 8
entradas, apenas 1 será selecionada.
Temos as 3 primeiras entradas (da direita para a esquerda) para a Soma,
Subtração e Complemento a 2 de B). Isso é possível, pois o resultado dessa
entrada já foi filtrado pelo Somador-Subtrator, que realizou a operação de acordo
com a chave de seleção. A 4ª entrada é a operação A=B, a 5ª A>B, a 6ª A<B. A
7ª entrada recebe a função A and B e a 8ª recebe A xor B.
Saídas
Se tem como saída, um vetor de 4 bits ou um sinal de status para os
resultados booleanos. Esses resultados são obtidos após as informações
passarem pelo multiplexador. Foi inserido também um circuito de display de 7
segmentos para mostrar nos displays as respostas, caso seja o vetor.
Overflow
É acionado caso exista a condição descrita no quadro visto em
Somador-Subtrator, e em qualquer outro caso em que o resultado não deverá
ser considerado.
Erros encontrados
Em operações que o resultado seria 8 (valor a cima do limite da ULA), o
resultado mostrado era “-0” e o overflow não era indicado. Para contornar esse
erro, foi feita a condição para que caso ocorra, o overflow é aceso, indicando que
o resultado não é válido.
Explicando as funções
A+B (000)
Recebe-se como entradas A e B, os valores são mostrados em seus
respectivos displays e enviados para o Somador-Subtrator, que realiza a
operação de soma e manda o resultado para os multiplexadores, que identificam
de acordo com a chave seletora e por fim, exibem o resultado, em leds e também
no display.
A-B (001)
Recebe-se como entradas A e B, os valores são mostrados em seus
respectivos displays e enviados para o Somador-Subtrator, que realiza a
operação de subtração usando o complemento de 2 e manda o resultado para
os multiplexadores, que identificam de acordo com a chave seletora e por fim,
exibem o resultado, em leds e também no display.
Complemento a 2 de B (010)
Recebe-se como B, que é mostrado no display, o valor de A não é usado
o valor é enviado para o Somador-Subtrator, que realiza a operação subtraindo
B de 0 usando complemento de 2 e manda o resultado para os multiplexadores,
que identificam de acordo com a chave seletora e por fim, exibem o resultado,
em leds e também no display.
A=B (011)
Recebe-se como entradas A e B, os valores são mostrados em seus
respectivos displays e enviados para o Somador-Subtrator, que realiza a
operação de subtração e caso o resultado seja “0”, a operação é verdadeira. O
resultado é enviado para o multiplexador, que identifica de acordo com a chave
seletora e por fim, exibem o resultado no led de status.
A>B (100)
Recebe-se como entradas A e B, os valores são mostrados em seus
respectivos displays e enviados para o Somador-Subtrator, que realiza a
operação de subtração e caso o resultado não seja “0” e o bit de sinal seja igual
a “0” a operação é verdadeira. O resultado é enviado para o multiplexador, que
identifica de acordo com a chave seletora e por fim, exibem o resultado no led
de status.
A<B (101)
Recebe-se como entradas A e B, os valores são mostrados em seus
respectivos displays e enviados para o Somador-Subtrator, que realiza a
operação de subtração e caso o resultado não seja “0” e também não seja A>0,
a operação é verdadeira. O resultado é enviado para o multiplexador, que
identifica de acordo com a chave seletora e por fim, exibem o resultado no led
de status.
A and B (110)
Recebe-se como entradas A e B, os valores são mostrados em seus
respectivos displays e enviados para o circuito AND, onde é feita a comparação
bit a bit, é enviado o resultado para os multiplexadores, que identificam de acordo
com a chave seletora e por fim, exibem o resultado, em leds e também no
display.
A xor B (111)
Recebe-se como entradas A e B, os valores são mostrados em seus
respectivos displays e enviados para o circuito XOR, onde é feita a comparação
bit a bit, é enviado o resultado para os multiplexadores, que identificam de acordo
com a chave seletora e por fim, exibem o resultado, em leds e também no
display.
Dificuldades encontradas
Uma das dificuldades encontradas foi na exibição de valores a serem
mostrados no display, que foi tratado utilizando o circuito Somador-Subtrator
juntamente como circuito de Display de 7 Segmentos.
Outra dificuldade encontrada, foi quanto ao tratamento de Overflow, que
foi feito com a ajuda a tabela de condições de Overflow do livro: Organização e
projeto de computadores : [a interface hardware-software] - 3. ed. / 2005.