FLÁVIO KENJI NISHIDA PROJETO DE UM MULTIPLICADOR EM PONTO FLUTUANTE



Documentos relacionados
Flávio Kenji Nishida. Projeto de um multiplicador em ponto flutuante

Organização e Arquitetura de Computadores I

Representando Instruções no Computador

Introdução. A Informação e sua Representação (Parte II) Universidade Federal de Campina Grande. Unidade Acadêmica de Sistemas e Computação

Aritmética de Ponto Flutuante e Noções de Erro. Ana Paula

Universidade Federal de São João Del Rei - UFSJ

Capítulo SETE Números em Ponto Fixo e Ponto Flutuante

Aritmética de Ponto Flutuante

A declaração de uma variável vel define o seu tipo. O tipo do dado define como ele será: Armazenado na memória. Manipulado pela ULA.

Arquitetura de Computadores

Unidade 5: Sistemas de Representação

REPRESENTAÇÃO DE DADOS EM SISTEMAS DE COMPUTAÇÃO AULA 03 Arquitetura de Computadores Gil Eduardo de Andrade

Implementações e Comparação de Multiplicadores de Alta Velocidade para Dispositivos Reconfiguráveis

Introdução. A Informação e sua Representação (Parte III) Universidade Federal de Campina Grande Departamento de Sistemas e Computação

Principais códigos utilizados. Codificação. Código binário puro. Codificação binária. Codificação Binária. Código Binário puro e suas variantes

Representação de Dados

CCI-22 CCI-22. 2) Erros de arredondamento. Matemática Computacional

Sistema de Numeração e Conversão entre Sistemas. Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES SISTEMAS DE NUMERAÇÃO: REPRESENTAÇÃO EM PONTO FLUTUANTE. Prof. Dr. Daniel Caetano

ULA- Unidade Lógica Aritmética. Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h

CAPÍTULO 6 ARITMÉTICA DIGITAL

Curso Superior de Sistemas de Telecomunicações Unidade São José. Disciplina: Síntese de Sistemas de Telecomunicações 7º Fase

Representação de números em máquinas

CAPÍTULO 1 REVISÃO DE LÓGICA COMBINACIONAL

Aula 2 Sistemas de Numeração (Revisão)

Eduardo Camponogara. DAS-5103: Cálculo Numérico para Controle e Automação. Departamento de Automação e Sistemas Universidade Federal de Santa Catarina

Análise de Arredondamento em Ponto Flutuante

Sistemas de Numeração (Aula Extra)

O diagrama ASM contém dois elementos básicos: o bloco de estado e o bloco de decisão.

Circuitos Digitais 144L

Aula 14: Instruções e Seus Tipos

Aula 2 - Cálculo Numérico

Arquitetura e Organização de Computadores. Prof. Henrique

ARQUITETURA DE COMPUTADORES

1 CIRCUITOS COMBINACIONAIS

Notas de Cálculo Numérico

CAPÍTULO 4 CIRCUITOS SEQUENCIAIS II: CONTADORES ASSÍNCRONOS

Noções Básicas Sobre Erros

2. A influência do tamanho da palavra

8 Cálculo da Opção de Conversão

Aula 9. Introdução à Computação. ADS IFBA

Organização e Arquitetura de Computadores. Aula 10 Ponto Flutuante Parte I Juliana F. Camapum Wanderley

Métodos Numéricos. Turma CI-202-X. Josiney de Souza.

ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM. Conceitos Básicos ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM

Cálculo Numérico Aula 1: Computação numérica. Tipos de Erros. Aritmética de ponto flutuante

Organização de Computadores 1

Cálculo Numérico / Métodos Numéricos. Representação de números em computadores Mudança de base 14:05

Memória cache. Prof. Francisco Adelton

Computadores XII: Aprendendo a Somar A4 Texto 3

Controle de elevador

Eletrônica Digital para Instrumentação. Herman Lima Jr.

Arquitetura Integrada para Conversor de Espaço de Cores e Downsampler para a Compressão de Imagens JPEG

Cálculo Numérico Faculdade de Engenharia, Arquiteturas e Urbanismo FEAU

DICAS PARA CÁLCULOS MAIS RÁPIDOS ARTIGO 06

Capítulo 12. Projeto 5 Controle de Motores de Passo Circuito e Funcionamento

Aritmética Binária e. Bernardo Nunes Gonçalves

Operações aritméticas

ARTHUR HENRIQUE COUTINHO MODELAGEM DE UMA UNIDADE DE SOMA PARA NÚMERO EM PONTO FLUTUANTE

Computador HIPO. Inicialmente vamos apresentar as unidades fundamentais de um computador:

Memórias. O que são Memórias de Semicondutores? São componentes capazes de armazenar informações Binárias (0s e 1s)

2. Representação Numérica

Fontes de Alimentação

O matemático indiano Pingala apresentou a primeira descrição conhecida de um sistema numérico binário no século III a.c..

Somador e subtrator de 8 bits

Pontifícia Universidade Católica do Rio Grande do Sul Faculdade de Engenharia Disciplina de Lógica Computacional Aplicada. Prof. Dr.

Arquitetura de processadores: RISC e CISC

Universidade Federal Fluminense - UFF Centro Tecnológico - CTC Escola de Engenharia - TCE Departamento de Engenharia de Telecomunicações TET

CAPÍTULO I. UNIVERSIDADE FEDERAL DE UBERLÂNDIA FACULDADE DE ENGENHARIA ELÉTRICA Apostila de Eletrônica Digital. Sistemas de Numeração. 1.

- Arquitetura de sistemas digitais- Cap 1 - Introdução

1- Scilab e a placa Lab_Uino. 2- Instalação do ToolBox

TRANSFORMADORES. P = enrolamento do primário S = enrolamento do secundário

Valor lógico UM (Verdade, 1): 5 Volts. Valor lógico ZERO (FALSO, 0): 0 Volts.

ARQUITETURA DE COMPUTADORES

Desenvolvimento de Estratégia para Programação do Futebol de Robôs da Mauá

Escola Secundária c/3º CEB José Macedo Fragateiro. Curso Profissional de Nível Secundário. Componente Técnica. Disciplina de

Introdução à Arquitetura de Computadores: Uma Abordagem para Ponto Flutuante e Cache

Exemplo de Subtração Binária

Trabalho compilado da Internet Prof. Claudio Passos. Sistemas Numéricos

Computador E/S, Memória, Barramento do sistema e CPU Onde a CPU Registradores, ULA, Interconexão interna da CPU e Unidade de controle.

Aula 1 Representação e Operações Aritméticas em Ponto Flutuante.

Abstrações e Tecnologias Computacionais. Professor: André Luis Meneses Silva /msn: andreluis.ms@gmail.com Página: orgearq20101.wordpress.

Algoritmos DCC 119. Introdução e Conceitos Básicos

Representação Binária de Números

Boletim. Contabilidade Internacional. Manual de Procedimentos

Falso: F = Low voltage: L = 0

IMPLANTAÇÃO DOS PILARES DA MPT NO DESEMPENHO OPERACIONAL EM UM CENTRO DE DISTRIBUIÇÃO DE COSMÉTICOS. XV INIC / XI EPG - UNIVAP 2011

Cotagem de dimensões básicas

Atenção ainda não conecte a interface em seu computador, o software megadmx deve ser instalado antes, leia o capítulo 2.

Sistemas de Computação

Computador Digital Circuitos de um computador (Hardware)

FERRAMENTA DIDÁTICA PARA DISCIPLINA DE ELETRÔNICA DIGITAL

UNIDADE III Aula 6 Cálculo do CRC. Fonte: Othon M. N. Batista

5º Experimento: Somador Binário de números com sinal

Circuitos Digitais Cap. 5

Acessando o SVN. Soluções em Vendas Ninfa 2

Introdução aos Sistemas Computacionais

