Sistemas Digitais Circuitos Aritméticos e Representação de Números com Sinal João Paulo Baptista de Carvalho (Prof. Auxiliar do IST) [email protected] Circuitos Aritméticos Circuitos aritméticos são aqueles que realizam operações aritméticas sobre números binários O circuito aritmético mais simples é o que soma números de apenas 1 bit. Basta partir da conhecida tabela da soma para o obter: XY Soma Transporte X+Y X=0 X=1 00 0 0 Y=0 0 1 01 1 0 Y=1 1 10 10 1 0 11 0 1 Uke2010 SD - Circuitos Aritméticos 2 Semi-somador (half-adder) Da tabela retira-se o seguinte circuito, que é conhecido como semi-somador: AB Soma (S) Transporte (Cout) 00 0 0 01 1 0 10 1 0 11 0 1 O nome semi-somador vem do facto de este circuito não permitir somar o transporte que venha de bits de menor peso Uke2010 SD - Circuitos Aritméticos 3 Somador Completo (full-adder) A um somador de 1 bit que tenha em conta o transporte de somas anteriores chama-se somador completo: A B Cin S Cout 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 1 1 0 1 0 1 1 1 Semi-somadores Uke2010 SD - Circuitos Aritméticos 4 Somadores Assumindo blocos de somadores completos, é possível construir somadores de n bits Exemplo: Um somador de 4 bits Símbolo de um Somador Completo de 4 bits: Somador Completo Σ 0 A0 B0 A1 B1 A2 B2 A3 P B3 3 0 S 0 ci co Q 3 3 CI S0 Uke2010 S1 S2 CO S3 SD - Circuitos Aritméticos 5 Somas em BCD As operações aritméticas em BCD podem ser úteis quando se têm números em BCD sobre os quais se pretende fazer pequenas operações que não justificam a conversão para binário A soma em BCD é feita dígito a dígito. Por exemplo, a soma dos dígitos 3 e 5 dá o dígito 8: 0011 As duas parcelas são BCD, 0101 assim como o resultado 1000 Mas se a soma for superior a 9, então o resultado obtido já não é BCD. Por exemplo, 7 + 5 = 12: 0111 Em certos casos há mesmo transporte 8 + 9 = 17: 1000 1001 10001 Uke2010 SD - Circuitos Aritméticos 0101 1100 6 Somas em BCD (II) Consegue-se corrigir o resultado obtido somando 6 (0110) ao resultado nas seguintes situações: 1. O resultado é maior que 9 2. Existe um transporte na soma Σ 0 P B 3 0 3 3 Q 3 Transporte anterior CI Σ P S 0 A 0 ≥1 CO 0 0 Q 0 3 0 CI A+B S 0 3 CO Transporte para o algarismo seguinte & ≥1 & Uke2010 SD - Circuitos Aritméticos 7 Representação e Aritmética de Números com Sinal A representação de números inteiros tem de ter em conta que os números podem ser positivos, negativos ou o número 0 Uma das alternativas é a representação por módulo e sinal, em que o bit mais significativo indica o sinal: Se esse bit for 1 o número é negativo; Se for 0 é positivo Exemplo para números de 4 bits: Representação Uke2010 Número representado Representação Número representado 0000 0 1000 -0 0001 +1 1001 -1 0010 +2 1010 -2 0011 +3 1011 -3 0100 +4 1100 -4 0101 +5 1101 -5 0110 +6 1110 -6 0111 +7 1111 -7 SD - Circuitos Aritméticos 8 Representação por módulo e Sinal Inconvenientes: Duas representações diferentes para o zero; O módulo e o sinal são processados de forma diferente; É necessário escolher a operação a realizar de acordo com a operação desejada e o sinal dos números envolvidos. Por exemplo: Se pretendermos fazer a operação (+5) + (-3) o que é realmente necessário fazer é a subtracção 5-3 ficando o sinal positivo; Se o problema for realizar (-5) + (+3) então há que realizar também uma subtracção mas do módulo do número negativo menos o do positivo sendo o resultado um número negativo. Obviamente tudo isto complica a realização das operações e consequentemente dos circuitos que tenham que realizar essas operações Uke2010 SD - Circuitos Aritméticos 9 Representação em Complemento para 2 Chama-se complemento para 2n de um número x de n bits, ao resultado da operação 2n – x Por exemplo, o complemento para 2 de 0110 é: 10000 - 0110 1010 Se um número x tem n bits, então o seu complemento para 2 é representado por n bits O complemento para 2 do complemento para 2 de um número x, é x: 2n - (2n – x) = x Formas alternativas de encontrar o complemento para 2 de um número x: Inverter todos os bits de x e somar 1 ao resultado 0110 1001 1001+1 = 1010 Manter todos os 0’s menos significativos e ainda o primeiro 1 de x, e inverter os restantes bits mais significativos Uke2010 0110 xx10 1010 SD - Circuitos Aritméticos 10 Representação de números com sinal em Complemento para 2 Na representação de números com sinal em complemento para 2, o bit mais significativo do número também indica o sinal: Se for 1 o número é negativo; Se for 0 é positivo. Na representação de números com sinal em complemento para 2: Um número positivo é representado pelo seu módulo; Um número negativo é representado pelo complemento para 2 do seu módulo. Por exemplo: O número +6 é representado em notação de complemento para 2 com 4 bits por 0110; O número -6 é representado por 1010: 6 = 0110 ► complementando bit a bit, 1001 ►1001 +1 = 1010 = -6 Repare-se que ao calcular o complemento para 2 de um número positivo de n bits se obtém automaticamente o bit de sinal a 1 Uke2010 SD - Circuitos Aritméticos 11 Representação de números com sinal em Complemento para 2 (II) Os 16 números possíveis de representar em complemento para 2 com 4 bits são os seguintes: O intervalo representado é [-2n-1, +2n-1-1] Com 4 bits: [-8,+7] A razão da assimetria entre o total de número de positivos e o de negativos radica na necessidade de representar o ‘0‘ e de não ter duas representações para o ‘0’ Uke2010 SD - Circuitos Aritméticos 12 Representação de números com sinal em Complemento para 2 (III) Com esta representação, pode operar-se sobre os números sem ter que tomar em consideração qualquer particularidade relacionada com o sinal de cada um deles. Exemplos: Soma de 2 positivos (+2) + (+5) = 7 0010 0101 0111 Soma de 2 negativos Soma de 1 positivo com 1 negativo com resultado negativo (+2) + (-5) = -3 0010 1011 1101 Uke2010 (-2) + (-5) = -7 1110 1011 11001 Soma de 1 positivo com 1 negativo com resultado positivo (+5) + (-3) = +2 0101 1101 10010 Ignora-se o transporte porque sai dos 4 bits utilizados na representação SD - Circuitos Aritméticos 13 Representação de números com sinal em Complemento para 2 (IV) Quando a operação envolve 2 números com o mesmo sinal, é possível que o resultado não possa ser representado com o número de bits disponível. A esta situação chama-se OVERFLOW Por exemplo, 4 + 5 = 9, que não é representável com 4 bits em notação de complemento para 2 com sinal: 01 0100 0101 1001 O resultado é incoerente pois é um número negativo: (-7) O overflow nunca ocorre em operações entre números com sinal contrário. Prova-se que o overflow ocorre sempre que o transporte do último bit é diferente do transporte do bit anterior Uke2010 SD - Circuitos Aritméticos 14 Somador/Subtractor Sabendo que: 1. Realizar a subtracção x-y é o mesmo que realizar a soma x + (-y); 2. Trocar o sinal a um número representado em notação de complemento para 2 significa, na prática, fazer o complemento para 2 desse número, então a subtracção pode ser feita a partir de um somador. Então, usando as propriedades do XOR, e a possibilidade de usar o Cin de um somador para somar 1 aos dois números, é possível realizar um circuito somador/subtractor: Controlo Controlo B =1 Operação 0 1 A + B# A-B =1 =1 =1 0 Σ P 3 0 A Resultado S 0 Q 3 3 Uke2010 SD - Circuitos Aritméticos CI CO 15 Comparadores Tal como o nome indica, um comparador permite comparar 2 números binários P e Q de n bits, indicando se P>Q, P<Q ou P=Q. Exemplo, um comparador de 4 bits: O circuito pode ser ligado em cascata, para realizar comparações entre números de n > 4 bits (é essa a utilidade das entradas >,=,< presentes no lado esquerdo do circuito). Uke2010 SD - Circuitos Aritméticos 16 Alguns CI’s 74LS283: Somador de 4 bits rápido. Usa internamente um “carry look-ahead” – trata-se de um somador de maior rapidez, conseguida à custa de um maior número de portas lógicas. 74LS85: Comparador de 4 bits. 74LS283 Uke2010 74LS85 SD - Circuitos Aritméticos 17 Bibliografia Arroz,G., Monteiro,J.C., Oliveira,A., “Arquitectura de Computadores, dos Sistemas Digitais aos Microprocessadores”, Secções 5.1, 5.2, 5.3, 2ª Edição, 2009 Mano,M., Kime,C. – “Logic and Computer Design Fundamentals”, Prentice Hall, secções 3.8 a 3.10 e 3.13 Uke2010 SD - Circuitos Aritméticos 18