Universidade Federal de Santa Catarina Centro Tecnológico Departamento de Informática e Estatística Ciências da Computação & Engenharia Eletrônica Aula 1-T 1. Projeto de unidade lógico-aritmética (ULA). Representação de números inteiros em binário. Convenções do nível RT. Adição de números sem e com sinal, o somador paralelo carry-ripple e overflow. O subtrator e o somador-subtrator, overflow. Estrutura de uma ULA simples. Outras operações lógicas e aritméticas. Unidades funcionais para mais de dois. Circuitos Digitais e Níveis de Abstração. guntzel@inf.ufsc.br www.inf.ufsc.br/~guntzel/ine5406/ine5406.html
Representação de Inteiros em Binário Números Inteiros sem Sinal (Naturais) assumindo-se números com 4 bits binário decimal Menor número 0000 0 Maior número 1111 15 Intervalo de representação: [ 0, 15 ] Slide1T.2
Representação de Inteiros em Binário Números Inteiros sem Sinal (naturais) assumindo-se números com 8 bits binário decimal Menor número 00000000 0 Maior número 11111111 255 Intervalo de representação: [ 0, 255 ] Slide1T.3
Representação de Inteiros em Binário Números Inteiros sem Sinal (Naturais) Observe que: 11111111 2 = = 1x2 0 + 1x2 1 + 1x2 2 + 1x2 3 + 1x2 4 + 1x2 5 + 1x2 6 + 1x2 7 = = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255 Observe também que: 100000000 2 = = 0x2 0 + 0x2 1 + 0x2 2 + 0x2 3 + 0x2 4 + 0x2 5 + 0x2 6 + 0x2 7 + 1x2 8 = = 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 256 = 256 (= 255 + 1) Então, podemos nos referir ao 255 como 2 8-1, para efeitos de generalização. Slide1T.4
Representação de Inteiros em Binário Números Inteiros sem Sinal (naturais) Generalizando-se para n bits binário decimal Menor número 0000...0 0 Maior número 1111...1 2 n -1 Intervalo de representação: [ 0, 2 n -1] Slide1T.5
Representando Dados em Circuitos Digitais Algumas Convenções Indicando como um número de n+1 bits é composto (outro exemplo) Decompondo um número de n+1 bits em um número de n bits e mais um sinal 0 n n+1 n+1 overflow n S Slide1T.6
Circuitos Aritméticos São Circuitos Combinacionais que operam sobre dados numéricos. Exercício 1: Projetar um circuito combinacional capaz de testar se um número de 8 bits vale zero ou não. Este circuito deve operar conforme descrito na tabela abaixo. Tabela de funcionamento: zero significado 0 S 0 Interfaces: S =0? 8 1 S = 0 zero Slide1T.7
Circuitos Aritméticos Exercício 2: Projetar um circuito combinacional que compara dois números de 4 bits cada. Este circuito deve operar conforme descrito na tabela abaixo. Tabela de funcionamento: Interfaces: A B iguais significado 0 A B 1 A = B 4 =? iguais 4 Slide1T.8
Circuitos Aritméticos Exercício 2: solução... Função XOR (Exclusive OR, OU Exclusivo) Resulta 1 se as duas entradas forem iguais... X Y X Y X Y = X Y + X Y 0 0 0 0 1 1 1 0 1 1 1 0 X Y Porta lógica Circuito em soma de produtos X Y Slide1T.9
Circuitos Aritméticos Exercício 3: Projetar um circuito combinacional que compara dois números de 4 bits cada. Este circuito deve operar conforme descrito na tabela abaixo. Tabela de funcionamento: Interfaces: A B maior significado 4 4 0 A <= B 1 A > B A > B? maior Slide1T.10
Circuitos Aritméticos Qual é a operação aritmética mais importante? Resposta: a adição! Por quê? Porque ela serve de base para outras operações aritméticas mais frequentes nos sistemas digitais. Slide1T.11
Revisão de Adição Binária Adição de Números Sem Sinal Exemplo 1: Notação genérica Análise supondo A e B com 4 bits 0 1 0 0 transportes (carries) + A B + 0 1 1 0 (6) 0 1 0 0 (4) S 1 0 1 0 (10) resultado Supondo um somador que trabalhe com operandos de 4 bits, então o resultado S deverá pertencer ao intervalo [ 0, 15 ] Slide1T.12
Revisão de Adição Binária Adição de Números Sem Sinal Exemplo 2: + A B Cout = overflow + 1 1 0 0 transportes (carries) 1 1 0 0 (12) 0 1 1 0 (6) S 0 0 1 0 (18) resultado Caso o resultado não puder ser representado com 4 bits, o sinal Cout indicará que houve um estouro de representação (em inglês, overflow). Slide1T.13
Esquema da Adição Paralela Considerando dois números (A e B) com 4 bits cada a3 b3 a2 b2 a1 b1 a0 b0 c4 (=cout) c3 c2 c1 s3 s2 s1 s0 Há um elemento para cada coluna da soma. O sinal de transporte mais à esquerda (c4, neste caso), também recebe o nome de cout. Se este somador operar sobre inteiros sem sinal, então cout também servirá para indicar a ocorrência de overflow Slide1T.14
O Meio Somador Redesenhando, usando porta XOR a0 b0 a0 b0 c1 MS c1 s0 s0 s0 = a0 b0 + a0 b0 = a0 b0 c1 = a0 b0 Slide1T.15
Somador Para as Demais Colunas Projetando um tipo de circuito para as demais colunas: c4 a3 b3 c3 a2 b2 c2 a1 b1 c1 a0 b0 s3 s2 s1 s0 + c 4 c 3 c 2 c 1 a 3 a 2 a 1 a 0 b 3 b 2 b 1 b 0 Generalizando + c i a i b i adição de 3 bits s 3 s 2 s 1 s 0 c i+1 s i resultado em 2 bits carry resultado Com i >= 1 Slide1T.16
O Somador Completo ai bi a i b i MS ci+1 ci g i p i c i+1 c i si x i MS si = ci ai bi s i ci+1 = ai bi+ ai ci+ bi ci Slide1T.17
O Somador Paralelo Carry-Ripple (de 4 Bits) Diagrama de Blocos (Nível Lógico) a3 b3 a2 b2 a1 b1 a0 b0 c4 (=cout) c3 c2 c1 MS s3 s2 s1 s0 Símbolo no Nível RT cout A B 4 4 + Indicação do número de bits 4 S Slide1T.18
O Somador Paralelo Carry-Ripple (de 4 Bits) Diagrama de Blocos (Nível Lógico): versão 2 a3 b3 a2 b2 a1 b1 a0 b0 c4 (=cout) c3 c2 c1 c0 s3 s2 s1 s0 Símbolo no Nível RT A B 4 4 cout + 4 S Slide1T.19
O Somador Paralelo Carry-Ripple (de 4 Bits) Diagrama de Blocos (Nível Lógico): versão 3 a3 b3 a2 b2 a1 b1 a0 b0 c4 (=cout) c3 c2 c1 c0 = cin s3 s2 s1 s0 Símbolo no Nível RT A B 4 4 cout + cin 4 S Slide1T.20
Representando Dados em Circuitos Digitais Mais Convenções Somador-subtrator para operandos com n bits cada Indicando como um número de n+1 bits é composto overflow n +/- n overflow n +/- n n n n+1 Convenção para indicar que o bit menos significativo está mais à direita Slide1T.21
Somador Carry-Ripple: Custo x Desempenho A estrutura do somador carry-ripple baseia-se na fatoração da expressão do carry. A consequência disto é: Redução do custo (i.e., menor número de portas lógicas) Aumento do atraso (o cálculo de c4 depende de c3, que depende de c2, que depende de c1, que depende apenas das entradas c0, a0 e b0). a3 b3 a2 b2 a1 b1 a0 b0 c4 (=cout) c3 c2 c1 c0 = cin s3 Os slides complementares somadores rápidos mostra outros tipos de somadores. s2 Slide1T.22 s1 s0
Representação de Inteiros em Binário Como Representar Inteiros Negativos? Sinal-magnitude sinal Complemento de 1 sinal +3 = 0 0 1 1-3 = 1 0 1 1 +3 = 0 0 1 1-3 = 1 1 0 0 Complemento de 2 sinal Obtido a partir do +3, aplicando-se a inversão bit a bit +3 = 0 0 1 1-3 = 1 1 0 1 Obtido a partir do +3, aplicando -se a inversão bit a bit e após, somando-se 1 (uma unidade) Slide1T.23
Representação de Inteiros em Binário Números Inteiros com Sinal Para facilitar a construção de circuitos aritméticos, os negativos são representados em complemento de dois Assumindo-se números com 4 bits binário decimal Menor número 1000-8 Zero 0000 0 Maior número 0111 +7 Intervalo de representação: [ -8, +7 ] Slide1T.24
Representação de Inteiros em Binário Números Inteiros com Sinal Observe que: 0111 2 = 1x2 0 + 1x2 1 + 1x2 2 + 0x2 3 = = 1 + 2 + 4 + 0 = = +7 Observe também que: 1111 2 = 1x2 0 + 1x2 1 + 1x2 2-1x2 3 = = 1 + 2 + 4-8 = = -1 O bit mais à esquerda representa o sinal: se ele valer 1, o número é negativo. Caso contrário, o número é positivo ou zero. Slide1T.25
Representação de Inteiros em Binário Números Inteiros com Sinal assumindo-se números com 8 bits binário decimal Menor número 10000000-128 Zero 00000000 0 Maior número 01111111 +127 Intervalo de representação: [ -128, +127 ] Slide1T.26
Representação de Inteiros em Binário Números Inteiros com Sinal Generalizando-se para n bits binário decimal Menor número 1000...0-2 n-1 Zero 0000...0 0 Maior número 0111...1 +(2 n-1-1) Intervalo de representação: [ -2 n-1, +(2 n-1-1) ] Slide1T.27
Adição de Inteiros com Sinal Assumindo: Negativos são representados em complemento de dois Números com 4 bits binário decimal Menor número 1000-8 Zero 0000 0 Maior número 0111 +7 Intervalo de representação: [ -8, +7 ] Slide1T.28
Adição de Inteiros com Sinal (Assumindo Negativos em Complemento de 2) Exemplo 3: dois números positivos, cuja soma [-8,+7] + 0 0 0 0 transporte (carry) 0 0 1 0 (+2) 0 1 0 0 (+4) 0 1 1 0 (+6) resultado correto Slide1T.29
Adição de Inteiros com Sinal (Assumindo Negativos em Complemento de 2) Exemplo 4: dois números negativos, cuja soma seja -8 Apesar deste último carry valer 1, não houve overflow + 1 1 0 0 transporte (carry) 1 1 1 0 (-2) 1 1 0 0 (-4) 1 0 1 0 (-6) resultado correto Slide1T.30
Adição de Inteiros com Sinal (Assumindo Negativos em Complemento de 2) Exemplo 5: um número positivo e um número negativo, tais que o resultado é positivo Novamente + 1 1 1 1 transporte (carry) 0 1 1 1 (+7) 1 1 1 1 (-1) 0 1 1 0 (+6) resultado correto Slide1T.31
Adição de Inteiros com Sinal (Assumindo Negativos em Complemento de 2) Exemplo 6: um número positivo e um número negativo, tais que o resultado é negativo + 0 0 0 1 transporte (carry) 1 0 0 1 (-7) 0 0 0 1 (+1) 1 0 1 0 (-6) resultado correto Slide1T.32
Adição de Inteiros com Sinal (Assumindo Negativos em Complemento de 2) Exemplo 7: um positivo e um negativo, iguais em módulo E novamente + 1 1 1 1 transporte (carry) 0 1 0 1 (+5) 1 0 1 1 (-5) 0 0 0 0 (0) resultado correto Slide1T.33
Adição de Inteiros com Sinal (Assumindo Negativos em Complemento de 2) Exemplo 8: 2 números positivos ocorre overflow quando esses 2 bits são diferentes + 0 1 0 0 transporte (carry) 0 1 0 0 (+4) 0 1 0 1 (+5) 1 0 0 1 (-7) Resultado errado! o resultado excede o intervalo de representação = overflow Slide1T.34
Adição de Inteiros com Sinal (Assumindo Negativos em Complemento de 2) Exemplo 9: 2 números negativos ocorre overflow quando esses 2 bits são diferentes + 1 0 0 0 transporte (carry) 1 1 0 0 (-4) 1 0 1 1 (-5) 0 1 1 1 (+7) Resultado errado! o resultado excede o intervalo de representação = overflow Slide1T.35
Adição de Inteiros com Sinal (Assumindo Negativos em Complemento de 2) Conclusões: Números binários em complemento de 2 podem ser adicionados como se fossem números binários sem sinal! Neste caso, a detecção de overflow se dá comparando-se os dois últimos sinais de carry Slide1T.36
O Somador Paralelo Carry-Ripple (de 4 Bits) Modificado para Operar Sobre Números com Sinal (Assumindo negativos em complemento de 2) Diagrama de Blocos (Nível Lógico) a3 b3 a2 b2 a1 b1 a0 b0 c4 (=cout) c3 c2 c1 MS overflow s3 s2 s1 s0 Slide1T.37
O Somador Paralelo Carry-Ripple (de 4 Bits) Modificado para Operar Sobre Números com Sinal (Assumindo negativos em complemento de 2) Diagrama de Blocos (Nível Lógico): versão 2 a3 b3 a2 b2 a1 b1 a0 b0 c4 (=cout) c3 c2 c1 c0 overflow s3 s2 s1 s0 Slide1T.38
O Somador Paralelo Carry-Ripple (de 4 Bits) Modificado para Operar Sobre Números com Sinal (Assumindo negativos em complemento de 2) Diagrama de Blocos (Nível Lógico): versão 3 a3 b3 a2 b2 a1 b1 a0 b0 c4 (=cout) c3 c2 c1 c0 = cin overflow s3 s2 s1 s0 Slide1T.39
O Somador Paralelo Carry-Ripple (de 4 Bits) Símbolos no Nível RT cout overflow overflow A B 4 4 + S A + cout overflow A B 4 4 4 4 S B 4 4 S overflow + A B 4 4 4 4 S + cin cin Slide1T.40
Circuitos Aritméticos Exercício 4: Usando o somador carry-ripple, projetar um circuito combinacional que troca o sinal de um número inteiro de 4 bit. Interfaces: B 4 Troca sinal B Slide 2T.41
Circuitos Aritméticos Exercício 4: Solução Trocar o sinal significa aplicar as regras do complemento de dois ao número, ou seja: 1. Negar ( NOT ) bit a bit o número 2. Somar uma unidade ao resultado do passo anterior Slide 2T.42
Circuitos Aritméticos Exercício 4: Solução b3 b2 b1 b0 B 0 0 0 0 c4 = cout c3 c2 c1 c0 = cin = 1 r3 r2 r1 r0 -B Slide 2T.43
Subtração de Números Inteiros em Binário Princípio A B = A + ( B ) Onde B é o número B de sinal trocado! Ora, que coincidência!! (Ou não?) Slide 2T.44
Subtrator Paralelo (de 4 bits) A B = A + ( B ) b3 b2 b1 b0 a3 a2 a1 a0 0 0 0 0 c4 (=cout) c3 c2 c1 c0 = cin = 1 overflow s3 s2 s1 s0 Slide 2T.45
Subtrator Paralelo (de 4 bits) Diagrama de Blocos (Nível Lógico) b3 b2 b1 b0 a3 a2 a1 a0 c4 (=cout) c3 c2 c1 c0 = cin = 1 overflow s3 Símbolos no Nível RT s2 A B 4 4 s1 s0 A B 4 4 cout overflow 4 overflow 4 S Slide 2T.46 S
Subtrator/Subtrator Paralelo (de 4 bits) Somador a3 b3 a2 b2 a1 b1 a0 b0 c4 = cout c3 c2 c1 c0 = cin = 0 s3 s2 s1 s0 b3 b2 b1 b0 a3 a2 a1 a0 Subtrator c4 = cout c3 c2 c1 c0 = cin = 1 s3 s2 s1 s0 Slide 2T.47
Subtrator/Subtrator Paralelo (de 4 bits) Como uni-los em um único circuito, configurável? b3 b2 b1 b0 a3 a3 b3 a2 a2 b2 a1 a1 b1 a0 a0 b0 c4 c4 = = cout cout c3 c3 c2 c2 c1 c1 c0 c0 = cin cin = 01 s3 s3 s2 s2 s1 s1 s0 s0 Slide 2T.48
Subtrator/Subtrator Paralelo (de 4 bits) Resposta!!! b3 b2 b1 b0 a3 a2 a1 a0 c3 c4 (=cout) c3 c2 c1 c0 = cin = controle overflow s3 s2 s1 s0 controle operação 0 S=A+B 1 S=A-B Slide 2T.49
Subtrator/Subtrator Paralelo (de 4 bits) Símbolo no Nível RT A B 4 4 A B 4 4 cout overflow +/ controle overflow +/ controle 4 4 S S Tabela de Operação controle operação 0 S=A+B 1 S=A B Slide 2T.50
ULA Simples Suponha que se necessite de uma Unidade Lógico-Aritmética (ULA) capaz de realizar as seguintes operações C1 C0 operação comentário 0 0 S = A + B adição 0 1 S = A - B subtração 1 0 S = A AND B E bit a bit 1 1 S = A OR B OU bit a bit Símbolo no nível RT A B n n overflow 2 ULA n S C Obs: o sinal de overflow pode ou não ser necessário Slide 2T.51
ULA Simples C1 C0 operação Visão Geral desta ULA 0 0 S = A + B A B 0 1 S = A - B 1 0 S = A AND B 1 1 S = A OR B n n +/- n AND/OR bit a bit n C0 C0 operação 0 S=A+B 0 1 C1 C0 operação 0 S=A AND B 1 S=A-B n 1 S=A OR B S Slide 2T.52
ULA Simples Visão de um bit desta ULA (os demais bits serão similares) a0 b0 C1 C0 operação 0 0 S = A + B 0 1 S = A - B 1 0 S = A AND B c1 0 1 C0 1 1 S = A OR B 0 1 C1 s0 Slide 2T.53
ULA Simples Multiplexador no Nível RT... n 0 1 n n C1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 Todos os n muxes 2:1 são controlados pelo mesmo sinal C1 n muxes 2:1 C1 Slide 2T.54
ULA Simples Mas onde foi parar o overflow? Voltando ao projeto do todo A B n n n n overflow +/- AND/OR bit a bit C0 n 0 n n+1 n+1 0 1 n+1 C1 overflow n S Slide 2T.55
Deslocador Combinacional Um deslocador (shifter) com uso de multiplexadores 2:1 A3 A2 A1 A0 entrada serial desloca 0 1 0 1 0 1 0 1 S3 S2 S1 S0 Se desloca=1, este circuito desloca cada bit uma posição para a esquerda Qual é o significado desta operação? Slide 2T.56
Deslocador Combinacional Outro deslocador (shifter) com uso de multiplexadores 2:1 A3 A2 A1 A0 entrada serial desloca 1 0 1 0 1 0 1 0 S3 S2 S1 S0 Se desloca=1, este circuito desloca cada bit uma posição para a direita Qual é o significado desta operação? Slide 2T.57
Multiplicação com Circuito Combinacional O Multiplicador Matricial É uma implementação direta do esquema ao lado Cada bit dos produtos parciais é gerado por meio de um E lógico + x 1 0 0 1 1 0 1 1 1 0 0 1 1 0 0 1-0 0 0 0 - - 1 0 0 1 - - - multiplicando multiplicador produtos parciais 1 1 0 0 0 1 1 resultado Slide 2T.58
Multiplicação com Circuito Combinacional O Multiplicador Matricial (p/ Números s/ Sinal) Para multiplicar dois números de n bits são necessários n-1 somadores de n bits Problemas: A 2 B Custo 2 Atraso crítico! A 2 B 1 A 2 B 0 A 1 B 2 Carry out A 0 B 2 A 1 B 1 A 1 B 0 0 Somador de 3 bits A 0 B 1 A 0 B 0 Carry out Somador de 3 bits caminho crítico M 5 M 4 M 3 M 2 M 1 M 0 Slide 2T.59
Multiplicação com Circuito Combinacional O Multiplicador Matricial (p/ Números s/ Sinal) O Símbolo no Nível RT X 3 Y 3 * 6 S Slide 2T.60