Parte V Linguagem de Programação

computador-cálculo numérico perfeita. As fases na resolução de um problema real podem, de modo geral, ser colocadas na seguinte ordem:

Guia de utilização da notação BPMN

Transcrição:

FLÁVIO KENJI NISHIDA PROJETO DE UM MULTIPLICADOR EM PONTO FLUTUANTE LONDRINA PR 2013

FLÁVIO KENJI NISHIDA PROJETO DE UM MULTIPLICADOR EM PONTO FLUTUANTE Trabalho de Conclusão de Curso apresentado ao curso de Bacharelado em Ciência da Computação da Universidade Estadual de Londrina para obtenção do título de Bacharel em Ciência da Computação. Orientador: Dr. Wesley Attrot LONDRINA PR 2013

Flávio Kenji Nishida Projeto de um multiplicador em ponto flutuante/ Flávio Kenji Nishida. Londrina PR, 2013-52 p. : il. (algumas color.) ; 30 cm. Orientador: Dr. Wesley Attrot Universidade Estadual de Londrina, 2013. 1. Ponto Flutuante. 2. Multiplicador. I. Dr. Wesley Attrot. II. Universidade Estadual De Londrina. III. Faculdade de xxx. IV. Projeto de um Multiplicador em Ponto Flutuante CDU 02:141:005.7

FLÁVIO KENJI NISHIDA PROJETO DE UM MULTIPLICADOR EM PONTO FLUTUANTE Trabalho de Conclusão de Curso apresentado ao curso de Bacharelado em Ciência da Computação da Universidade Estadual de Londrina para obtenção do título de Bacharel em Ciência da Computação. BANCA EXAMINADORA Dr. Wesley Attrot Universidade Estadual de Londrina Orientador Dr. Jacques Duílio Brancher Universidade Estadual de Londrina Dr. Evandro Bacarin Universidade Estadual de Londrina Londrina PR, 24 de novembrode 2013 LONDRINA PR 2013

NISHIDA, F.. Projeto de um multiplicador em ponto flutuante. 52 p. Trabalho de Conclusão de Curso (Graduação). Bacharelado em Ciência da Computação Universidade Estadual de Londrina, 2013. RESUMO A representação de números reais em sistemas binários fez com que surgissem a representação numérica em ponto flutuante. Além de representar precisamente um valor numérico, calcular dois valores em ponto flutuante, como somar, multiplicar, dividir e subtrair, sem que haja erro de truncamento e com tempo de resposta imediato é um ponto crucial principalmente para sistemas críticos. Este trabalho tem como objetivo modelar e simular um multiplicador em ponto flutuante baseando no padrão IEEE 754 com precisão de 32 bits para posteriormente, ser implementado em VHDL e facilmente simulado numa FPGA, com o intuito de modelagem de hardware nacional. O multiplicador modelado possui a verificação da ocorrência de overflow e underflow, com um codificador radix-4 Booth para a geração dos produtos parciais. A modelagem e a implementação do multiplicador obteve resultados satisfatórios. A soma dos expoentes com os subtratores melhorados [1] e a geração dos produtos parciais com menor quantidade de produtos parciais através do codificador Radix-4 Booth [2]. Pelo problema de Race Condition na soma dos produtos parciais, uma condição de saída que é dependente de outros eventos controláveis, impede a soma dos produtos parciais. Os cálculos dessa etapa foram feitos manualmente obtendo resultados satisfatórios. Todavia, foi descoberto que o problema verificado pode ser solucionado utilizando a metodologia de um compressor 4:2 [2] Palavras-chave: multiplicador. ponto flutuante. circuito digital.

NISHIDA, F.. Design of a Floating Point Multiplier. 52 p. Final Project (Undergraduation). Bachelor of Science in Computer Science State University of Londrina, 2013. ABSTRACT The representation of real numbers in binary systems has spurred the numerical representation in floating point. Besides accurately represent a numeric value, calculate two floating-point values as such: add, multiply, divide and subtract, without truncation error and immediately response time is a crucial point, especially for critical systems. This study aims to model and simulate a multiplier in floating-point based on the IEEE 754 standard with 32-bit precision for later be easily implemented in VHDL and simulated in an FPGA, in order to research national hardware. The modeled multiplier has the ability to check for occurrence of overflow and underflow, with a radix-4 Booth encoder for the generation of partial products. The modeling and implementation of the multiplier obtained satisfactory results. The sum of the exponents with improved subtractors [1] and the generation of partial products with a lower number of partial products by using encoder Radix- 4 Booth [2]. The Race Condition problem on the sum of the partial products, an key condition that is dependent on other controllable events, prevents the sum of the partial products. The calculations in this step were done manually to obtaining satisfactory results. However it was discovered that the problem can be solved using the methodology of a 4:2 compressor [2]. Keywords: floating point. multiplier. digital circuit

LISTA DE ILUSTRAÇÕES Figura 1 Estrutura do ponto flutuante....................... 21 Figura 2 Representação em ponto flutuante..................... 22 Figura 3 Diagrama do multiplicador......................... 31 Figura 4 Multiplicação entre a mantissa de PF1 e PF2.............. 32 Figura 5 Estrutura do multiplicador......................... 34 Figura 6 Circuito verificador de 0.......................... 35 Figura 7 Somadores com propagaçao de carry................... 35 Figura 8 one subtractor............................... 36 Figura 9 zero subtractor............................... 36 Figura 10 Circuito do Subtratores do Expoente................... 37 Figura 11 Separação dos conjuntos de 3 bits do multiplicando........... 37 Figura 12 Circuito logico de ZERO.......................... 38 Figura 13 Circuito lógico de ADD2.......................... 39 Figura 14 Circuito logico de NEG.......................... 39 Figura 15 Circuito para a geração e verificação do multiplicando em negativo.. 40 Figura 16 Circuito para a geração e verificação do multiplicando por 2...... 40 Figura 17 Circuito para verificação e multiplicação por 0.............. 41 Figura 18 Somadores dos produtos parciais de 6 bits................ 41 Figura 19 Normalizador para multiplicação de 4 bits................ 42 Figura 20 incremento no expoente e verificação de overflow............ 42

LISTA DE TABELAS Tabela 1 Parâmetros do ponto flutuante...................... 22 Tabela 2 Representação para precisão de 32 bits.................. 23 Tabela 3 Tipos de Arredondamento......................... 24 Tabela 4 Resultado entre o multiplicador em ponto flutuante e o núcleo do Xilinx 26 Tabela 5 Tabela verdade do circuito lógico XOR................. 34 Tabela 6 Subtrator com subtraendo T = 1..................... 36 Tabela 7 Subtrator com subtraendo T = 0..................... 36 Tabela 8 Tabela verdade do codificador....................... 38 Tabela 9 Valores do multiplicando.......................... 43 Tabela 10 Valores do multiplicador.......................... 43 Tabela 11 Resultado do Sinal............................. 44 Tabela 12 Resultados da verificação por 0...................... 44 Tabela 13 Resultados da soma dos expoente com a subtração com o bias e a verificação de overflow e underflow.................... 44 Tabela 14 Resultados da Multiplicação do multiplicando.............. 45 Tabela 15 Produtos Parciais.............................. 46 Tabela 16 Resultados da soma dos Produtos parciais................ 46 Tabela 17 Incremento do expoente e verificação de Overflow............ 47 Tabela 18 Resultados da normalização........................ 47 Tabela 19 Resultados do truncamento........................ 48 Tabela 20 Resultados da Multiplicação........................ 48

LISTA DE ABREVIATURAS E SIGLAS FPGA VHSIC VHDL IP-Core CI NaN CLA FFT DFF VLSI Field-Programmable Gate Array Very High Speed Integrated Circuits VHSIC Hardware Description Language Intellectual Property Core Circuito Integrado Valor numérico não válido (Not a Number) Carry Look-ahead Adder Fast Fourier Transform D-Flip Flop Very Large Scale Integration

SUMÁRIO 1 Introdução................................... 17 1.1 Objetivo.................................... 17 1.2 Descrição dos Capítulos........................... 18 2 Representação de Números em Ponto Flutuante............. 19 2.1 Representação Numérica........................... 19 2.2 Conversão Decimal Binário.......................... 19 2.2.1 Inteiro para Binário.......................... 19 2.2.2 Parte Fracionário para Binário.................... 20 2.3 Representação de um Ponto Flutuante................... 20 2.4 Padrão IEEE 754............................... 21 2.4.1 Representação em Ponto Flutuante no padrão IEEE 754..... 21 2.4.1.1 Números Normalizados, Não Normalizados e Exceções. 22 2.4.1.2 Arredondamento e Truncamento............. 23 3 Trabalhos Relacionados........................... 25 3.1 Uma Implementação Eficiente de Um Multiplicador em Ponto Flutuante 25 3.2 Implementação em Hardware de um Multiplicador em Ponto Flutuante de Alta Velocidade em FPGA.......................... 26 3.3 Projeto e Implementação do Multiplicador de Ponto Flutuante Para Melhor Desempenho de Tempo......................... 28 3.4 Metodologias utilizados............................ 29 4 Multiplicação em Ponto Flutuante..................... 31 5 Desenvolvimento do Projeto......................... 33 5.1 Estrutura do Multiplicador.......................... 33 5.2 Sinal da Multiplicação............................ 34 5.3 Verificação da Multiplicação por 0...................... 34 5.4 Soma dos Expoentes e Subtração do bias.................. 35 5.5 Geração dos Produtos Parciais........................ 37 5.5.1 Multiplicação por -1......................... 39 5.5.2 Multiplicação por 2.......................... 40 5.5.3 Multiplicação por 0.......................... 40 5.6 Soma dos Produtos Parciais......................... 41 5.7 Normalização e Truncamento........................ 41

5.7.1 Normalização............................. 41 5.7.2 Truncamento............................. 42 6 Resultados Obtidos.............................. 43 6.1 Sinal da Multiplicação............................ 43 6.2 Verificação da multiplicação por 0...................... 44 6.3 Soma do Expoente e Subtração do bias................... 44 6.4 Geração dos Produtos Parciais........................ 45 6.5 Soma dos Produtos Parciais......................... 46 6.6 Normalização................................. 46 7 Conclusão e Trabalhos Futuros....................... 49 Referências..................................... 51

17 1 INTRODUÇÃO Durante a primeira Guerra do Golfo on ano de 1991, um míssel iraquiano conhecido como Scud foi lançado contra uma base americana localizada próximo de Dhanhran, na Arábia Saudita. Infelizmente nesta ocasião, 28 soldados americanos morreram e aproximadamente 100 ficaram feridos. Esta catástrofe poderia ter sido evitada caso o sistema de defesa de antimíssil Patriot, utilizado na época não tivesse falhado. O erro ocorreu na interceptação dos mísseis Sud pela baixa precisão de arredondamento no cálculo do tempo, ocasionando uma falha no radar. O número de feridos e mortos poderiam ter sido de 0 pessoas se o sistema de defesa Patriot não falhasse durante o ataque iraquiano. O sistema de defesa Patriot falhou na intercepção dos mísseis Scud pela falha no radar com o sistema, casado pela baixa precisão de arredondamento no cálculo do tempo. O tempo que o sistema incrementava era de 0,1 segundos, esse valor era representado na base 2 com 24 bits de precisão resultando no valor de 0,09999990463256836 segundo. Esse valor em um período pequeno de tempo não acarretaria em nenhum problema para o sistema, porém para tempo maiores, como 20 horas em funcionamento contínuo, o erro já era considerado muito alto, chegando ter mais de 50% de deslocamento da posição de interceptação, não identificando mais as possíveis ameaças. No caso de Dhahnan, o sistema já estava funcionando a mais de 100 horas contínuas, mais de 680 metros de deslocamento do radar. As soluções possíveis nesse caso seriam no aumento da precisão do sistema aumentando os bits de precisão ou simplesmente desligar e religar a cada período curto de tempo[3]. A representação de números reais em sistemas binários fez com que surgisse a representação numérica em ponto flutuante. Além de representar precisamente um valor numérico, calcular dois valores em ponto flutuante, como somar, multiplicar, dividir e subtrair, sem que haja erro de truncamento e com tempo de resposta imediato é um ponto crucial principalmente para sistemas críticos. 1.1 Objetivo O desenvolvimento de métodos aritméticos em ponto flutuante com custo computacional baixo e com erro de truncamento mínimo vem sendo cada vez mais exigido em sistemas com alto desempenho[1, 4, 5, 6, 2]. Atualmente o padrão IEEE 754 para Ponto Flutuante é utilizado pela maioria dos fabricantes,o objetivo do surgimento do IEEE 754 é a padronização do ponto flutuante para que um mesmo programa ou sistema possa obter

18 Capítulo 1. Introdução os mesmo resultado em diferentes tipos de máquinas [7]. 1.2 Descrição dos Capítulos Capítulo 2 - Representação de números em ponto flutuante: Será detalhado a representação do ponto flutuante e o padrão estabelecido pela IEEE 754. Capítulo 3 - Multiplicação em Ponto Flutuante: Será descrito a aritmética da multiplicação entre dois ponto flutuante. Capítulo 4 - Trabalho Relacionados: Neste capítulo serão descritos os métodos e os resultados dos trabalhos relacionados. Capítulo 5 - Desenvolvimento do Projeto: Descreve a implementação do multiplicador. Capítulo 6 - Resultados: Relata os resultados obtidos a partir de simulações. Capítulo 7 - Conclusão e Trabalho futuros

19 2 REPRESENTAÇÃO DE NÚMEROS EM PONTO FLUTUANTE A necessidade em representar número reais em computadores ou sistemas fez com que o ponto flutuante fosse concebido como uma das formas de representação adotado pela maioria dos sistemas atualmente. Para manter a objetividade do projeto, segue um resumo sobre os conceitos básicos envolvidos na modelagem. 2.1 Representação Numérica A representação tanto em decimal quanto em binário tem a seguinte forma: Decimal: 11, 43 = 1 10 1 + 1 10 0 + 4 10 1 + 3 10 2 Binário: 101, 11 = 1 2 2 + 0 2 1 + 1 2 0 + 1 2 1 + 1 2 2 2.2 Conversão Decimal Binário Em um número real decimal, a forma para converter para binário pode ser em dois momentos, a parte inteira e a parte fracionária. 2.2.1 Inteiro para Binário Para a conversão da parte inteira de um decimal para seu correspondente binário é dividir o valor decimal por 2 sucessivamente até que o quociente seja 1. O resto de cada divisão será o resultado da conversão em binário onde o resto de cada divisão preencherá o valor binário da direita para esquerda. Abaixo mostra o valor 137 convertido em binário: 137 2 = 68 resto 1 1 68 2 = 34 resto 0 01 34 2 = 17 resto 0 001 17 2 = 8 resto 1 1001 8 2 = 4 resto 0 01001 4 2 = 2 resto 0 001001 2 2 = 1 resto 0 0001001 1 2 = 0 resto 1 10001001 Assim 137 = 10001001

20 Capítulo 2. Representação de Números em Ponto Flutuante 2.2.2 Parte Fracionário para Binário Para a conversão da parte fracionária de um decimal para o binário, multiplicase a fração por 2 até que o resultado seja 1 ou até uma determinada quantidade de iterações, pois conversão da fração pode gerar infinitas iterações. Quando o resultado de cada multiplicação for maior igual a 1, adiciona 1 no bit menos significativo e subtrai o resultado por 1, caso contrário recebe 0 e não subtrai. Abaixo mostra o valor 0,5859375 convertido em binário 0, 5859375 2 = 1, 171875 1 = 0, 171875 1 0, 171875 2 = 0, 34375 10 0, 34375 2 = 0, 6875 100 0, 6875 2 = 1, 375 1 = 0, 375 1001 0, 375 2 = 0, 75 10010 0, 75 2 = 1, 5 1 = 0, 5 100101 0, 5 2 = 1 1 = 0 10011011 Assim 0, 5859375 = 0, 1001011 2.3 Representação de um Ponto Flutuante A representação em binário de um ponto flutuante tem a seguinte forma: ( 1) S M B ±E S é sinal, M a mantissa, E o expoente e B a base. O sinal demonstra se o valor a ser representado é positivo ou negativo, a mantissa é o valor do significando e o expoente o deslocamento do ponto. Um problema para a representação em ponto flutuante é a sua variedade de representar. O exemplo a seguir pode demonstrar algumas representações que são equivalentes: 1, 01 2 2 10, 1 2 1 0, 0101 2 4 Para simplificar a forma de representação em ponto flutuante, pede-se que o número esteja normalizado. A normalização é o deslocamento do ponto para esquerda ou

2.4. Padrão IEEE 754 21 para direita e o ponto irá estar a esquerda do dígito diferente de zero mais à esquerda. Como no exemplo anterior, o valor normalizado terá a seguinte forma: 1, 01 2 2 Quando aplica-se a normalização, o primeiro dígito à esquerda do ponto será sempre 1, esse dígito não terá mais necessidade de ser armazenado, chamando de dígito escondido [8]. 2.4 Padrão IEEE 754 O padrão IEEE 754 [7] foi estabelecido para normalizar o formato para representar números em ponto flutuante, assim tornando mais compatível o uso entre um programa em várias máquinas diferentes. No padrão IEEE 754 são estabelecidos o padrão de precisão em 16 bits, 32 bits, 64 bits, 128 bits e maior que 128 bits. 2.4.1 Representação em Ponto Flutuante no padrão IEEE 754 A estrutura do ponto flutuante no padrão IEEE 754 pode ser visto na figura 1. O Sinal é o bit mais a esquerda do ponto flutuante sinalizando qual é o sinal, o Expoente, entre o sinal e a mantissa, é um expoente polarizado, ou seja, a soma do expoente com o bias 1 para representação de números grandes ou pequenos sem que há necessidade de um bit de sinal para o expoente e a mantissa é a parte fracionária do ponto flutuante. Sinal Expoente fração Figura 1 Estrutura do ponto flutuante Para melhor entendimento da estrutura do ponto flutuante será demonstrado a conversão do decimal para ponto flutuante de 32 bits sendo s o sinal, m a mantissa e e o expoente. 180 = ( 1 s ) m 2 (e+127) = ( 1 0 ) 1, 0110100 2 (7+127) = 0 10000110 01101000000000000000000 A tabela 1 mostra o tamanho de armazenamento de cada precisão de ponto flutuante, sua precisão, o expoente máximo (emax), o bias, o tamanho do sinal, do expoente e da fração. 1 Constante numérico para normalização do cálculo algébrico computacional

22 Capítulo 2. Representação de Números em Ponto Flutuante Tabela 1 Parâmetros do ponto flutuante Parâmetro 16 bits 32 bits 64 bits 128 bits k bits (para k 128) Tamanho de 16 32 64 128 múltiplos de 32 armazenamento (k) Precisão (p) 11 24 52 113 inteiro(k-(4 log 2 (k)))+13 Expoente máximo 15 127 1023 16383 2 (k p 1) 1 (emax) Expoente polarizado 15 127 1023 16383 emax (bias) s (tamanho do 1 1 1 1 1 sinal) w (tamanho do 5 8 11 15 inteiro(4 log 2 (k)) 13 expoente) t (tamanho da 10 23 52 112 k w s fração) k (tamanho 16 32 64 128 s + w + t de armazenamento) A função inteiro() [7] arrendonda para o inteiro mais próximo do valor obtido. A precisão mais utilizada em ponto flutuante é de 32 bits e 64 bits. Para demonstrar números normalizados, não normalizados e exceções, a precisão de 32 bits será adotado como exemplo. 2.4.1.1 Números Normalizados, Não Normalizados e Exceções Em qualquer precisão de ponto flutuante existe uma lacuna pela qual a representação se torna impossível pela sua limitação na representação, como na figura 2 que mostra os valores representáveis pela precisão de 32 bits. O valor máximo é de ±(2 2 23 ) 2 127 e o valor mínimo é de ±2 126 Figura 2 Representação em ponto flutuante

2.4. Padrão IEEE 754 23 Há momentos no sistema que os resultados apresentados em uma operação ultrapassa os valores representáveis pelo ponto flutuante. Gerando as seguintes situações: Overflow: Quando o expoente excede o valor máximo do expoente. Em alguns sistemas isso pode ser representado como + ou. Underflow: Quando o valor mínimo do expoente é excedido. Pode-se representar como 0. O padrão IEEE 754 limita a representação de valores para que não hajam problemas de representação. Para a precisão de 32 bits, ou precisão simples, tem 8 bits de expoente e 23 bits de fração. Na tabela 2 mostra os valores das possíveis representações. Tabela 2 Representação para precisão de 32 bits Expoente polarizado Fração Valor Interpletação 0<E<255 Qualquer valor ( 1) s 2 (e 127) 1,F ± Normalizado E=0 F=0 ( 1) s 0 ±Zero E=0 F 0 ( 1) s 2 (e 126) 0,F ±Não-normalizado E=255 F=0 ( 1) s ±infinito E=255 F 0 NaN NaN 2.4.1.2 Arredondamento e Truncamento Quando ocorre uma operação qualquer, normalmente o resultado da operação é guardado em um registrador de tamanho maior [9], para que o resultado possa ser colocado dentro do formato do ponto flutuante, existem 4 maneiras de arredondamento para a eliminação dos bits extras[9][7]: Arredondamento para o mais próximo: Arredonda o resultado para o valor representável mais próximo. Arredondamento para cima: Arredonda o resultado para cima, em direção para o infinito positivo. Arredondamento para baixo: Arredonda o resultado para baixo, em direção para o infinito negativo. Truncamento: Truncamento consiste em simplesmente ignorar os bits excedentes. A tabela 3 mostra os resultados de cada arredondamento de 6 bits para 3 bits.

24 Capítulo 2. Representação de Números em Ponto Flutuante Tabela 3 Tipos de Arredondamento Arredondamento 1,0111 1,01010-1,0111-1,01010 Mais Próximo 1,10 1,01-1,10-1,01 Para Cima 1,10 1,10-1,01-1,01 Para Baixo 1,01 1,01-1,10-1,10 Truncamento 1,01 1,01-1,01-1,01 Cada forma de arredondamento varia na sua acurácia em relação ao resultado exato. O truncamento consiste em simplesmente ignora os bits excedentes, isso permite com que a acurácia do truncamento seja menor em relação ao arrendondamento para o mais próximo. Abaixo mostra a diferença de acurácia entre o arredondamento para o mais próximo e o truncamento para 6 bits: 1, 8 = 1, 1100110011001100... Truncando: 1, 11001 = 1, 78125 Arredondando para o mais próximo: 1, 11010 = 1, 8125 Enquanto o erro do truncamento é de 0,0175, no arredondamento para o mais próximo é de 0,0125. Porém como a precisão é maior e o truncamento só há a necessidade de ignorar os bits excedentes sem nenhuma verificação, a implementação é mais simples e o tempo de resposta é melhor em relação ao arredondamento,o truncamento será adotado neste projeto.

25 3 TRABALHOS RELACIONADOS Este capítulo abordará metodologias de autores separando cada artigo em subseções distintas, descrevendo a implementação do circuito do multiplicador em ponto flutuante, sintetizado através do VHDL, simulando e obtendo resultados com FPGAs. Na última sessão demonstrará as metodologias empregados para o multiplicador deste projeto e suas motivações. 3.1 Uma Implementação Eficiente de Um Multiplicador em Ponto Flutuante Mohamed Al-Ashrafy, Ashraf Salem e Wagdy Anis implementaram um multiplicador em ponto flutuante no padrão IEEE 754 de precisão simples sem tratamento para arredondamento no FPGA Xilinx Virtex-5 em VHDL [1]. O núcleo do Xilinx Virtex-5, que tem um multiplicador próprio, foi utilizado para comparação do resultado em relação ao multiplicador implementado. O hardware do multiplicador foi separado na seguinte forma: Sinal Somador dos expoentes Multiplicador das mantissas Normalização Para verificar se o sinal do resultado da multiplicação é negativo ou positivo, o sinal é definido por um circuito lógico XOR. O somador do expoente foi implementado um somador sem sinal e com tempo de resposta não tão rápido, pois o multiplicador terá um tempo de resposta maior em relação a soma do expoente. Para o somador dos expoentes foram utilizados somadores completos e um meio somador. O multiplicador das mantissas foi implementado com um multiplicador sem sinal, a arquitetura do multiplicador é de 24 bits simples com três estágios. No primeiro estágio utiliza um conjunto de somadores parciais. No segundo estágio utilizou somadores completos e no ultimo estágio somadores completos com propagação de carry na horizontal.

26 Capítulo 3. Trabalhos Relacionados Para a obtenção dos resultados, foi utilizado um testbench para gerar estímulos para aplicar no multiplicador e no núcleo do Xilinx. O núcleo do Xilinx foi alterado para indicar frag para underflow e overflow, com latência máxima para três ciclos. A tabela 5 mostra o resultado do multiplicador em relação ao núcleo o Xilinx. A quantidade de Configuration Logical Blocks Slices (CLB Slices) e do D-Flip Flop (DFF) utilizado no multiplicador foi de 1263 e 604 respectivamente, enquanto do núcleo Xilinx foi de 765 e 266 respectivamente. A frequência do multiplicador foi de 301.114 MHz enquanto do núcleo do Xilinx foi de 221.484 MHz Multiplicador em Núcleo do Xilinx ponto flutuante CLB Slices 1263 765 DFF 604 266 Frequência máxima 301.114 MHz 221.484 MHz Tabela 4 Resultado entre o multiplicador em ponto flutuante e o núcleo do Xilinx O tamanho do núcleo do Xilinx é menor em relação do multiplicador pois não trunca/arrendonda os 48 bits da multiplicação no qual reflete na quantidade de registradores para executar sobre os bits extras e também no geradores de função. 3.2 Implementação em Hardware de um Multiplicador em Ponto Flutuante de Alta Velocidade em FPGA No artigo [2] foi implementado um multiplicador em ponto flutuante de precisão simples no padrão IEEE 754 com o produto parcial comprimido pelo algoritmo Radix-4 Booth s, o compressor 4:2 comprime os produtos parciais, a soma e o vetor de carry e são somados em uma look-ahead adder para obtenção do produto. O multiplicador foi utilizado especialmente para um processador FFT, adotando a técnica de pipeline para que funcionasse de forma estável a 80 MHz. O Projeto foi dividido em módulo do expoente, do codificador de Booth melhorado e do compressor. O módulo do expoente tem 8 bits com sinal de carry que é utilizado para a normalização do resultado com as seguintes regras: 1. Se normalização é igual a zero, então o expoente não muda, senão adiciona 1. 2. Se o sinal do carry dos dois níveis anteriores foram 00, então o resultado é underflow, se for 11, então é overflow, senão os resultados são normais. Se aparecer

3.2. Implementação em Hardware de um Multiplicador em Ponto Flutuante de Alta Velocidade em FPGA 27 overflow, então parte do expoente será tudo 1 e parte da mantissa será tudo 0, tornando como infinito no padrão IEEE 754. Caso ocorra underflow, então o expoente se tornará tudo 0 no resultado do multiplicador, que é o infinitesimal no padrão IEEE 754. 3. Se o sinal do carry for 1, será determinada pelo sinal da normalização para definir se é overflow. Nos produtos parciais, como o tempo de atraso é determinado pelo número dos produtos parciais, será adotado um codificador Radix-4 Booth para melhorar o esquema de codificação tradicional no projeto. Foi adotado a técnica de verificar cada ciclo, onde o número dos produtos parciais é reduzido para 13. O codificador de Booth tem 4 resultados, ZERO que multiplica por 0, ADD_SU B multiplica por 1, ADD_SUB2 multiplica por 2 e NEG multiplica por -1. De acordo ao princípio do codificador Booth, o gerador do produto parcial segue as seguintes regras: P P i = SHIF T NEG + SHIF T NEG SHIF T = ZERO (ADD_SUB A i + ADD_SUB2 A i 1 ) Aonde P P i é o produto parcial e A i o multiplicando. Depois da extensão do bit escondido e bit do sinal, o multiplicando, com 26 bits na mantissa, irá produzir 13 produtos parciais. No multiplicado em ponto flutuante, o complemento de 2 irá ser adotado na operação na parte da mantissa. Assim 1 será adicionado no bit menos significativo para NEG igual a 1 pois o complemento de 1 será implementado somente no P P i. Para aumentar o paralelismo, a operação de adição de 1 no produto parcial é implementado no compressor. Porém foi implementado a operação de adição dos números sinalizados. O bit de sinal do produto parcial deve ser estendido. Somente o primeiro produto parcial terá 29 bits, os outros produtos parciais terão 32 bits, onde no primeiro produto parcial terá 3 bits de sinal de extensão SSS. nos outros produtos parciais, terá 2 bit de sinal de extensão, e o bit de operação de adição 1 é NN. Segue a seguinte regra: Primeiro bit: Segundo até 13 o bit: SSS = {sign(i), sign(i), sign(i)} NN = {0, sign(i 1)} linha. Aonde i é a linha do produto parcial, sign(i) é o sinal do produto parcial na i-ésima

28 Capítulo 3. Trabalhos Relacionados Foi implementado uma estrutura de um compressor tradicional de um produto parcial melhorada e um compressor 4:2, um compressor 3:2, um somador completo e um meio somador são usado simultaneamente para implementar um compressor rápido para os 13 produtos parciais. O novo hardware implementado de um multiplicador em ponto flutuante de alta velocidade em uma FPGA é desenvolvido baseado na técnica em pipeline. O tempo de simulação mostrou que o multiplicador em ponto flutuante pode rodar numa frequência de 80 MHz constantemente de forma estável. O multiplicador tem sido bem adotado no processador FFT. 3.3 Projeto e Implementação do Multiplicador de Ponto Flutuante Para Melhor Desempenho de Tempo Em [10], pela complexidade dos algoritmos, a implementação das operações em ponto flutuantes são muito difíceis em uma FPGA. A computação das operações envolve grande arranjos dinâmicos, porém os recursos necessários para essas operações é grande em comparação as operações com inteiros. Tem se o Multiplicador para números binários sem e com sinal, para a multiplicação do ponto flutuante, o multiplicador em ponto flutuante é utilizado. O multiplicador sem sinal utiliza um arranjo de portas AND e somadores completos. A entrada é positivo gerando saída positivo. Esse multiplicador é utilizado na parte da mantissa do ponto flutuante. O multiplicador do ponto flutuante é responsável pela multiplicação de dois números de ponto flutuante. A operação desse multiplicador é de simples adição especialmente pelo formato de 32 bits. Para multiplicar os números em ponto flutuante, as mantissas são multiplicados por um multiplicador sem sinal. Então os expoentes são somados e o excesso é subtraído para o resultado. O saída do sinal vem a partir de um XOR com o sinal de cada ponto flutuante. Após a multiplicação, normaliza o resultado, se for necessário, ajusta a mantissa e o expoente para que o bit mais significativo da mantissa seja 1. No expoente, somadores sem sinal somaram a entrada do primeiro expoente com o segundo expoente e subtrai o rsultado da soma pelo bias (127). O resultado deste estágio se chama expoente intermediário. Como a necessidade da operação não é necessariamente ser rápido, pois no expoente soma 2 expoente de 8 bits e a mantissa multiplica 24 bits por 24 bits, o somador com propagação de carry é utilizado para a soma dos dois expoentes. No somador, é utilizado um meio-somador e 7 somadores completos, gerando 8 bits como resultado, esse resultado é subtraído pelo bias a partir do arranjo de ripple borrow

