ULA
Unidade Lógica Aritmética (ULA) é a parte da Unidade de Processamento (CPU) responsável por realizar operações binárias.
Leitura necessária
Warning
Estudar pelo livro, o restante dessa teoria é apenas um resumo e algumas notas.
Tip
No coursera temos os autores do livro dando uma aula sobre esse tópico.
Arquitetura
A ULA utilizada no curso tem a seguinte arquitetura interna:
Os sinais do diagrama são:
X
eY
: Entradas de 16 bitsOUT
: Saída da ULAzx, nx, zy, ny, f, no
: Sinais de controle da ULAzr
eng
: Saída de flags da ULA e que a operação realizada na ULA:zr
: resultou em zerong
: resultou em um número negativo
Operações
As operações suportadas pela ULA são (OUT):
0
: Gera o valor 0 (000000000000000
)1
: Gera o número 1 (000000000000001
)-1
: Gera o número -1 (111111111111111
)X
: Replica a entrada XY
: Replica a entrada Y!X
: Inverte bit a bit a entrada X!Y
: Inverte bit a bit a entrada Y-X
: Nega (complemento de dois) a entrada X-Y
: Nega (complemento de dois) a entrada YX+1
: Soma um a entrada XY+1
: Soma um a entrada YX-1
: Subtrai um da entrada XY-1
: Subtrai um da entrada YX+Y
: Soma as entradas X e YX-Y
: Subtrai Y de XY-X
: Subtrai X de YY&X
: Realiza a opera AND bit a bit de X com YY|X
: Realiza a opera or bit a bit de X com Y
Controle
Para realizar as operações é necessário controlar o sinais de controle da ULA, a tabela a seguir indica o que deve ser feito para cada umas das operações suportadas:
zx | nx | zy | ny | f | no | out |
---|---|---|---|---|---|---|
1 | 0 | 1 | 0 | 1 | 0 | 0 |
1 | 1 | 1 | 1 | 1 | 1 | 1 |
1 | 1 | 1 | 0 | 1 | 0 | -1 |
0 | 0 | 1 | 1 | 0 | 0 | x |
1 | 1 | 0 | 0 | 0 | 0 | y |
0 | 0 | 1 | 1 | 0 | 1 | !x |
1 | 1 | 0 | 0 | 0 | 1 | !y |
0 | 0 | 1 | 1 | 1 | 1 | -x |
1 | 1 | 0 | 0 | 1 | 1 | -y |
0 | 1 | 1 | 1 | 1 | 1 | x+1 |
1 | 1 | 0 | 1 | 1 | 1 | y+1 |
0 | 0 | 1 | 1 | 1 | 0 | x-1 |
1 | 1 | 0 | 0 | 1 | 0 | y-1 |
0 | 0 | 0 | 0 | 1 | 0 | x+y |
0 | 1 | 0 | 0 | 1 | 1 | x-y |
0 | 0 | 0 | 1 | 1 | 1 | y-x |
0 | 0 | 0 | 0 | 0 | 0 | x&y |
0 | 1 | 0 | 1 | 0 | 1 | x| y |
Operação não trivial
A maioria das operações da nossa ULA são imediatas, a menos imediata de entender é a operação y-x
, nesse caso, se olharmos a operação que é realizada na ULA para executar isso notamos que:
- \(y-x=\overline{x+\bar{y}}\)
- esse
+
é de operação de soma, não OR!
- esse
- Precisamos fazer um truque, note que: \(\bar{y}=-y-1\)
- Substituindo: \(\overline{x+ (-y -1)}\)
- Podemos chamar: \(x+ (-y -1) = z\)
- \(\overline{z}\), aplicando a mesma substituição que 2.
- \(\overline{z}=-z-1\), recuperando
z
- \(-y-x=-(x -y -1)-1\)
- \(y-x=-x+y\)