Buscar

Circuitos Combinacionais4

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Circuitos combinacionais
Subtrator paralelo
Subtração binária é realizada a partir de uma soma
A – B = A + (-B)
Os números envolvidos na subtração devem ser interpretados como números em complemento de 2
Pode-se obter a representação negativa de um número positivo qualquer em complemento de 2
Basta inverter todos bits (complemento) e somar 1
-B = !B + 1
1
Circuitos combinacionais
Subtrator paralelo
Exemplo utilizando 4 bits para operandos e resultado
3 – 1 ↔ 3 + (-1)			5 – 8 ↔ 5 + (-8) 
 1 → 00012			 8 → 10002
-1 → 11102 + 12 = 11112		-8 → 01112 + 12 = 10002
	 1 1 1 1 		 0 0 0 0
	 00112 (3) 		 01012 (5)
	+ 11112 (-1) 		+ 10002 (-8)
	 00102 (2) 		 11012 (-3)
	
2
Não é “colocado” no resultado porque ele deve conter apenas 4 bits
Circuitos combinacionais
Subtrator paralelo
A – B = A + (-B) ↔ A + (!B + 1) = A + !B + 1
Construído a partir de um somador paralelo
A1
B1
S1
FA
A2
B2
S2
FA
A3
B3
S3
FA
A0
B0
S0
FA
0
Carry out
Carry in
Somador paralelo: A + B + 0
3
A0
B0
A1
B1
A2
B2
A3
B3
S3
S2
S1
S0
Circuitos combinacionais
Subtrator paralelo
A – B = A + (-B) ↔ A + (!B + 1) = A + !B + 1
Subtrator de 4 bits
!B
+ 1
4
A0
B0
A1
B1
A2
B2
A3
B3
S3
S2
S1
S0
Circuitos combinacionais
Subtrator paralelo
A – B = A + (-B) ↔ A + (!B + 1) = A + !B + 1
Subtrator de 4 bits
Exemplo: 7 - 5
01112 - 01012
1
1
1
0
0
1
0
1
0
0
1
1
0
1
1
1
0
1
0
1
2
5
A0
B0
A1
B1
A2
B2
A3
B3
S3
S2
S1
S0
Circuitos combinacionais
Subtrator paralelo
A – B = A + (-B) ↔ A + (!B + 1) = A + !B + 1
Subtrator de 4 bits
Exemplo: 5 - 7
01012 - 01112
1
1
1
0
1
1
0
0
0
0
0
1
0
1
1
0
1
0
1
0
-2
6
A0
B0
A1
B1
A2
B2
A3
B3
S3
S2
S1
S0
Circuitos combinacionais
Subtrator paralelo
Sempre que se trabalha com subtração, os operarandos e o resultado estão representados em complemento de 2
Exemplo: 5 - 7
01012 - 01112
1
1
1
0
1
1
0
0
0
0
0
1
0
1
1
0
1
0
1
0
-2
7
Circuitos combinacionais
Utilizando um somador, um subtrator e um multiplexador, implementar um circuito que faz 
R ← A + B quando controle = 0
R ← A – B quando controle = 1
A + B
A - B
R
A
B
n
n
Controle
n
n
n
n
8
Circuitos combinacionais
Somador/Subtrator paralelo
Substituir inversores por portas XOR
Adicionar entrada de controle para indicar a operação
A0
B0
A1
B1
A2
B2
A3
B3
S3
S2
S1
S0
9
A0
B0
S0
0: Soma
1: Subtração
Circuitos combinacionais
Somador/Subtrator paralelo
Substituir inversores por portas XOR
Adicionar entrada de controle para indicar a operação
1
1
1
0
0
A
B
S
0
0
0
0
1
1
1
0
1
1
1
0
XOR
10
Circuitos combinacionais
Somador/Subtrator paralelo
Substituir inversores por portas XOR
Adicionar entrada de controle para indicar a operação
A0
B0
0: Soma
1: Subtração
1
1
0
1
1
S0
A
B
S
0
0
0
0
1
1
1
0
1
1
1
0
XOR
11
Circuitos combinacionais
Somador/Subtrator paralelo
Substituir inversores por portas XOR
Adicionar entrada de controle para indicar a operação
A0
B0
A1
B1
A2
B2
A3
B3
Invertem o valor de B (!B) quando Controle = 1
+ 1 quando Controle = 1
Controle
S
0
A + B
1
A - B
S3
S2
S1
S0
12
Circuitos combinacionais
Somador/Subtrator paralelo
Substituir inversores por portas XOR
Adicionar entrada de controle para indicar a operação
A0
B0
A1
B1
A2
B2
A3
B3
Exemplo: 3 + 4
00112 + 01002
0
1
0
0
0
1
0
1
0
0
0
0
0
0
0
0
1
0
1
0
1
0
1
0
0
0
7
S3
S2
S1
S0
13
Circuitos combinacionais
Somador/Subtrator paralelo
Substituir inversores por portas XOR
Adicionar entrada de controle para indicar a operação
A0
B0
A1
B1
A2
B2
A3
B3
Exemplo: 3 - 4
00112 - 01002
0
1
0
0
0
1
0
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
0
1
0
-1
S3
S2
S1
S0
14
Circuitos combinacionais
Somador/Subtrator paralelo
Detecção de overflow em complemento de 2
Se os dois últimos carries são diferentes → overflow
0
A0
B0
A1
B1
A2
B2
A3
B3
 0 1 1 0 
 01112 (7)