3.4. Metodologias utilizados 29 subtractors. O sinal da multiplicação, somente é negativo se somente um dos dois sinais dos ponto flutuante de entrada for negativo, caso contrário será positivo. A partir do uso de um XOR obtém o resultado do sinal. No expoente, pode acontecer o Underflow ou Overflow. No caso do Overflow, pode ocorrer quando soma dois expoentes ou quando está sendo normalizado. O Overf low pode ser compensado quando subtrai com o bias. O Underflow pode ocorrer quando a subtração do bias com o expoente já somado resulta igual ou menor a 0, quando for menor, não há como compensar, mas quando o resultado for 0, há chance de ser compensado durante a normalização adicionando 1. O multiplicador foi implementado com estágio de três pipelining, para dividir o caminho crítico, podendo aumentar a frequência da operação do multiplicador. Os estágios do pipeling foram divididos nas seguintes etapas: 1. No meio da multiplicação do significando e no meio da soma do expoente, antes da subtração com o bias. 2. Depois da multiplicação do significando e após a subtração do bias. 3. Na saída da multiplicação do ponto flutuante, com o sinal, expoente e mantissa. A simulação do multiplicador foi implementado para o dispositivo Xilinx Spartan 3. O tempo de performance foi observado com a ferramenta Xilinx Timing Analyzer. O resultado obtido pela arquitetura em pipeline mostrou ser 0.54 ns mais rápido do que na arquitetura convencional. Esta vantagem será bem utilizado em aplicativos DSP (Digital Signal Processing). 3.4 Metodologias utilizados Para este projeto o sinal da multiplicação será implementado com um circuito lógico XOR [1, 2, 10]. Para a soma dos expoentes e a subtração com o bias, foram utilizados somadores com propagação de carry para a soma dos expoentes [1, 10]. A subtração é feita com o resultado da soma dos expoentes e subtratores otimizados para o valor do bias [1]. Na geração dos produtos parciais, o codificador Radix-4 Booth [2] foi utilizado para diminuir a quantidade de produtos parciais. Para o padrão de 32 bits. Como a mantissa tem 23 bits de fração e 1 bit escondido com valor 1 no bit mais significativo na mantissa, são gerados 23 produtos parciais em uma multiplicação normal entre duas mantissas. Já

30 Capítulo 3. Trabalhos Relacionados no codificador são gerados 13 produtos parciais, produzindo 10 produtos parciais a menos, exigindo menos para a soma dos produtos parciais.

31 4 MULTIPLICAÇÃO EM PONTO FLUTUANTE A aritmética de um multiplicador em ponto flutuante é mais simples em relação as operações de soma e subtração pelo fato de não haver necessidade de igualar os expoentes dos pontos flutuantes na operação. A figura 3 mostra o diagrama da multiplicação entre dois ponto flutuante. No início, o multiplicador recebe os pontos flutuantes X e Y e verifica se um dos dois é zero. Caso seja verdade, o resultado da multiplicação Z retorna com o valor zero. Senão soma os expoentes e subtrai pelo valor do bias. Após a subtração, verifica se não ocorreu a excessão de overflow, quando o resultado do expoente é maior que o expoente máximo, ou de underflow, quando o resultado é menor que o expoente mínimo. Após a verificação, multiplica-se as mantissas, normaliza-se e trunca ou é arredonda gerando a mantissa resultante. Por fim retorna a multiplicação entre X e Y ou uma excessão. Figura 3 Diagrama do multiplicador Para melhor entendimento, considere-se 2 números em ponto flutuante normalizados com precisão de 16 bits, PF1 = 0 10000 01101000000 binário ou 2,8125 em decimal,

32 Capítulo 4. Multiplicação em Ponto Flutuante e PF2 = 0 00000 0000000000 binário ou 0 em decimal. Nesse caso, como o PF2 é igual a 0. A multiplicação de qualquer valor com 0 é 0, então retorna-se 0 como resultado. Em um outro exemplo, o ponto flutuante PF1 = 0 10000 01101000000 ou 2,8125 em decimal e PF2 = 0 10011 0110001000 ou 20,25 em decimal. Inicia-se a multiplicação. Como no diagrama mostrado na figura 3, soma-se os dois expoentes e com a soma, subtrai-se o bias, que na precisão de 16 bits, possui um valor de 15 ou 01111 em binário. 10000 + 10011 = 100011 100011 01111 = 10100 Com o resultado do expoente, é possível verificar se ocorreu um overflow ou um underflow. Como o resultado foi 10100 ou 20 em decimal, valor está representável para precisão de 16 bits, continua-se normalmente o calculo da multiplicação. Após o calculo do expoente, calcula-se o valor da mantissa multiplicando como na figura 4 onde pode se ver a multiplicação entre PF1 e PF2. Figura 4 Multiplicação entre a mantissa de PF1 e PF2 Por ultimo deve-se verificar se há necessidade de normalização, arrendondamento ou truncamento do resultado da multiplicação da mantissa. Como o resultado está normalizado, há somente a necessidade do arredondamento ou truncamento. No caso acima foi utilizado um truncamento, excluindo os 10 bits menos significativos e resultando 1111000111 na mantissa. Com isso, o resultado final entre a multiplicação de PF1 e PF2 é de 0 10100 1111000111.

33 5 DESENVOLVIMENTO DO PROJETO Este capítulo aborda a implementação do multiplicador em ponto flutuante, em cada etapa do processo, detalhando a sua estrutura lógica a partir das informações obtidas nas fundamentações teóricas. A condição de entrada para realizar-ser o calculo da multiplicação, será com ponto flutuante normalizado. A precisão utilizado para o projeto foi de 32 bits. 5.1 Estrutura do Multiplicador O multiplicador em ponto flutuante constitui na seguinte estrutura: 1. Sinal da multiplicação; 2. Verificação da multiplicação por 0. 3. Soma dos expoentes e subtração do bias; 4. Geração dos produtos parciais; 5. Soma dos produtos parciais; 6. Normalização E truncamento; A figura 5 mostra o diagrama da estrutura do multiplicador implementado, a multiplicação inicia-se com recebimento dos sinais, expoentes e mantissas de cada ponto flutuante. No sinal, faz a verificação retornando ao resultado final. Com o valor do expoente e da mantissa de cada entrada, verifica se os dois valores são zero para cada ponto flutuante, caso seja verdade para um dos dois ponto flutuante, retorna a exceção de Zero para o resultado final. Após a verificação do Zero, o expoente de cada entrada é somado e subtraído com o bias e verifica se houve overflow ou underflow, caso aconteça, retorna ao resultado a exceção, caso contrário, continua a multiplicação. Em paralelo, faz a multiplicação com as entradas de cada da mantissa e gera os produtos parciais. Com os produtos parciais gerados, soma-se e verifica a necessidade da normalização, caso haja necessidade incrementa o expoente e normaliza o resultado da soma. Por fim, trunca-se o valor gerando a mantissa resultante, e retorna ao resultado final. No expoente, após verificar a necessidade do incremento, verifica novamente a ocorrência de overflow ou underflow e retorna o resultado do expoente ao resultado final.

34 Capítulo 5. Desenvolvimento do Projeto Figura 5 Estrutura do multiplicador 5.2 Sinal da Multiplicação No sinal, a única condição para que a multiplicação entre dois números seja negativo é quando somente um dos dois números é negativo. O circuito lógico XOR foi empregado para obter o sinal através dos dois ponto flutuante. A tabela 5 mostra a tabela verdade do circuito lógico, Quando as entradas A e B são iguais, o resultado será 0 e quando são diferentes, será 1. Tabela 5 Tabela verdade do circuito lógico XOR A B Resultado 0 0 0 0 1 1 1 0 1 1 1 0 5.3 Verificação da Multiplicação por 0 No início da multiplicação, verifica se o expoente e a mantissa dos dois números em ponto flutuante da entrada são 0. Caso positivo, o sinal de Zero é ativado. Antes de começar a calcular a multiplicação, verifica se um dos pontos flutuantes de entrada não tem valor 0, para essa verificação, cada ponto flutuante verifica se a mantissa e o expoente é igual a 0. A figura 6 mostra o circuito do verificador para uma entrada. No expoente e na mantissa são utilizados circuitos lógicos OR, caso 1 bit dos 8 bits do expoente ou o 1 bits dos 23 bits da mantissa for 1, o sinal de Zero não é ativado.

5.4. Soma dos Expoentes e Subtração do bias 35 E7 E6 E5 E4 E3 E2 E1 E0 M22 M21 M20 M19 Mi M3 M2 M1 M0...... Zero Figura 6 Circuito verificador de 0 5.4 Soma dos Expoentes e Subtração do bias O somador dos expoentes possui a função de adicionar o valor do primeiro expoente com o segundo expoente subtraindo-se com o valor do bias que varia de acordo com o padrão de precisão estabelecido. Neste caso é utilizado o padrão de precisão de 32 bits e o valor do bias será 127 ou 01111111 em binário. A soma entre os expoentes utiliza somadores com propagação do carry [1]. Utilizase 1 meio somador e 7 somadores completos, a entrada do meio somador serão do primeiro bit de cada expoente (A 0,B 0 ) com saída da soma e o carry (S 0,C out,0 ), no somadores completos, as entradas recebem a sequência dos próximos bits de cada expoente mais o Carry de cada somador anterior (A,B,C in ). A figura 7 mostra o somador com a propagação de carry. Cout,7 A7 B7 Cin,7 Cout,6 A6 B6 Cin,6... Cout,1 A1 B1 Cin,1 Cout,0 A0 B0 S7 S6 S1 S0 Figura 7 Somadores com propagaçao de carry A soma do somador com propagação do carry gera 8 bits (S 7,S 0 ) e mais 1 bit do carry (C out,7 ). Concatenando a soma com o carry formam um conjunto de 9 bits, esse resultado será subtraído com o bias para o resultado do expoente. Subtratores comuns tem três entradas, o minuendo (S), o subtraendo (T ) e o empréstimo de entrada (Bin). Com duas saídas, o resto (R) e o empréstimo de saída (B out ). Porém considerando que o valor do bias sempre será o mesmo valor para a precisão de 32 bits (01111111), então implementou-se dois subtratores com uma lógica otimizada.

36 Capítulo 5. Desenvolvimento do Projeto O primeiro subtrator otimizado gera o resultado quando o valor de entrada do subtraendo é sempre 1 [1]. A tabela 6 mostra a tabela verdade do subtrator. Tabela 6 Subtrator com subtraendo T = 1 S T B in R B out 0 1 0 1 1 1 1 0 0 0 0 1 1 0 1 1 1 1 1 1 A equação booleana é representado da seguinte maneira: R = S B in B out = S + B in A figura 8 mostra o circuito lógico. Figura 8 one subtractor A tabela 7 mostra a tabela verdade do subtrator com subtraendo com valor 0 [1]. Tabela 7 Subtrator com subtraendo T = 0 S T B in R B out 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 0 1 0 0 A equação booleana é representado da seguinte maneira: R = S B in B out = S B in A figura 9 mostra o circuíto lógico. Figura 9 zero subtractor

5.5. Geração dos Produtos Parciais 37 Com os subtratores, o subtrator do bias será composto por 7 subtratores T = 1 e 2 subtratores T = 0. A figura 10 mostra o subtrator do bias. Para a detecção do overflow ou underflow no expoente, o resto (R 8 ) e empréstimo de saída (B out,8 ) são verificados. No caso para a detecção de underflow, o (R 8 ) e o (B out,8 ) forem 1, o sinal de underflow é acionado. Para o overflow, quando o (B out,8 ) é 1 e o (R 8 ) é 0, então o sinal de overflow é acionado. Figura 10 Circuito do Subtratores do Expoente 5.5 Geração dos Produtos Parciais Para gerar os produtos parciais, foi utilizado o codificador Radix-4 Booth [2], onde diminuiu a quantidade de produtos parciais de 24 para 13 produtos parciais, aumentando o desempenho. Para maior praticidade para demonstrar a geração dos produtos parciais, serão utilizados exemplos com 4 bits de tamanho. O codificador Radix-4 Booth gera a multiplicação do produto parcial a partir de um conjunto de 3 bits do multiplicador, pela qual os 2 bits mais significativo do primeiro conjunto é obtido a parir do 2 bits menos significativo do multiplicador e 0 no bit menos significativo do conjunto. Os próximos conjuntos são obtidos a cada 2 deslocamento a esquerda do multiplicador e sucessivamente. Quando o último conjunto tem somente 2 ou 1 bit, adiciona 0 nos bits mais significativos faltantes. Em um multiplicador de 4 bits, foram gerados 3 produtos parciais em vez de 4 na forma tradicional. A Figura 11 mostra a separação dos conjuntos de 3 bits do multiplicador, onde em cor cinza são os bits 0 gerados para a codificação. 0010110 Figura 11 Separação dos conjuntos de 3 bits do multiplicando

38 Capítulo 5. Desenvolvimento do Projeto A Tabela 8 mostra a tabela verdade do codificador. Na tabela verdade o ZERO representa a multiplicação por 0, ADD2 a multiplicação por 2 e NEG a multiplicação por -1, quando ADD2 e NEG forem 1, então a multiplicação será por -2. Tabela 8 Tabela verdade do codificador codificação de 3 bits [2:0] ZERO ADD2 N EG multiplicação 000 1 0 0 0 001 0 0 0 1 010 0 0 0 1 011 0 1 0 2 100 0 1 1 ( 2) 101 0 0 1 ( 1) 110 0 0 1 ( 1) 111 1 0 0 0 As equações e os circuitos de ZERO, ADD2 e NEG são apresentados a seguir, pela qual dentro do conjunto de 3 bits, o bit menos significativo é a entrada A, o bit do meio é o B e o bit menos significativo é o C. Com a saída Z de ZERO, D na de ADD2 e N para NEG. A equação booleana de ZERO é representado da seguinte maneira: Z = ((A + B) C) + ((A B) C) A figura 12 mostra o Circuito logico de ZERO. A B C Z Figura 12 Circuito logico de ZERO A equação booleana de ADD2 é representado da seguinte maneira: D = ((A B) C) + ((A B) C) A figura 13 mostra o circuito logico de ADD2.

