Baixe o app para aproveitar ainda mais
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
Compartilhar