+ 00102 (2)
 10012 (-7)
carries diferentes
15
Circuitos combinacionais
Somador/Subtrator paralelo
Detecção de overflow em complemento de 2
Se os dois últimos carries são diferentes → overflow
A0
B0
A1
B1
A2
B2
A3
B3
S3
S2
S1
S0
 0 1 1 0 
 01112 (7)
+ 00102 (2)
 10012 (-7)
carries diferentes
Verifica se os dois últimos carries são diferentes
16
Circuitos combinacionais
Somador/Subtrator paralelo
Detecção de overflow em complemento de 2
Se os dois últimos carries são diferentes → overflow
Exemplo: 7 + 2
01112 + 00102
A0
B0
A1
B1
A2
B2
A3
B3
0
1
1
0
1
0
0
1
0
0
0
0
0
0
0
1
0
0
1
0
0
1
0
1
1
0
1
-7
Resultado errado: 7 + 2 = 9. Intervalo representável utilizando 
4 bits em complemento de 2: -8 a 7
S3
S2
S1
S0
17
Circuitos combinacionais
Somador/Subtrator paralelo
Overflow em representação binária direta (soma)
Último carry indica o overflow
Exemplo: 15 + 1
11112 + 00012
A0
B0
A1
B1
A2
B2
A3
B3
1
1
1
1
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
1
0
1
0
1
0
1
0
0
Resultado errado: 15 + 1 = 0. Intervalo representável utilizando 
4 bits em representação binária direta: 0 a 15
S3
S2
S1
S0
18
Circuitos combinacionais
Somador/Subtrator paralelo
Logisim
19
Circuitos combinacionais
Somador/Subtrator paralelo
Subtrator pode ser usado como comparador
A – B → resultado positivo: A > B
A – B → resultado negativo: A < B
A – B → 0: A = B
Para detectar resultado negativo, basta olhar o bit mais significativo do resultado
Para detectar resultado = 0, pode-se usar uma porta NOR ligada a todos bits do resultado
S0
S1
S2
S3
20
Circuitos combinacionais
Operações lógicas bit-a-bit (bitwise)
Além de operações aritméticas entre dois operandos, é muito comum realizar operações lógicas entre eles
As operações lógicas bit-a-bit (bitwise) são aplicadas individualmente em cada um dos bits dos operandos
OR, AND, NOT, XOR, ...
100111002
110100102
op
21
Circuitos combinacionais
Operações lógicas bit-a-bit (bitwise)
OR bit-a-bit
A0
B0
A1
B1
A2
B2
A3
B3
S3
S2
S1
S0
Exemplo: 10 OR 6
10102 OR 01102
0
0
0
1
1
1
0
1
0
1
1
1
10102
01102
11102
OR
22
Circuitos combinacionais
Operações lógicas bit-a-bit (bitwise)
AND bit-a-bit
A0
B0
A1
B1
A2
B2
A3
B3
S3
S2
S1
S0
Exemplo: 10 AND 6
10102 AND 01102
0
0
0
1
1
1
0
1
0
1
0
0
10102
01102
00102
AND
23
Circuitos combinacionais
Operações lógicas bit-a-bit (bitwise)
NOT (complemento)
A0
A1
A2
A3
S3
S2
S1
S0
Exemplo: !6
!(01102) = 10012
0
1
0
1
1
0
0
1
24
Circuitos combinacionais
Operações lógicas bit-a-bit (bitwise)
Outras operações bit-a-bit podem ser implementadas de maneira semelhante
XOR
XNOR
NOR
NAND
25
Circuitos combinacionais
Operações lógicas bit-a-bit (bitwise)
A linguagem de programação C dá suporte a operações lógicas bit-a-bit
AND bit-a-bit: &
AND lógico: && (usado em expressões condicionais)
OR bit-a-bit: |
OR lógico: || (usado em expressões condicionais)
NOT bit-a-bit: ~
NOT lógico: ! (usado em expressões condicionais)
XOR bit-a-bit: ^
26
Circuitos combinacionais
Operações lógicas bit-a-bit (bitwise)
Exemplo
void main() {
 
 // Variáveis de 8 bits
 char a = 0x1A;	// a = 000110102
 char b = 0x26; 	// b = 001001102
 char c; 
 c = a & b;		// c = 000000102
 c = a | b;		// c = 001111102
 c = a ^ b;		// c = 001111002
 c = ~a		// c = 111001012
 c = ~(a & b); 	// c = 111111012 (NAND)
 c = ~(a ^ b);	// c = 110000112 (XNOR)
 c = ~(a | b);	// c = 110000012 (NOR)
}
27
Circuitos combinacionais
Operações lógicas bit-a-bit (bitwise)
Exemplo: verificar se um número é par ou impar
void main() {
 
 char n = 13;
 if ( (n % 2) == 0 )
 printf(“n é
par\n”);
 else
 printf(“n é impar\n”); 
}
28
Circuitos combinacionais
Operações lógicas bit-a-bit (bitwise)
Exemplo: verificar se um número é par ou impar
void main() {
 
 char n = 13;
 if ( (n & 1) == 0 )
 printf(“n é par\n”);
 else
 printf(“n é impar\n”); 
}
 000011012 (13)