5.5. Geração dos Produtos Parciais 39 Figura 13 Circuito lógico de ADD2 =A equação booleana de NEG é representado da seguinte maneira: N = (A B) + (A C) A figura 14 mostra o circuito de NEG. Figura 14 Circuito logico de NEG Para que o produtos parciais possam obter os valores de acordo com o codificador radix-4 booth, foi implementado os circuitos do multiplicando MU que passa primeiro pelo circuito da multiplicação por -1, após isso verifica se é multiplicado por 2 e por fim se o produto parcial é 0. 5.5.1 Multiplicação por -1 Na multiplicação por -1, verifica se o valor de N é 1, se for, o resultado do multiplicando será negativo, senão passa o valor normal do multiplicando, passando para o N i, obténdo 1 bit a mais a esquerda, onde recebe o valor de N. A figura 15 mostra o circuito para a geração e verificação do multiplicando para negativo, onde o tamanho da mantissa é de 4 bits e o resultado é 5 bits.

40 Capítulo 5. Desenvolvimento do Projeto Figura 15 Circuito para a geração e verificação do multiplicando em negativo 5.5.2 Multiplicação por 2 Com o resultado do N i, verifica se D é 1, se sim, faz com que o resultado N i desloque para a esquerda, onde o primeiro bit menos significativo recebe o valor 0, passando para o D j. Assim gerando 6 bits. Quando D for 0, O resultado D j recebe mais um bit a esquerda com o valor igual ao bit mais significativo de N i. A figura 16 mostra a continuação da verificação e da multiplicação. Figura 16 Circuito para a geração e verificação do multiplicando por 2 5.5.3 Multiplicação por 0 Para a multiplicação por 0, verifica se Z é 1, caso for, o valor final é multiplicado por 0, senão passa o valor de D j para o resultado do produto parcial. A figura 17 mostra a verificação e o resultado final para a mantissa 4 bits,

5.6. Soma dos Produtos Parciais 41 Figura 17 Circuito para verificação e multiplicação por 0 5.6 Soma dos Produtos Parciais O somador dos produtos parciais foi utilizado somadores com propagação de carry. A figura 18 mostra um somador dos produtos parciais com 6 bits de tamanho. O A i B j são os produtos parciais, onde A i é o produto parcial i gerado, e o B j o bit na posição j de A i. A primeira soma, soma o primeiro produto parcial com o segundo deslocado 2 bits para a esquerda, pela qual o bit mais significativo é replicado para somar com os produtos parciais seguintes. Figura 18 Somadores dos produtos parciais de 6 bits O resultado da soma da figura 18 gera 8 bits como saída, passando posteriormente para a normalização. 5.7 Normalização e Truncamento 5.7.1 Normalização Após obter o resultado da soma dos produtos parciais, verifica se o resultado final está normalizado ou não, para que possa saber se o resultado da soma está normalizado, verifica se no bit mais significativo do resultado é igual a 1, se for, desloca 1 bit o resultado para a direita. A figura 19 mostra o circuito da normalização.

42 Capítulo 5. Desenvolvimento do Projeto S7 S6 S5 S4 S3 S2 S1 S0 R6 R5 R4 R3 R2 R1 R0 Figura 19 Normalizador para multiplicação de 4 bits No expoente, quando ocorre a normalização na mantissa, o resultado do somador do expoente é incrementado. Quando o bit mais significativo do resultado da soma dos produtos parciais é 1, ocorre a incrementação e quando o carry da ultima soma for 1, o sinal de overflow é ativado, porém se o sinal de underflow estiver ativado, independente do incremento, o overflow irá manter 0. O resultado final será o conjunto de bits E [7..0] e o resultado de overflow e underflow. A figura 20 mostra o incremento do expoente de precisão simples que s]ao compostos por meio somadores. FO in FUin R7 R6 R5 R4 R3 R2 R1 R0 S47 FUout FOout E7 E6 E5 E4 E3 E2 E1 E0 Figura 20 incremento no expoente e verificação de overflow 5.7.2 Truncamento Após a normalização da mantissa, os bits extras são descartados obtendo os 23 bits do resultado da mantissa.

43 6 RESULTADOS OBTIDOS Este capítulo demonstrará os resultados obtidos, separando em etapas, descrevendoos cada resultado. A simulação foi realizado no programa de circuitos digitais Proteus. A Tabela 9 e 10 mostra 10 entradas para a simulação. O símbolo MUi é o multiplicando e MDi o multiplicador. Cada tabela mostra a entrada em decimal e em ponto flutuante separando em sinal, expoente e mantissa. Tabela 9 Valores do multiplicando Símbolo Multiplicando Sinal Expoente Mantissa MU1 0 0 00000000 00000000000000000000000 MU2 0 0 00000000 00000000000000000000000 MU3-365,15625 1 10000111 01101101001010000000000 MU4-365,15625 1 10000111 01101101001010000000000 MU5 2 100 0 11100011 00000000000000000000000 MU6 2 98 1 11100001 00000000000000000000000 MU7 (2 98 + 2 97 ) 0 11100001 10000000000000000000000 MU8 (2 98 + 2 97 ) 0 11100001 10000000000000000000000 MU9 2 ( 63) + 2 ( 60) 0 01000000 00100000000000000000000 MU10 (2 ( 63) + 2 ( 60) ) 1 01000000 00100000000000000000000 Tabela 10 Valores do multiplicador Símbolo Multiplicador Sinal Expoente Mantissa MD1 2,5 0 10000000 01000000000000000000000 MD2-2,5 1 10000000 01000000000000000000000 MD3-7,18194580078125 1 10000001 11001011101001010000000 MD4 7,18194580078125 0 10000001 11001011101001010000000 MD5 1744830464 0 10011101 10100000000000000000000 MD6 1744830464 0 10011101 10100000000000000000000 MD7 1744830464 0 10011101 10100000000000000000000 MD8-1744830464 1 10011101 10100000000000000000000 MD9 2 ( 67) + 2 ( 66) + 2 ( 64) 0 00111100 10100000000000000000000 MD10 2 ( 67) + 2 ( 66) + 2 ( 64) 0 00111100 10100000000000000000000 6.1 Sinal da Multiplicação A Tabela 11 mostra os resultados dos sinais entre MUi MDi.

44 Capítulo 6. Resultados Obtidos Tabela 11 Resultado do Sinal Multiplicação Sinal Multiplicação Sinal MU1 MD1 0 MU6 MD6 1 MU2 MD2 1 MU7 MD7 0 MU3 MD3 0 MU8 MD8 1 MU4 MD4 1 MU9 MD9 0 MU5 MD5 0 MU10 MD10 1 6.2 Verificação da multiplicação por 0 A Tabela 12 mostra o resultado da verificação por 0. Na multiplicação de MU1 MD1 e MU2 MD2, o sinal de Zero foi ativado, pois os expoentes e as mantissas de MU1 e MU2 são 0. Tabela 12 Resultados da verificação por 0 Multiplicação Zero Multiplicação Zero MU1 MD1 1 MU6 MD6 0 MU2 MD2 1 MU7 MD7 0 MU3 MD3 0 MU8 MD8 0 MU4 MD4 0 MU9 MD9 0 MU5 MD5 0 MU10 MD10 0 6.3 Soma do Expoente e Subtração do bias A Tabela 13 mostra os resultados da soma do expoentes de MUi MDi subtraído com o bias e a verificação da ocorrência de overflow(of) ou underflow(uf). Na multiplicação MU5 MD5, como o cálculo ficou maior que 255, ativando o sinal de overflow. E na multiplicação MU9 MD9 e MU10 MD10, ativou o underflow pois o cálculo resultou menor que 0. Tabela 13 Resultados da soma dos expoente com a subtração com o bias e a verificação de overflow e underflow Multiplicação Expoente OF UF Multiplicação Expoente OF UF MU1 MD1 00000001 0 0 MU6 MD6 11111111 0 0 MU2 MD2 00000001 0 0 MU7 MD7 11111111 0 0 MU3 MD3 10001001 0 0 MU8 MD8 11111111 0 0 MU4 MD4 10001001 0 0 MU9 MD9 11111101 0 1 MU5 MD5 00000001 1 0 MU10 MD10 11111101 0 1