& 000000012 (1)
 000000012
 000010102 (10)
& 000000012 (1)
 000000002
29
Circuitos combinacionais
ULA (Unidade Lógica/Aritmética)
Realiza operações lógicas e aritméticas sobre as entradas dependendo da operação especificada
Tipicamente contém flags com indicativos em relação ao resultado
Resultado negativo (N), Resultado é zero (Z), Overflow em complemento de 2 (V) e Carry (C)
m
Operação
N
V
Z
A
B
R
n
n
n
C
Depende do número de operações
A
B
ULA
R
n
n
Operação
n
m
N
Z
V
C
Uma das partes mais importantes de qualquer processador
30
Circuitos combinacionais
ULA (Unidade Lógica/Aritmética)
Exemplo: ULA de 8 bits com 8 operações e dois flags (N e Z)
Operação
R
0
0
0
!A
0
0
1
AAND B
0
1
0
A
0
1
1
AOR B
1
0
0
A--
1
0
1
A+ B
1
1
0
A– B
1
1
1
A++
ULA
R
A
B
8
8
Operação
8
3
N
Z
Operação2 = 0: Lógica
Operação2 = 1: Aritmética
31
Circuitos combinacionais
ULA (Unidade Lógica/Aritmética)
Utilizando multiplexadores, circuitos lógicos e aritméticos, construir a ULA abaixo
Operação
R
0
0
0
!A
0
0
1
AAND B
0
1
0
A
0
1
1
AOR B
1
0
0
A--
1
0
1
A+ B
1
1
0
A– B
1
1
1
A++
AND
n
n
n
OR
n
n
n
NOT
n
n
ULA
R
A
B
8
8
Operação
8
3
N
Z
Somadores/Subtratores podem ser replicados para cada uma das operações aritméticas
32

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais