UNIVERSIDADE CATÓLICA DE PELOTAS ESCOLA DE INFORMÁTICA PROGRAMA DE PÓS-GRADUACÃO EM INFORMÁTICA Circuitos Multiplicadores Array de Baixo Consumo de Potência Aplicados a Filtros Adaptativos por Leandro Zafalon Pieper Dissertação apresentada como requisito parcial para obtenção do grau de Mestre em Ciência da Computação Orientador: Prof. Dr. Eduardo Antônio César da Costa Co-orientador: Prof. Dr. Sérgio José Melo de Almeida DM-2008/8-005 Pelotas, Agosto de 2008 2 AGRADECIMENTOS Ao completar este trabalho, presto meus agradecimentos a todos que de alguma forma contribuíram de forma direta ou indireta. Agradeço a minha mãe e a minha namorada pelo incentivo dado. Aos meus colegas de laboratório, meu sincero obrigado, pela companhia e auxílio. Um especial agradecimento aos meus professores: orientador Prof. Dr. Eduardo Antônio César da Costa e co-orientador Prof. Dr. Sérgio José Melo de Almeida, pelo incentivo e ajuda ao longo desta jornada. Saibam que vossa amizade, apoio e companheirismo foram fundamentais para o desenvolvimento deste trabalho. 3 SUMÁRIO LISTA DE FIGURAS......................................................................................................... 5 LISTA DE TABELAS........................................................................................................ 6 LISTA DE ABREVIATURAS E SIGLAS ....................................................................... 7 RESUMO............................................................................................................................. 8 ABSTRACT ........................................................................................................................ 9 1 INTRODUÇÃO .......................................................................................................... 10 1.1 Motivação ................................................................................................................. 11 1.2 Objetivos................................................................................................................... 11 1.3 Metodologia............................................................................................................... 12 1.3.1 Ambientes de descrição e análise dos multiplicadores............................................ 12 1.3.2 Ferramenta automática de geração das descrições dos circuitos multiplicadores (RAMAGT) ......................................................................................................................... 14 1.4 Principais contribuições do trabalho ...................................................................... 17 1.5 Sumário ..................................................................................................................... 17 2 POTÊNCIA E ATRASO EM CIRCUITOS CMOS................................................. 18 2.1 Fontes de Consumo de Potência em Circuitos CMOS .......................................... 18 2.1.1 Consumo de Potência Estática................................................................................. 19 2.1.2 Consumo de Potência de Curto-Circuito................................................................. 20 2.1.3 Consumo de Potência Dinâmica.............................................................................. 20 2.1.4 Consumo de Potência pela Atividade de Glitching ................................................. 21 3 OPERADORES ARITMÉTICOS EFICIENTES .................................................... 23 3.1 Estado da Arte de Circuitos Multiplicadores......................................................... 23 3.2 Operação de Multiplicação na Base 2m em Complemento de 2............................ 26 3.3 Multiplicador Booth Modificado............................................................................. 28 3.4 Somador do tipo Carry Save Adder (CSA)............................................................ 30 3.5 Circuitos Somadores Compressores ....................................................................... 32 3.6 Sumário ..................................................................................................................... 35 4 OTIMIZAÇÕES NOS BLOCOS DE MULTIPLICAÇÃO NA BASE 2m ............. 36 4.1 Técnicas para otimizações dos blocos de multiplicação m=4................................ 38 4.1.1 Otimização usando blocos de multiplicação m=2 e somadores RCA ..................... 38 4.1.2 Otimização usando blocos de multiplicação m=2 e somadores CSA...................... 39 4.1.3 Uso de blocos de multiplicação dedicados 4:2 e RCA............................................ 41 4.1.4 Análise Comparativa ............................................................................................... 42 4.2 Aplicação da segunda técnica (m=2 e CSA) a diferentes valores de m ................ 43 4 4.2.1 Análise comparativa entre multiplicadores com diferentes valores de m ............... 47 4.2.2 Análise comparativa entre circuitos multiplicadores array na base 2m e Booth modificado ............................................................................................................... 52 4.3 Sumário ..................................................................................................................... 56 5 CIRCUITOS SOMADORES EFICIENTES APLICADOS AOS m MULTIPLICADORES ARRAY NA BASE 2 ................................................................ 57 5.1 Extensão dos Circuitos Somadores Compressores para Blocos 8:2 e 16:2 ......... 57 5.2 Aplicação dos Compressores a Multiplicadores Array na Base 2m ...................... 61 5.2.1 Análise Comparativa de Circuitos Multiplicadores Array na Base 2m Utilizando Somadores Compressores........................................................................................ 64 5.3 Sumário ..................................................................................................................... 67 ESTUDO DE CASO: MULTIPLICADORES ARRAY NA BASE 2m OTIMIZADOS APLICADOS A FILTROS DIGITAS............................................ 68 6.1 Filtros FIR com Coeficientes Fixos ......................................................................... 69 6.1.1 Aplicação dos Multiplicadores Array Otimizados em Arquiteturas Totalmente Seqüenciais .............................................................................................................. 70 6.1.2 Aplicação dos Multiplicadores Array Otimizados em Arquiteturas Semi - Paralelas 71 6.2 Arquitetura de Filtro FIR com Coeficientes Adaptativos .................................... 75 6.2.1 Algoritmo Adaptativo LMS (Least Mean Square) .................................................. 76 6.2.2 Aplicação dos Multiplicadores Array Otimizados em Arquitetura Dedicada para o Algoritmo LMS ....................................................................................................... 77 6.3 Sumário ..................................................................................................................... 79 6 7 CONCLUSÕES............................................................................................................ 80 7.1 Trabalhos futuros ..................................................................................................... 81 REFERÊNCIAS ............................................................................................................... 83 ANEXOS ........................................................................................................................... 88 5 LISTA DE FIGURAS Figura 1.1 Metodologia para estimativa de área, atraso e potência dos circuitos multiplicadores array na base 2m.................................................................... 13 Figura 1.2 Metodologia usada o desenvolvimento da ferramenta RAMAGT................. 15 Figura 1.3 Tela principal da ferramenta RAMAGT ........................................................ 16 Figura 1.4 Exemplo de descrições VHDL e BLIF geradas pela ferramenta RAMAGT . 16 Figura 2.1 Esquema de contribuição de glitches para dissipação de potência................. 22 Figura 3.1 Exemplo de multiplicação de 4 bits base-4(m=2) em complemento de 2 ...... 27 m Figura 3.2 Estrutura geral para multiplicação na base 2 em complemento de 2 ............ 27 Figura 3.3 Exemplo de multiplicador array base 4 de 8 bits em complemento de 2 ...... 28 Figura 3.4 Exemplo de multiplicação de 8 bits usando o algoritmo Booth Modificado . 29 Figura 3.5 Exemplo de arquitetura Booth Modificado de 8 bits...................................... 30 Figura 3.6 Exemplo de um somador Carry Save ............................................................. 31 Figura 3.7 Exemplo de soma de números de 4 bits usando a estrutura Carry Save ........ 31 Figura 3.8 Estrutura de um circuito somador compressor 4:2 ......................................... 32 Figura 3.9 Um compressor 4:2 baseado em multiplexador ............................................. 34 Figura 4.1 Exemplo de estrutura do Operando I.............................................................. 36 Figura 4.2 Representação do bloco Tipo I de multiplicação m=2 ................................... 36 Figura 4.3 Bloco de multiplicação (m=4) Tipo I composto por blocos m=2 e RCA...... 39 Figura 4.4 Bloco de multiplicação (m=4) Tipo I composto por blocos m=2 e CSA ...... 40 Figura 4.5 Bloco de multiplicação (m=4) Tipo I composto por blocos de mult. 4:2....... 41 Figura 4.6 Exemplo completo de multiplicação de 8 bits com blocos m=4 otimizados Tipo I, Tipo II e Tipo III................................................................................. 44 Figura 4.7 Exemplo de uma multiplicação de 16 bits com blocos de multiplicação m=8 otimizados....................................................................................................... 46 Figura 4.8 Bloco de multiplicação otimizado m=3 utilizando blocos dedicados 1:2 ...... 47 Figura 4.9 Gráficos com os resultados de área, atraso e consumo de potência dos multiplicadores para diferentes valores de m ................................................. 51 Figura 4.10 Gráficos das simulações dos multiplicador para área, atraso e potência........ 55 Figura 5.1 Estrutura interna de um compressor 8:2 ......................................................... 59 Figura 5.2 Estrutura interna de um compressor 16:2 ....................................................... 60 Figura 5.3 Exemplo de multiplicação de 16 bits m=4 utilizando compressores 4:2........ 63 Figura 5.4 Estrutura de circuito multiplicador de 16 bits m=4 utilizando compressores 4:2 ........................................................................................................................ 64 Figura 6.1 Exemplo de filtro FIR de 8 taps ..................................................................... 71 Figura 6.2 Parte operativa das implementações seqüenciais do filtro FIR ...................... 72 Figura 6.3 Parte Operativa das implementações semi-paralelas do filtro FIR................. 74 Figura 6.4 Elementos de um filtro FIR com coeficientes adaptativos ............................. 76 Figura 6.5 Arquitetura do hardware dedicado para o algoritmo adaptativo LMS .......... 78 6 LISTA DE TABELAS Tabela 3.1 Tabela 4.1 Tabela 4.2 Tabela verdade de um compressor 4:2........................................................... 33 Resultados para multiplicadores m=2 ............................................................ 38 Resultados de Área, atraso e potência para multiplicadores array de 16 bits na base 16....................................................................................................... 42 Tabela 4.3 Produto atraso-potência (AP)......................................................................... 43 Tabela 4.4 Possibilidades de otimizações dos blocos de multiplicação .......................... 46 Tabela 4.5 Resultados para multiplicadores m=3 ............................................................ 48 Tabela 4.6 Resultados para multiplicadores m=4 ............................................................ 48 Tabela 4.7 Resultados para multiplicadores m=5 ............................................................ 48 Tabela 4.8 Resultados para multiplicadores m=6 ............................................................ 49 Tabela 4.9 Resultados das simulações para m=8 Otimizado ........................................... 51 Tabela 4.10 Resultados das simulações dos Multiplicadores na base 2m e Booth Modificado..................................................................................................... 53 Tabela 5.1 Tabela verdade de um compressor 8:2........................................................... 59 Tabela 5.2 Tabela verdade de um compressor 16:2......................................................... 61 Tabela 5.3 Número de linhas de somas de produtos parciais em multiplicadores nas bases 16 e 256 ................................................................................................ 65 Tabela 5.4 Resultados para multiplicadores m=4 Otimizado 1 com o uso de compressores.................................................................................................. 66 Tabela 5.5 Resultados para multiplicadores m=8 Otimizado com compressores ........... 66 Tabela 6.1 Resultados de área, atraso e energia normalizada por amostra para o filtro seqüencial....................................................................................................... 72 Tabela 6.2 Resultados de área, atraso e energia normalizada por amostra para o filtro semi-paralelo.................................................................................................. 75 Tabela 6.3 Valores de área, atraso e consumo de potência da arquitetura para o algoritmo LMS .............................................................................................. 79 7 LISTA DE ABREVIATURAS E SIGLAS ASICs BLIF CMOS CSA CSL DSP FIR FPGA LMS MAC NMOS PDP PLA PMOS RCA SIS SLS VHDL VHSIC VLSI Application Specific Integrated Circuit Berkeley Logic Interchange Format Complementary Metal Oxide Semiconductor Carry Save Adder C Scripting Language Digital Signal Processing Finite Impulse Response Filter Field Programmable Gate Array Least Mean Squares Algorithms Multiplier/Accumulator Negative Channel Metal Oxide Semiconductor Power Delay Product Programmable Logic Arrays Positive Channel Metal Oxide Semiconductor Ripple Carry Adder Sequential Interactive Synthesis Switch Level Simulator VHSIC Hardware Description Language Very High Speed Integrated Circuits Very Large Scale Integration 8 RESUMO O objetivo principal deste trabalho é a implementação e análise de novas arquiteturas de circuitos multiplicadores array digitais recentemente apresentados no meio cientifico com diferentes técnicas de redução de potência, tais como a utilização de eficientes estruturas de circuitos somadores, bem como a otimização dos blocos dedicados de multiplicação, que permitem a operação de multiplicação na base 2m. A proposta de novas arquiteturas consiste em operações de multiplicação em complemento de 2 e que mantenham a mesma regularidade de um multiplicador array convencional. As arquiteturas podem operar com números na base 2m, onde m representa o grupo de bits de multiplicação. Em um multiplicador array convencional, onde a operação de multiplicação é realizada bit a bit, o valor de m é igual a 1 (operação na base 2). Neste trabalho, são apresentadas novas arquiteturas de multiplicadores que operam em diferentes bases, o que permite a redução do número de linhas de produtos parciais, com impactos diretos no aumento de desempenho e redução do consumo de potência. A implementação dos diferentes circuitos multiplicadores foi realizada no nível textual (nível de portas lógicas), onde circuitos multiplicadores de 16, 32 e 64 bits são comparados em termos de parâmetros de área, atraso e consumo de potência utilizando os ambientes SIS (para valores de área e atraso) e SLS (para estimação de valores de consumo de potência). Como estudos de caso, as diferentes arquiteturas de circuitos multiplicadores propostas neste trabalho foram aplicadas em filtros digitais de resposta finita ao impulso (FIR) e em arquitetura dedicada de algoritmo de filtragem adaptativa LMS (Least Mean Square). Palavras-Chave: multiplicadores array, Filtros digitais, baixa potência 9 Title: “Low-Power Array Multipliers Circuits for Adaptive Filters” Abstract The main goal of this work is the implementation and analyzes of new array multiplier architectures. These new architectures were recently presented in the scientific community by including different power reduction techniques, such as the use of efficient adder circuits and the optimization of the dedicated multiplication structures that allow the multiplication operation in the radix 2m. The new multipliers operate in 2´s complement and keep the same regularity presented by a conventional array multiplier. The architectures operate in the radix 2m, where m represents the group of bits multiplied at a time. In a conventional array multiplier, where the multiplication is performed bit by bit, m assumes value equal 1 (radix 2 operation). In this work, the new multiplier architectures operate in different radices, leading to a reduction in the number of partial product lines, enabling higher performance and power reduction in the multipliers. The 16, 32 and 64 bit width multipliers were described in textual language (gate level), and the comparisons between the multipliers are preformed in terms of area, delay and power consumption by using SIS environment (for area and delay results) and SLS tool (for power consumption estimation). In this work we have applied the proposed optimized multipliers in digital filtering algorithms such as finite impulse response (FIR) and dedicated architecture for the LMS (Least Mean Square) adaptive filtering. Keywords: array multipliers, digital filters, low power 10 1 INTRODUÇÃO A rápida e crescente inovação em dispositivos VLSI (Very Large Scale Integration) impulsiona a utilização das tecnologias de fabricação aos seus limites, dentre as quais a verificação da dissipação de potência é um dos problemas de maior preocupação. Equipamentos portáteis, como notebooks, telefones celulares, handhelds, aparelhos biomédicos portáteis, entre outros, necessitam de um alto desempenho e baixo consumo de potência. Neste contexto, aspectos de baixa dissipação de potência, exigem a pesquisa de novas arquiteturas confiáveis que possam ser testadas e fabricadas e que levem em consideração as necessidades de sistemas eletrônicos portáteis e de funções diversas (COSTA, 2002). Na verdade, tem-se atualmente a ênfase crescente no projeto de circuitos integrados de baixa potência e sistemas de alto desempenho e que levem em consideração aspectos como densidade de integração, velocidade de operação e freqüência de relógio. Este trabalho consiste na implementação de novas arquiteturas de circuitos multiplicadores que levam em consideração técnicas para o aumento de desempenho e redução do consumo de potência, tais como o uso de circuitos somadores eficientes (compressores) (WEINBERGER, 1981) e a otimização dos blocos dedicados de multiplicação, que permitem a operação de multiplicação na base 2m. As novas arquiteturas de circuitos multiplicadores foram implementadas em linguagem textual no formato BLIF (Berkeley Logic Interchange Format) e apresentam como principal características a regularidade e redução de caminhos críticos e transições espúrias que são propagadas ao longo do array, tornando possível a redução do consumo de potência em suas arquiteturas. As novas arquiteturas de circuitos multiplicadores propostas são aplicadas em estruturas dedicadas de filtros digitais, que incluem a filtragem de resposta finita ao impulso (FIR – Finite Impulse Response) e algoritmo de filtragem adaptativa LMS (Least Mean Square) (HAYKIN, 2002). Estes filtros foram escolhidos como estudos de caso, por envolverem um bom número de operadores aritméticos em suas estruturas. Neste caso, as diferentes arquiteturas de circuitos multiplicadores são aplicadas a estes filtros, onde são reportados os resultados de área, atraso e consumo de potência destes circuitos. Os principais resultados apresentados mostram a eficiência dos filtros FIR e adaptativo, quando do uso dos multiplicadores otimizados propostos neste trabalho. 11 1.1 Motivação Na área de Processamento Digital de Sinais (Digital Signal Processing - DSP) os circuitos que implementam os diversos algoritmos, incluem um elevado número de operadores aritméticos. Dentre estes operadores, os circuitos multiplicadores são responsáveis por uma parte significativa do consumo de potência global no processamento dos sinais digitais. Desta forma, a proposta de novas arquiteturas de circuitos multiplicadores de alto desempenho e baixo consumo contribui para o projeto de circuitos mais eficientes nestas áreas de aplicação. Diante do quadro exposto, surge a motivação em analisar em diferentes níveis de abstração os circuitos multiplicadores apresentados em (COSTA, 2002) com diferentes técnicas de redução do consumo de potência, como a utilização de eficientes estruturas de circuitos somadores e a otimização dos blocos dedicados de multiplicação que permitem a operação de multiplicação na base 2m. Os multiplicadores otimizados propostos são aplicados em filtros digitais de resposta finita ao impulso e algoritmo de filtragem adaptativa LMS. 1.2 Objetivos O principal objetivo deste trabalho é implementar e analisar o desempenho de diferentes arquiteturas de multiplicadores digitais de 16, 32 e 64 bits presentes na literatura. São investigados circuitos multiplicadores paralelos, sendo estes chamados array Binário na base 2m (COSTA, 2002). O uso de somadores eficientes do tipo compressores 4:2, 8:2 e 16:2 nas linhas de produtos parciais e a otimização dos blocos dedicados de multiplicação m:m e 1:m também são alvo deste trabalho. A análise comparativa dos resultados foi efetuada considerando as métricas de área, atraso e consumo de potência para multiplicadores com diferentes grupos de bits (desde m = 2 – multiplicação na base 4 até m = 8 – multiplicação na base 256). A otimização destes blocos permite explorar a principal característica do multiplicador array que é o aspecto da regularidade. Assim, pode-se ter um circuito multiplicador regular com um reduzido 12 número de linhas de produtos parciais. Esta redução tem um impacto direto no aumento de desempenho e redução do consumo de potência dos multiplicadores. Uma ferramenta de geração automática dos circuitos multiplicadores, desenvolvida no âmbito deste trabalho, chamada RAMAGT (JACCOTTET, 2008), permite a análise de diferentes arquiteturas de multiplicadores com diferentes larguras de operandos e diferentes bases de operação (desde 4 até 256). O objetivo desta ferramenta é a geração de uma biblioteca de circuitos multiplicadores array com aspectos de aumento de desempenho e redução do consumo de potência. Deve-se destacar que todas as técnicas propostas neste trabalho estão agregadas à ferramenta de geração automática. Como objetivo final deste trabalho, tem-se a aplicação dos multiplicadores otimizados em arquiteturas dedicadas de filtros FIR e algoritmo de filtragem adaptativa LMS. 1.3 Metodologia Para cada uma das fontes de consumo de potência de um circuito integrado, existem várias técnicas visando a sua estimativa de modo eficiente considerando os diversos fatores que definem os seus modelos. No presente trabalho, o enfoque é o consumo de potência dinâmica, pois este representa a maior parcela de consumo de potência de um circuito integrado (WESTE, 1994). A seguir são apresentados os principais ambientes de descrição, análise e geração dos multiplicadores array na base 2m. 1.3.1 Ambientes de descrição e análise dos multiplicadores O procedimento completo de um projeto que envolve a análise de potência de um circuito consiste inicialmente em estabelecer um nível de descrição da arquitetura do circuito a ser analisada. Esta descrição fornece para a ferramenta de análise de potência uma lista de todos os diferentes módulos que têm de ser analisados bem como suas complexidades. O diagrama da metodologia utilizada neste trabalho é mostrado na Figura 1.1. A descrição do fluxo completo da metodologia utilizada neste trabalho, é apresentada nos Anexos I e II. Inicialmente a descrição dos circuitos é realizada no formato BLIF 13 (Berkeley Logic Interchange Format) (BERKELEY, 2007), cujo objetivo é descrever uma hierarquia do circuito no nível lógico na forma textual. Este formato é mapeado para uma biblioteca que contém a funcionalidade das portas lógicas, além das informações de capacitâncias e atrasos característicos. (a) (b) Figura 1.1 – Metodologia para estimativa de área, atraso e potência dos circuitos multiplicadores array na base 2m Utiliza-se o ambiente SIS (SENTOVICH, 1992) para efeitos de síntese e simulação dos circuitos, além de cálculos de área e atraso. Entretanto para estimativa do consumo de potência dos circuitos, utiliza-se a ferramenta no nível de transistores SLS (GENDEREN, 1989). Os valores de área são apresentados em termos do número de literais, onde 1 literal corresponde aproximadamente a 2 transistores. Os valores de atraso são obtidos a partir do modelo de atraso geral da biblioteca mcnc. Os valores do consumo de potência dos circuitos são obtidos a partir da ferramenta SLS após a conversão do circuito do formato BLIF para o formato no nível de transistores desta ferramenta. Os resultados de potência são obtidos após a aplicação de 10000 vetores randômicos de excitação às entradas primárias do circuito, de acordo com os resultados apresentados em (COSTA, 2002). Para as simulações dos multiplicadores foi utilizada a tecnologia fishbone de 1.2 micrometros 14 (Sea of gates, CMOS, Semi-Custom, VDD=5V) (TUDELF, 2008). A ferramenta SLS simula o comportamento do circuito ao longo do tempo. De acordo com os parâmetros do transistor e suas interconexões, o atraso é calculado para as diferentes transições no circuito. Neste cálculo, são utilizados os tamanhos dos transistores, as resistências de interconexão e valores de capacitâncias. Para encontrar os tempos de subida e descida assim como valores estáveis dos sinais. Os tempos de subida e descida são computados pela interpretação de uma rede RC para cada nó do circuito. Desta forma, a dissipação média do circuito é calculada considerando o atraso genérico de cada porta lógica do circuito. A partir da descrição no formato BLIF dos circuitos, pode-se proceder à conversão desta descrição para o formato VHDL (VHSIC – Very High Speed Integrated Circuits – Hardware Description Language) (RUSHTON, 1998) utilizando um programa de conversão especifico (blif2vhdl), como mostrado na Figura 1.1. Este fluxo possibilita a prototipação dos circuitos multiplicadores voltada para FPGA (Field Programmable Gate Array). Neste formato, realiza-se a síntese e a simulação das descrições dos multiplicadores por intermédio do programa Quartus II (ALTERA, 2006) que utiliza componentes FPGA da fabricante Altera (ALTERA, 2002). Os resultados de área, atraso e potência são obtidos no próprio ambiente para o componente FPGA EP1S10B67C6 da família Stratix. Vale ressaltar que este fluxo é utilizado neste trabalho, devido ao fato do hardware dedicado para o algoritmo de filtragem adaptativa LMS estar descrito em linguagem VHDL. Neste caso, os circuitos multiplicadores testados neste circuito são também descritos em VHDL. 1.3.2 Ferramenta automática de geração das descrições dos circuitos multiplicadores (RAMAGT) Com o aumento da complexidade dos sistemas digitais, torna-se cada vez mais difícil a implementação de descrições textuais dos circuitos de forma manual. Em particular, os circuitos multiplicadores desenvolvidos neste trabalho, apresentam uma grande complexidade, principalmente para os casos onde se utiliza uma maior largura dos operandos. Para contornar este problema, propõe-se neste trabalho uma ferramenta que possa gerar automaticamente as descrições textuais dos circuitos multiplicadores array na base 2m (JACCOTTET, 2008). A idéia desta ferramenta é gerar, de forma automática, as 15 descrições de multiplicadores na base 2m para qualquer largura de operandos (n bits) e para m grupos de bits entre (m=2 – base 4 e m=8 – base 256). A metodologia utilizada para o desenvolvimento da ferramenta RAMAGT é mostrada no fluxo da Figura 1.2. Figura 1.2 - Metodologia usada no desenvolvimento da ferramenta RAMAGT Como pode ser verificado através da Figura 1.2, a ferramenta é implementada usando duas linguagens de programação, uma delas é a C++ que gera arquivos executáveis e a outra é chamada CSL (C Scripting Language) (KOCH, 2002) que é uma linguagem interpretada que não necessita de compilação (OUSTERHOUT, 1998). A linguagem C++ é utilizada para realizar a interface entre o usuário e o programa para estabelecer os parâmetros da descrição a ser gerada automaticamente. As descrições dos blocos básicos de multiplicação e soma dos circuitos estão dispostos em uma biblioteca onde, através da linguagem CSL, ocorre a seleção e ligação destes blocos, conforme os parâmetros inseridos pelo usuário. Outra característica desta ferramenta é a propriedade de poder gerar várias descrições ao mesmo tempo, ou seja, pode-se abrir várias janelas da ferramenta simultaneamente. Na Figura 1.3 é mostrada a tela de seleção e inserção dos parâmetros da descrição do multiplicador a ser gerado. Primeiramente é selecionado o valor do grupo de m (2 a 8). O próximo passo é inserir a largura dos operandos do multiplicador e finalmente clicar no botão “GERAR”. Os arquivos com as descrições geradas automaticamente são gravadas 16 em uma pasta especifica, tendo-se a possibilidade da inserção dos comentários da descrição gerada. Isto pode ser realizado através da seleção do botão “NOTAS”. Figura 1.3 - Tela principal da ferramenta RAMGAT As descrições dos circuitos foram validadas na ferramenta SIS. Através da ferramenta RAMAGT foi possível gerar automaticamente as descrições dos circuitos multiplicadores na base 2m para 32 e 64 bits de uma forma rápida e confiável, pois a geração de uma descrição leva em torno de um minuto. O aspecto da confiabilidade é comprovado pelos testes preliminares efetuados nas descrições das bibliotecas. Exemplos de descrições VHDL e BLIF, geradas automaticamente pela ferramenta RAMAGT, de um multiplicador array de 4 bits é apresentado na Figura 1.4. Para simplificar as figuras não são mostrados os sub-circuitos. Figura 1.4 - Exemplo de descrições VHDL e BLIF geradas pela ferramenta RAMAGT 17 1.4 Principais contribuições do trabalho Os principais aspectos deste trabalho estão baseados nas otimizações realizadas no multiplicador array binário na base 2m apresentado em (COSTA, 2002). Para tal, as seguintes contribuições são apresentadas: • desenvolvimento de uma ferramenta de geração automática parametrizável de circuitos multiplicadores array Binário na base 2m nos formatos BLIF e VHDL; • implementação de circuitos multiplicadores array Binário na base 2m de 16, 32 e 64 bits com blocos dedicados de multiplicação otimizados. Estes blocos dedicados estão presentes nos operandos do multiplicador. Foram realizadas otimizações para blocos de multiplicação de m=2 até m=8.; • implementação de circuitos multiplicadores array Binário na base 2m de 16, 32 e 64 bits com circuitos somadores compressores 4:2, 8:2 e 16:2. Estes compressores são utilizados para a redução do número de linhas de somas de produtos parciais dos multiplicadores; • aplicação dos circuitos multiplicadores otimizados em arquiteturas dedicadas de filtros FIR de coeficientes fixos e coeficientes adaptativos. 1.5 Sumário Neste capitulo foram abordados os principais pontos motivacionais do trabalho. Os objetivos e principais contribuições também foram apresentadas. Também foi apresentado o fluxo da metodologia do trabalho, incluindo aspectos da ferramenta de geração automática de multiplicadores array na base 2m de baixo consumo de potência. No próximo capítulo serão abordadas as principais fontes de consumo de potência em circuitos CMOS. 18 2 POTÊNCIA EM CIRCUITOS CMOS Neste capítulo são abordados os aspectos de consumo de potência e de propagação em circuitos CMOS (Complementary Metal Oxide Semiconductor). São apresentados alguns conceitos que envolvem as principais fontes de consumo de potência em circuitos CMOS (OLIVEIRA, 2005). O custo de produtos eletrônicos para o consumidor associados com o encapsulamento e resfriamento dos chips impõem limitações severas à dissipação média de potência. Afinal de contas, aquecimento e temperatura estão diretamente relacionados com a potência média (NAJN, 1994). De fato, um outro fator de interesse do projetista de circuitos integrados além da dissipação de potência são problemas de temperatura dos dispositivos. Com a redução do tamanho dos dispositivos, a densidade dos transistores tende a aumentar, gerando o aumento do número de componentes dissipando potência por unidade de área. Além disso, a redução do tamanho provoca a redução do atraso de propagação, permitindo a operação dos circuitos em freqüências mais altas, o que por sua vez leva a um aumento do consumo de potência. Neste capítulo são inicialmente apresentados alguns conceitos que envolvem as principais fontes de consumo de potência em circuitos CMOS. 2.1 Fontes de Consumo de Potência em Circuitos CMOS Existem três componentes que estabelecem a quantidade de potência dissipada em circuitos CMOS (WEST, 1994): • dissipação estática de potência devido à corrente de fuga ou outras correntes que fluem continuamente pela fonte de potência do circuito; • o consumo de potência de curto-circuito, que ocorre devido à corrente direta da fonte de alimentação para o terra durante o processo de comutação de uma porta lógica; • dissipação dinâmica de potência devido à corrente de comutação durante a carga e descarga das capacitâncias de saída. 19 Considerando as componentes acima, pode-se então especificar, de acordo com a Equação 2.1, o consumo de potência total em circuitos CMOS: PTOTAL = PSC + Pstatic + Pdin (2.1) onde PSC é a potência de curto-circuito, Pstatic representa a parcela devida ao consumo estático e Pdin é a potência dinâmica. A principal razão para a popularidade da lógica CMOS é que as portas tradicionais não possuem consumo estático quando suas saídas não estão comutando entre os níveis lógicos. Entretanto, para qualquer saída de uma porta CMOS que tenha o seu valor lógico alterado, haverá uma potência dissipada na porta dos transistores (MARTIN, 2000). A razão inicial para esta dissipação de potência é o movimento de cargas elétricas para carregar e descarregar capacitâncias de carga externas e capacitâncias parasitas internas. Em adição a isto, para sinais de entrada com tempos de subida e descida finitos, é possível se ter temporariamente um caminho direto de corrente que flui desde a fonte de tensão até o terra. A seguir são apresentados detalhes das principais fontes de consumo de potência em circuitos CMOS. 2.1.1 Consumo de Potência Estática Correntes de fuga ou outras correntes que fluem continuamente pela fonte de potência causam a dissipação de potência estática. Idealmente, o consumo de potência estática de um circuito CMOS é nulo. Entretanto há sempre uma corrente de fuga presente. Esta contribuição no consumo total de potência torna-se um fator de preocupação à medida que a tecnologia de processo de semicondutores atinge valores abaixo de 0.1µm (KIM, 2003). Estudos demonstram que para o caso de um circuito inversor, utilizando tecnologia de 70nm, submetido a simulações operando a 125ºC, as correntes de fuga podem chegar a contribuir em 49% no consumo de potência total do circuito (KIM, 2002). Correntes de fuga podem ocorrer quando um transistor está no estado desligado e outro transistor ativo carrega (up/down) o dreno em relação ao potencial de substrato. A potência estática total é o produto da corrente de fuga do dispositivo e da fonte de tensão, dada pela Equação 2.2. 20 Pstatic = I leakage .VDD I leakage VTV = I S e T − 1 (2.2) (2.3) Onde VDD é a tensão de alimentação do circuito e Ileakage é a corrente de fuga que é dada pela equação característica do diodo de polarização reversa conforme é visto na Equação 2.3, onde IS é a corrente de saturação reversa, V é a tensão do diodo e VT=KT/q é a tensão termal. 2.1.2 Consumo de Potência de Curto-Circuito O consumo de potência de curto-circuito ocorre quando flui uma corrente diretamente da fonte de alimentação para o terra. Isto ocorre quando um circuito CMOS estático é chaveado por um sinal de entrada com tempos de subida e descida não-zero, com os transistores tipos PMOS (Positive Channel Metal Oxide Semiconductor) e NMOS (Negative Channel Metal Oxide Semiconductor) conduzindo simultaneamente por um curto intervalo de tempo. Este consumo de potência, devido à corrente de curto-circuito, contribui com aproximadamente 10% do valor de consumo de potência total (POPPEN, 2000), mas pode tornar-se substancial, particularmente se a entrada mudar de maneira lenta, ou seja, se os tempos de subida ou descida dos sinais de entrada dos circuitos são altos. Na realidade, não é correto assumir valores de tempo de subida e descida como sendo nulos para as formas de onda de entrada (RABAEY, 1996). Como resultado disto, é criado um caminho para a corrente diretamente da fonte de alimentação para o terra em um curto período de tempo durante a comutação, onde os transistores PMOS e NMOS estão conduzindo simultaneamente. 2.1.3 Consumo de Potência Dinâmica A dissipação dinâmica ocorre durante o processo de comutação dos transistores PMOS e NMOS devido à corrente de curto-circuito e pelo processo de carga e descarga da capacitância de saída. 21 A potência dinâmica ainda é a fonte dominante de consumo de potência, embora a diferença vem se tornando menor em novas tecnologias que envolvem maiores escalas de integração. (WILLIAMS, 1996). A componente de comutação dinâmica de dissipação de potência (P ) em uma transição na saída de uma porta carregada por um capacitor C é din L dada de acordo com a Equação 2.4 (CHANDRAKASAN, 1995), onde A é a atividade do nó de saída, medida em eventos/segundo para uma carga/descarga completa. Pdin = (2.4) 1 1 2 2 C L AV DD = afC LVDD 2 2 No caso de projetos síncronos, a atividade A não é simplesmente f (freqüência), mas em geral uma probabilidade de atividade normalizada a (menor do que 1 para modelo de atraso zero) é computada como função da estatística de entrada e modelos lógicos, pois nem todos os nós mudam em um determinado ciclo de relógio. Se, em um circuito, uma simples transição é realizada a cada ciclo de relógio na taxa f , então a potência é dada clk pela Equação 2.5. Pdin = 1 2 C LVDD f clk 2 (2.5) Entretanto, há casos em que a transição do sinal ocorre em diferentes taxas de freqüência, tendo-se que considerar o valor do número de transições por ciclo de relógio ou o fator de atividade a de transição dos nós, como mostrado na Equação 2.5. 2.1.4 Consumo de Potência pela Atividade de Glitching A dissipação de potência dinâmica também é influenciada por sinais espúrios (glitching), característico de sistemas com lógicas complementares em cascata (GOWAN, 1998). A principal razão para a ocorrência do efeito de glitching recai sobre o fato de que as portas lógicas possuem um atraso de propagação do sinal diferente de zero (RABAEY, 1996). Na realidade, o atraso de propagação finito de um bloco lógico para o próximo, pode causar transições espúrias, chamadas de glitches ou hazards. Estas transições espúrias dificultam a estimação da energia de circuitos síncronos. A principal razão para isto recai no fato de que os glitches são muito dependentes do atraso do circuito e, desta maneira, qualquer tentativa de se estimar a energia consumida precisa incluir um modelo preciso de 22 atraso (PENZES, 2002). Desta maneira, um determinando nó de um circuito pode exibir múltiplas transições em um único pulso de relógio antes de estabelecer de fato, o valor lógico correto. Esta atividade de chaveamento extra contribui para a dissipação total de energia com cerca de 20% do valor global, mas pode chegar até a 70% da energia consumida no circuito no caso de somadores combinacionais (SHEN, 1992). Um esquema da geração e propagação de sinais espúrios é mostrado na Figura 2.1. Pode-se notar a geração de glitches na saída de uma porta e a propagação através de uma porta. (FAVALLI, 1995) Figura 2.1 – Esquema de contribuição de glitches para dissipação de potência Observa-se que o instante de chaveamento do sinal de entrada de uma porta pode causar níveis lógicos falsos em sua saída, contribuindo para a geração de glitches. A propagação destes sinais é uma função da profundidade lógica do circuito contribuindo fortemente para o aumento do consumo de potência. 2.2 Sumário Este capítulo apresentou as principais fontes de consumo de potência em circuitos digitais CMOS. Foram apresentadas as principais características das fontes de potência estática, de curto-circuito e dinâmica, bem como aspectos de consumo de potência devido à atividade de glitching Este estudo é importante, pois o principal foco deste trabalho é a redução do consumo de potência dinâmica em circuitos multiplicadores array, pela redução da atividade de chaveamento nos blocos dedicados de multiplicação e redução da atividade de glitching ao longo da estrutura array do multiplicador. A seguir são apresentados os principais operadores aritméticos somadores e multiplicadores explorados neste trabalho. 23 3 OPERADORES ARITMÉTICOS EFICIENTES Entre os operadores aritméticos, os circuitos multiplicadores são os mais comuns em muitas operações envolvendo multiplicação e acumulação (MAC), como os algoritmos da área de Processamento Digital de Sinais (DSP), por exemplo. Nos circuitos DSP, os multiplicadores são os responsáveis pela maior parte do consumo de potência (COSTA, 2002). Diante disto, apresenta-se o interesse na aplicação de técnicas que possam reduzir o consumo de potência dos circuitos multiplicadores. Novas arquiteturas de circuitos multiplicadores de baixa potência do tipo array, que operam em complemento de 2 na base m 2 , foram apresentadas em (COSTA, 2002). A principal característica destes novos multiplicadores é a redução da atividade de chaveamento e operação em diferentes codificações de dados. Outro aspecto a ser destacado é a regularidade dos circuitos, que facilita as suas implementações em layout. Neste trabalho o principal objetivo é a otimização dos circuitos multiplicadores apresentados em (COSTA, 2002). Para tal, são utilizadas técnicas que vão desde a utilização de circuitos somadores eficientes, tais como Carry Save (CSA) e compressores, até a otimização dos blocos dedicados de multiplicação, que permitem a operação de multiplicação na base 2m. Estes novos circuitos multiplicadores são comparados com o multiplicador estado da arte em termos de redução do consumo de potência, ou seja, multiplicador Booth Modificado (KHATER, 1996). A seguir são apresentadas as principais características do multiplicador array na base 2m. Também são mostrados alguns aspectos do multiplicador Booth Modificado (alvo de comparação dos multiplicadores array propostos neste trabalho), bem como as principais características dos somadores eficientes usados para a otimização dos circuitos multiplicadores. 3.1 Estado da Arte de Circuitos Multiplicadores Os circuitos multiplicadores para aplicações na área de DSP necessitam de alto desempenho, baixo consumo de potência e execução de operações de multiplicação com sinal. Neste contexto, os multiplicadores mais rápidos são os paralelos. Entre estes, os 24 multiplicadores Wallace (WALLACE, 1964) estão entre os mais rápidos. Entretanto, estes multiplicadores não apresentam boa regularidade, o que compromete os seus consumos de potência. Por outro lado, um multiplicador Booth (BOOTH, 1951) apresenta um bom aspecto de regularidade, além da redução das linhas de produtos parciais, o que representa o estado da arte em operações de multiplicação com aspecto de baixo consumo de potência. Devido à sua complexidade e grande utilização nos mais diversos algoritmos, uma grande quantidade de trabalhos de pesquisa têm sido desenvolvida, visando o projeto de eficientes e regulares arquiteturas de circuitos multiplicadores com operações em complemento de 2. Esquemas de multiplicação tais como bi-section (LU, 2004), BaughWooley (BAUGH, 1973) e Hwang (HWANG, 1979) propõem a implementação de arquiteturas em complemento de 2, utilizando módulos repetitivos com padrões de interconexão uniformes. Entretanto, neste tipo de arquitetura não é permitida uma implementação eficiente, devido à forma irregular utilizada do tipo árvore-array. O mesmo aspecto da falta de regularidade na estrutura de multiplicação é observado em (PEKMESTZI, 1999), onde é apresentado um esquema de multiplicador baseado em multiplexador. Em (WANG, 2001) é observado um avanço desta técnica, onde a arquitetura exibe um layout mais regular do que o apresentado em (PEKMESTZI, 1999). Apesar da arquitetura apresentar reduções em área da ordem de 40%, só são observadas reduções em atraso e consumo de potência após a utilização de circuitos somadores mais eficientes. As técnicas descritas acima têm sido aplicadas a multiplicadores array convencionais, cuja operação é realizada bit a bit e algumas vezes a regularidade da arquitetura não é preservada. Um novo tipo de array para um multiplicador paralelo baseado em diferentes agrupamentos de bits de produtos foi proposto em (NAKAMURA, 1986). Neste trabalho, o esquema proposto necessita de aproximadamente metade das células quando comparado aos multiplicadores array convencionais. Apesar do bom desempenho apresentado, a complexidade do circuito aumenta consideravelmente devido aos circuitos contadores utilizados na unidade de adição. Para um multiplicador na base 4, por exemplo, faz-se necessária a utilização de 16 vezes mais hardware em relação a um multiplicador array binário convencional. 25 Para aumentar o desempenho dos multiplicadores, considerando aspectos de regularidade e redução do consumo de potência, têm sido propostos projetos de circuitos baseados na técnica de recodificação de Booth (SAM, 1990;MILAR, 1992; GALLACHER, 1994; CHERKAUER, 1996; SEIDEL, 2001). Nestes trabalhos são propostos multiplicadores Booth de alto desempenho baseados em operações em maiores bases de operação. Entretanto, estes circuitos exibem pouca regularidade e não são indicadas reduções no consumo de potência. Trabalhos de pesquisa direcionados a redução do consumo de potência a partir do multiplicador Booth, operando em bases maiores, são apresentados em (YU 2000a; GOLDOVISKY, 2000). Em (YU 2000a), propõe-se um multiplicador Booth tipo CarrySave Array para baixa potência. Neste trabalho, mostra-se que é possível obter uma redução de 18% em potência. Entretanto, não é apresentada nenhuma melhora em termos de desempenho. Em (GOLDOVISKY, 2000), apresenta-se um multiplicador que utiliza codificadores Booth na base 4, que são otimizados para geração dos produtos parciais. São apresentados resultados com reduções de área, atraso e consumo de potência e com um esquema de codificação altamente otimizado no nível de transistores. Em (SHAH, 2000) há uma comparação entre cinco diferentes tipos de multiplicadores de 32 bits em diferentes métricas de desempenho. O multiplicador combinado Booth-Wallace modificado apresentou melhores resultados em atraso e consumo de potência entre os multiplicadores apresentados neste trabalho. De acordo com (GALLAGHER, 1994), apesar de o algoritmo Booth proporcionar uma maior simplicidade para a implementação da sua arquitetura, torna-se difícil projetar arquiteturas para operar em bases maiores do que 4, devido a complexidade em précomputar, no termo multiplicador, um crescente número de múltiplos do termo multiplicando. EM (MILLAR, 1992; SEIDEL, 2001) são propostos multiplicadores Booth de alto desempenho baseados em operação em maiores bases. Entretanto, estes circuitos exibem pouca regularidade e não são indicadas reduções no consumo de potência. Em (COSTA, 2002; COSTA, 2002a), buscam-se os mesmos objetivos do multiplicador Booth, ou seja, alcançar melhores desempenhos e menores consumos de potência a partir da redução dos termos dos produtos parciais, mantendo-se a mesma regularidade de um multiplicador array. Nestes trabalhos, mostra-se que as novas 26 arquiteturas propostas podem ser estendidas a operações de multiplicação em bases maiores utilizando menos níveis lógicos e, desta forma, apresentando menos transições espúrias e menor consumo de potência. Este trabalho de dissertação de mestrado busca tornar ainda mais eficientes as arquiteturas de multiplicadores apresentadas em (COSTA, 2002) a partir da otimização dos diferentes módulos de multiplicação dedicados que compõem a sua estrutura array, além da utilização de circuitos somadores compressores que possibilitam uma grande redução nas linhas de produtos parciais. 3.2 Operação de Multiplicação na Base 2m em Complemento de 2 Nesta Seção é apresentado um resumo das principais características do multiplicador array na base 2m proposto em (COSTA, 2002). Esta arquitetura apresenta como principais características a realização de operações em complemento de 2 e a característica de apresentar a mesma regularidade de um multiplicador array convencional. m Para operações de uma multiplicação na base 2 , os operandos são divididos em grupos de m bits. Cada um destes grupos pode ser visto como uma representação de um m m digito em um base 2 . Conseqüentemente, a arquitetura de multiplicação na base 2 segue a m operação de multiplicação básica de números representados na base 2 . A operação nesta base, em representação em complemento de 2, é mostrada na Equação 3.1. W −1 A × B = A'×B − A' bw−1bW 2W −1 − aW −1 ∑ b j 2W −1+ j m −1 (3.1) j =0 A Figura 3.1 ilustra uma operação com operadores de W = 4 bits na representação binária utilizando a base 4 (m = 2). Para o exemplo mostrado, os termos do produto parcial são obtidos pela multiplicação de cada grupo de m bits dos termos multiplicador e multiplicando. Desta forma, cada linha do produto parcial é processada para uma 27 multiplicação m x W. Nesta Figura, observam-se três tipos de multiplicação representados por Tipo I, Tipo II e Tipo III. Estes módulos são mostrados na Figura 3.2. Fig. 3.1 Exemplo de multiplicação de 4 bits base-4(m=2) em complemento de 2 m Fig. 3.2 Estrutura geral para multiplicação na base 2 em complemento de 2 Para os W – m bits menos significativos dos operandos podem ser usadas multiplicações sem sinal. Os módulos do Tipo I são os módulos sem sinal. Módulos Tipo II executam operações de um número sem sinal por um número em complemento de 2. Finalmente, o módulo Tipo III (operações de multiplicação em complemento de 2) é requerido para qualquer tipo de multiplicação. Na Figura 3.3 apresenta-se um exemplo concreto para uma multiplicação na base 4 (m = 2) e uma largura W = 8 bits. As estratégias utilizadas neste trabalho, propõem a otimização dos blocos de multiplicação Tipo I, Tipo II e Tipo III e a redução do número de linhas de produtos parciais para a redução do caminho crítico dos circuitos multiplicadores. 28 Figura 3.3 - Exemplo de multiplicador array base 4 de 8 bits em complemento de 2 3.3 Multiplicador Booth Modificado Nesta Seção apresenta-se uma revisão sobre os aspectos de multiplicação do algoritmo Booth Modificado. Este algoritmo tem um melhor desempenho do que o 29 algoritmo Booth original, pois opera na codificação na base 4, enquanto que o algoritmo Booth original opera na base 2. No Booth Modificado são gerados sinais de controle (0, +MD, +2MD, -MD e 2MD) , sendo MD é o termo multiplicando, a partir do operando do multiplicador para cada grupo de 3 bits, como mostra o exemplo da Figura 3.4 para uma operação de 8 bits. Figura 3.4 - Exemplo de multiplicação de 8 bits usando o algoritmo Booth Modificado Um circuito multiplexador produz os produtos parciais, de acordo com o sinal de controle codificado. Como se pode observar no exemplo da Figura 3.4, para reduzir o número de produtos parciais no multiplicador Booth Modificado (KHATER, 1996), realizase uma operação em grupos de 3 bits no termo multiplicador (MR). Este termo é verificado de 2 em 2 bits com sobreposição do terceiro bit. No algoritmo, considera-se um valor zero virtual a direita do bit menos significativo. No algoritmo Booth também é utilizada a técnica de extensão de sinal, para manter a regularidade da arquitetura (HWANG, 1979). A Figura 3.5 apresenta a arquitetura de um multiplicador Booth Modificado de 8 bits. 30 Figura 3.5 - Exemplo de arquitetura Booth Modificado de 8 bits Como pode ser visto na Figura 3.5, são necessários quatro circuitos operandos para o cálculo dos termos dos produtos parciais. Esses circuitos são compostos por um codificador e um multiplexador, que produzem o termo multiplicando de acordo com os 3 bits no termo multiplicador (MR). Os termos do produto parcial são deslocados pelos circuitos somadores, que são também utilizados para produzir o resultado final. Observa-se que as células Booth básicas não são simples circuitos somadores, como nas arquiteturas array na base 2m. Ao contrário, as células do multiplicador Booth têm que realizar operações de soma, subtração e deslocamento a esquerda dos bits do termo multiplicando. Esta complexidade torna difícil a implementação de arquitetura Booth em bases maiores do que 4. 3.4 Somador do tipo Carry Save Adder (CSA) O somador Carry Save (CSA) (KIM, 1998) tem a característica de efetuar a soma de três números simultaneamente. A idéia básica é que três números possam ser reduzidos para dois, como um compressor 3:2, como mostra o exemplo da Figura 3.6. 31 Figura 3.6 - Exemplo de um somador Carry Save Como pode ser observado na Figura 3.6, somente na recombinação do carry com a soma é utilizado um somador onde o carry é propagado. Apenas na última linha de soma é que existe a propagação normal do carry a partir da utilização de somadores do tipo Ripple Carry. A Figura 3.7 mostra um exemplo de adição de seis números usando o somador Carry Save (IMPERIAL, 2004) Fig. 3.7 Exemplo de soma de números de 4 bits usando a estrutura Carry Save Como é mostrado na Figura 3.7, o somador Carry Save é apresentado como um bloco com três entradas e duas saídas. Neste caso, os somadores completos (full-adder) não dependem de outras somas para efetuar sua operação. Cada somador recebe três números e 32 produz dois como saída, tal que problema de computação P+Q+ R 2∗C + S = P + Q + R . para 2 ∗C + S De fato, pode-se então converter o sem esperar carry algum. Os módulos x2 mostrados na Figura 3.7 não requerem lógica adicional, sendo somente necessário a conexão apropriada dos blocos. A soma final M + 2N representa uma soma normal de dois números. O somador Carry Save se torna bastante rápido devido ao fato de simplificar as saídas de carry ao invés de propagar para a esquerda. Neste trabalho, este somador é utilizado na otimização dos blocos dedicados de multiplicação na base 2m . 3.5 Circuitos Somadores Compressores Um dos objetivos deste trabalho é a aplicação de circuitos somadores eficientes nas linhas de produtos parciais dos multiplicadores array para a aceleração da propagação de carry ao longo das suas estruturas. Neste contexto, os circuitos compressores aparecem na literatura como estruturas eficientes para a operação de soma, pois estes circuitos possuem a capacidade de adicionar números com a mínima propagação de carry. Em (WEINBERGER, 1981) foi apresentada uma estrutura de soma de números chamada “4-2 Carry-Save module" na qual era possível a realização da soma simultânea de quatro números. Esta estrutura foi posteriormente aperfeiçoada por (OKLOBDZIJA, 1996). Esta estrutura contém uma combinação de células de somadores completos em conexão truncada na qual possibilita uma rápida compressão dos produtos parciais. Como mostra a Figura 3.8a, um compressor 4:2 possui cinco entradas e três saídas. (a) (b) Figura 3.8 – Estrutura de um circuito somador compressor 4:2 33 As cinco entradas e a saída da soma possuem o mesmo peso (j), e as saídas Cout e Carry possuem peso maior (j+1). Além disto, a saída Cout não é função de Cin. Com isto não ocorre a propagação do carry. Para esta implementação as saídas da soma, do carry intermediário e do carry (Carry) de saída (Cout) são expressas pelas Equações 3.2, 3.3 e 3.4 (PARHAMI, 1999). S = [[( A ⊕ B ) ⊕ C ] ⊕ D ] ⊕ Cin (3.2) Cout = A.B + A.C + B.C (3.3) Carry = [( A ⊕ B ) ⊕ C ].(D + Cin ) + D.Cin (3.4) O compressor 4:2 descrito pelas equações acima possui um caminho critico dado pela soma dos atrasos de quatro portas lógicas XOR conectadas em série, como mostra a Equação 3.2. A Figura 3.8b mostra que este compressor pode ser implementado utilizando dois somadores completos (full adders) em série, o que reforça o caminho crítico composto pelas 4 portas lógicas XOR. Tabela 3.1 - Tabela verdade de um compressor 4:2 A B C D 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 Cout 0 0 0 0 0 0 1 1 0 0 1 1 1 1 1 Cin=0 Cin=1 Carry Sum Cout Carry Sum 0 0 0 0 1 0 1 0 1 0 0 1 0 1 0 1 0 0 1 1 0 1 0 1 0 1 0 0 1 1 0 0 1 0 1 0 1 1 1 0 0 1 0 1 0 1 0 0 1 1 0 0 1 0 1 0 1 1 1 0 0 0 1 0 1 0 1 1 1 0 1 0 1 1 1 34 A Tabela verdade de um compressor 4:2 é mostrada na Tabela 3.1. De fato, o resultado de uma operação de soma usando compressor 4:2 será dado por: S+2(Cout + Carry). Como pode ser visto em um exemplo da Tabela 3.1, com todos os valores de entrada em nível lógico 1 (inclusive o termo Cin), o resultado será dado por 111 que é equivalente a: [1+2(1+1)]=5. Um aperfeiçoamento na estrutura de um circuito compressor 4:2, usando multiplexador é mostrado na Figura 3.9 (OKLOBDZIJA, 1996). Esta estrutura possui um caminho critico com seu valor de atraso máximo dado por três portas XOR, o que representa um caminho crítico menor do que o mostrado na estrutura da Figura 3.8. Outra vantagem deste tipo de estrutura é o fato de que o circuito multiplexador pode ser otimizado no nível de transistores utilizando portas de transmissão. (PRASAD, 2001; JIANG, 2004; RADHAKRISHNAN, 2000; GOPINEEDI, 2006) Figura 3.9 - Um compressor 4:2 baseado em multiplexador No capítulo 5 será mostrado o efeito da utilização destes circuitos compressores para a redução do número de linhas de produtos parciais dos multiplicadores array na base 2m. Além disto, será mostrada a extensão do circuito compressor 4:2 para módulos de operação 8:2 e 16:2. 35 3.6 Sumário Neste capitulo foram apresentados os principais operadores aritméticos abordados neste trabalho. Foram apresentadas revisões dos multiplicadores array na base 2m de (COSTA, 2002) e multiplicador Booth Modificado. Também foram apresentadas as principais características dos somadores Carry Save e Compressor 4:2. A extensão do circuito compressor para estruturas maiores 8:2 e 16:2, bem como a utilização destes somadores eficientes no multiplicador array na base 2m será apresentado no capítulo 5. 36 4. OTIMIZAÇÕES NOS BLOCOS DE MULTIPLICAÇÃO NA BASE 2m Como visto anteriormente, os multiplicadores array na base 2m agregam em seus operandos três tipos de multiplicadores dedicados (Tipo I, Tipo II e Tipo III), que variam de acordo com o tipo de operação realizada (multiplicações sem sinal e com sinal). A Figura 4.1 mostra um exemplo de operando (operando I) com multiplicadores do Tipo I e Tipo II. Figura 4.1 – Exemplo de estrutura do Operando I O bloco mais básico de multiplicação dos multiplicadores array na base 2m é o bloco que opera na base 4 (m=2). Este bloco pode ser facilmente otimizado, tendo-se poucas portas lógicas compondo o seu circuito. Para o bloco Tipo I, por exemplo, apenas oito portas lógicas são necessárias para a sua implementação e a sua estrutura pode ser vista na Figura 4.2. Os blocos de multiplicação Tipo II e Tipo III apresentam praticamente o mesmo nível de complexidade. Figura 4.2 - Representação do bloco Tipo I de multiplicação m=2 37 Embora os blocos que operam na base 4 sejam facilmente obtidos, esta mesma característica não se aplica para operações em bases maiores do que quatro, onde o maior número de entradas dos blocos de multiplicação dificultam otimizações manuais a partir de mapas de Karnaugh (como é realizado para blocos m=2). Em (COSTA, 2002) os blocos de multiplicação dedicados na base 16 (m=4) são gerados automaticamente pela ferramenta SIS. Um arquivo texto com todas as entradas e saídas em PLA (Programmable Logic Arrays) é sintetizado na ferramenta SIS. Este arquivo é mapeado em portas lógicas através de uma biblioteca (mcnc.genlib) e finalmente convertido para o formato BLIF (Berkeley Logic Interchange Format). A Tabela 4.1 mostra resultados de área, atraso e consumo de potência para um multiplicador array na base 4 utilizando blocos de multiplicação dedicados m=2. Nesta Tabela, são mostrados resultados considerando blocos sintetizados na ferramenta SIS a partir de descrição em PLA (Original) e considerando blocos otimizados a partir de mapas de Karnaugh (Otimizado) (COSTA, 2002). Esta comparação é realizada para mostrar a eficiência do processo de otimização dos blocos de multiplicação dedicados. Os resultados mostrados na Tabela 4.1, e nas demais tabelas deste trabalho, são obtidos na ferramenta SIS (área e atraso) e na ferramenta SLS (potência). Os multiplicadores são todos descritos no formato BLIF. O resultado de área representa o número de literais, onde cada literal corresponde a dois transistores. O atraso é dado de acordo com o atraso de cada porta lógica presente no caminho crítico do multiplicador. A potência média é obtida na ferramenta SLS, na tecnologia fishbone de 1.2 micrometros, onde se torna possível verificar a atividade de glitching do circuito, visto que nesta ferramenta a estimação de potência é realizada no nível de transistores. Para a estimação de potência são utilizados vetores randômicos de 10000 pontos para todos os multiplicadores apresentados neste trabalho. Este número de pontos é utilizado, pois representa um bom compromisso para a estimação de potência, como apresentado em (COSTA, 2002). Como pode ser observado na Tabela 4.1, o multiplicador de 16 bits que utiliza blocos de multiplicação dedicados otimizados a partir de mapas de Karnaugh apresentam os melhores resultados de área, atraso e consumo de potência. Embora este resultado aponte para um caminho natural de otimizações para maiores bases, sem a síntese automática a partir da ferramenta SIS, torna-se difícil a otimização destes blocos para bases maiores a 38 partir do uso de mapas de Karnaugh. Desta forma, surge a motivação deste trabalho, cujo desafio a ser superado é a utilização de técnicas que possam otimizar os blocos de multiplicação para grupos de multiplicação maiores do que m=2. Tabela 4.1 - Resultados para multiplicadores m=2 Multiplicador 16 bits Métricas Original Otimizado Diferença Otim. vs. Orig. (%) Área (literais) 5678 4602 -18,95 Atraso (ns) 231,70 227,80 -1,68 Potência (mW) 282,70 241,40 -14,61 A seguir são mostradas as técnicas de otimização dos blocos de multiplicação. Na primeira parte são mostradas três diferentes técnicas aplicadas ao bloco de multiplicação m=4 e os resultados são comparados com o multiplicador apresentado em (COSTA, 2002). A seguir, a técnica que apresenta o melhor resultado é aplicada a blocos de multiplicação de diferentes bases, cujos resultados são apresentados e comparados. 4.1 Técnicas para otimizações dos blocos de multiplicação m=4 As técnicas de otimização apresentadas nesta Seção levam em consideração três diferentes estratégias de implementação do bloco de multiplicação Tipo I na base 16 (m=4) (PIEPER, 2008). Estas técnicas são naturalmente estendidas para os blocos do Tipo II e Tipo III. 4.1.1. Otimização usando blocos de multiplicação m=2 e somadores RCA Nesta primeira alternativa o bloco de multiplicação na base 16 (m=4) utiliza na sua estrutura, o bloco de multiplicação mais simples m=2. Os somadores do tipo Ripple Carry (RCA) formam uma estrutura em árvore para a composição do bloco de multiplicação, como mostra a Figura 4.3(b). 39 Figura 4.3 - Bloco de multiplicação (m=4) Tipo I composto por blocos m=2 e RCA Um exemplo de multiplicação de dois números A e B sem sinal é mostrado na Figura 4.3(a). São utilizados três tipos de somadores, ou seja, somador completo (FA – Full Adder), meio somador (HA – Half Adder) e um somador mais simples (representado por 2:1 na Figura 4.3), que faz a operação de soma do carry anterior com os dois bits do operando. As letras utilizadas ao lado dos somadores são identificadores para os blocos utilizados na Figura 4.3(b). Como pode ser visto na Figura 4.3(b), dois bits são multiplicados de uma vez e grupos de dois bits das linhas parciais são somados para se obter o resultado final. Uma última linha de somadores, do tipo RCA, faz a soma final dos resultados parciais obtidos nas somas anteriores. Como pode ser observado na Figura 4.3(b), somente um somador completo, três meio-somadores e três somadores 2:1 são necessários para implementar a soma da linhas dos produtos parciais. Neste bloco, o caminho crítico é composto pela soma dos atrasos de um bloco de multiplicação (m=2) do Tipo I, um somador completo, dois meio somadores e um somador 2:1, como pode ser observado através da linha pontilhada da Figura 4.3(b). 4.1.2. Otimização usando blocos de multiplicação m=2 e somadores CSA 40 Nesta alternativa, utilizam-se os mesmos blocos de multiplicação da base 4 (m=2) para compor o bloco de multiplicação do Tipo I na base 16. Porém, utiliza-se nesta alternativa, o somador CSA (Carry Save Adder) para a soma das linhas parciais. Neste somador, três números são somados simultaneamente, como mostrado anteriormente na Seção 3.4. Em (FONSECA, 2005), os somadores CSA foram aplicados às linhas de produtos parciais do multiplicador array na base 2m. Foram mostradas reduções de área, atraso e potência no multiplicador, quando do uso de CSA. Neste trabalho, os somadores CSA são utilizados para a composição da árvore de somas do módulo de multiplicação dedicado m=4. A Figura 4.4(a) mostra um exemplo de multiplicação de dois números sem sinal com a respectiva indicação das somas dos produtos parciais gerados por cada bloco de multiplicação na base 4. Pode-se notar que usando CSA três números podem ser somados simultaneamente. A idéia básica é que estes três números possam ser reduzidos a dois, como um compressor 3:2, mantendo os resultados da soma e do carry separados. Uma última linha de soma do tipo RCA é responsável pela recombinação dos termos de soma e carry gerados pela árvore de somadores CSA. A Figura 4.4(b) mostra o uso do somador CSA na estrutura interna do bloco de multiplicação na base 16. Figura 4.4 - Bloco de multiplicação (m=4) Tipo I composto por blocos m=2 e CSA 41 Como pode ser visto pela linha pontilhada da Figura 4.4(b), o caminho critico desta técnica é composto pela soma dos atrasos de um bloco de multiplicação (m=2) do Tipo I, um bloco de soma CSA, um meio somador e um somador completo. O fato de usar CSA faz com que haja um bloco a menos de soma no caminho crítico em relação à técnica anterior. 4.1.3. Uso de blocos de multiplicação dedicados 4:2 e RCA Nesta alternativa, utiliza-se um bloco de multiplicação dedicado 4:2 para a composição do bloco de multiplicação m=4. Devido ao maior número de entradas deste bloco (6 entradas), foi utilizada uma metodologia similar à aplicada ao bloco original na base 16, ou seja, a síntese automática do bloco de multiplicação dedicado 4:2 do Tipo I através de uma descrição PLA. O bloco gerado é menos complexo do que um bloco de multiplicação 4:4, pois este apresenta 44 portas lógicas contra as 385 portas lógicas de um módulo de multiplicação 4:4. O exemplo de multiplicação de dois números sem sinal é mostrado na Figura 5.5(a). Figura 4.5 - Bloco de multiplicação (m=4) Tipo I composto por blocos de multiplicação 4:2 Como pode ser observado na Figura 4.5(b), a partir do uso de blocos de multiplicação dedicados 4:2, torna-se necessário apenas uma linha de somadores do tipo RCA para a soma dos produtos parciais. 42 O caminho crítico desta alternativa é composto por um bloco de multiplicação 4:2 e uma linha de somadores RCA como é mostrado na linha pontilhada da Figura 4.5(b). Como também deve ser observado nesta Figura, utiliza-se um bloco de soma dedicado (FA – 3 bit) para a soma simultânea de operandos de 3 bits. 4.1.4. Análise Comparativa Nesta Seção, observam-se resultados de área, atraso e consumo de potência de um multiplicador array na base 16 (m=4) de 16 bits utilizando as três alternativas para o bloco de multiplicação na base 16 do Tipo I. Os multiplicadores com as três alternativas são comparados ao multiplicador original, ou seja, o bloco de multiplicação 4:4 que é obtido a partir da descrição em PLA e síntese automática na ferramenta SIS. Os principais resultados são mostrados na Tabela 4.2. Tabela 4.2 - Resultados de Área, atraso e potência para multiplicadores array de 16 bits na base 16 Alternativa Área % Atraso (ns) % Potência (mW) % original 15932 -234,0 -214,09 -m=2 e RCA 7544 -52,65 204,8 -12,47 189,94 -11,28 m=2 e CSA 8612 -45,94 199,3 -14,83 190,42 -11,05 blocos 4:2 dedicados 7664 -51,89 200,3 -14,40 200,37 -6,41 Como pode ser observado na Tabela 4.2, os multiplicadores array que utilizam as três alternativas propostas neste trabalho apresentam menores valores de área em relação à versão original do multiplicador. Isto ocorre devido ao fato das três alternativas usarem blocos de multiplicação dedicados mais simples. Também pode ser observado na Tabela 4.2 que a primeira alternativa (m=2 e RCA) apresenta a menor área entre as alternativas analisadas. Isto devido ao fato desta estrutura utilizar blocos de multiplicação na base 4 e somadores simples do tipo RCA. Apesar do multiplicador com a segunda alternativa (m=2 e RCA) apresentar maior área, este multiplicador apresenta o menor valor de atraso entre as estruturas estudadas, como pode ser observado na Tabela 4.2. Isto ocorre devido a esta alternativa usar blocos simples de multiplicação na base 4 e utilizar somadores CSA que são mais eficientes do que os somadores RCA, como é mostrado em (PIEPER, 2007). O uso do somador CSA no 43 bloco de multiplicação da base 16 contribui para a redução da propagação de carry dentro da estrutura, pois este transfere o carry na diagonal, como foi mostrado na Seção 3.4, resultando assim na redução do caminho critico do circuito. De acordo com a Tabela 4.2, as três alternativas são mais eficientes em termos de atraso do que a estrutura original. Na verdade, foi observado que a complexidade do bloco original contribui para o aumento do caminho critico na sua estrutura interna, o que lhe confere maior valor de atraso, como mostrado na Tabela 4.2. Como também pode ser observado na Tabela 4.2, os multiplicadores array binários usando as três novas alternativas são mais eficientes em termos de consumo de potência quando comparados com a estrutura original. Isto ocorre devido a estas três novas estruturas apresentarem blocos mais simples e estruturas regulares as quais contribuem para uma menor atividade de glitching dentro dos blocos de multiplicação. Em particular, o multiplicador com a técnica m=2 e somador RCA no bloco dedicado de multiplicação é o que apresenta a menor potência. Entretanto, deve-se observar que a diferença para a segunda alternativa, que utiliza a técnica m=2 e somador CSA não é significativa. De fato, quando se observa o produto atraso potência (PDP – Power Delay Product), observa-se que a segunda alternativa é a que oferece a melhor relação, como pode ser observado na Tabela 4.3. Desta forma, de acordo com os resultados apresentados na Tabela 4.3, define-se a segunda alternativa como a selecionada para a utilização em outros multiplicadores com diferentes tamanhos de grupos de m bits, ou seja, operação em diferentes bases. Tabela 4.3 – Produto atraso-potência (AP) Alternativa Produto atraso-potência(ns.mW) (%) original 50097,06 -m=2 e RCA 38899,71 -22,35 m=2 e CSA 37950,71 -24,24 blocos 4:2 dedicados 40134,11 -19,88 4.2 Aplicação da segunda técnica (m=2 e CSA) a diferentes valores de m De acordo com que foi mostrado na Seção anterior, conclui-se que as três alternativas propostas são mais eficientes em termos de área, atraso e consumo de potência para o multiplicador array binário de 16 bits comparando com a estrutura original. 44 Figura 4.6 - Exemplo completo de multiplicação de 8 bits m blocos m=4 otimizados Tipo I, Tipo II e Tipo III 45 Sendo que a segunda alternativa demonstrou o melhor resultado na relação atraso versus consumo de potência. Desta forma, esta técnica é também aplicada a blocos de multiplicação do Tipo II e III que são partes integrantes do bloco operando II do multiplicador array. Também, esta técnica é aplicada a diferentes tamanhos de multiplicadores (16, 32 e 64 bits) com diferentes grupos de m bits. A Figura 4.6 mostra a segunda alternativa de otimização aplicada aos blocos de multiplicação Tipo I, Tipo II e Tipo III, para um exemplo de multiplicação de 8 bits (A=-1 x B=-1). Observa-se que esta técnica pode ser facilmente aplicada aos três blocos de multiplicação, tendo-se o mesmo caminho crítico para os três blocos, sendo este composto por um bloco de multiplicação m=2, um somador CSA, um FA, um HA. As linhas parciais são obtidas a partir de blocos de multiplicação dedicados de 4 bits (m=4). A principal diferença entre as operações está na extensão de sinal que se faz necessária nos blocos de multiplicação Tipo II e Tipo III, pois estes operam com números com sinal. A partir da otimização do bloco m=4 com a segunda alternativa proposta, pode-se naturalmente estender esta técnica para diferentes blocos de multiplicação. No caso do bloco na base 256 (m=8), pode-se obtê-lo a partir da utilização dos blocos m=4, já previamente otimizados, como mostra o exemplo da Figura 4.7, para um exemplo de multiplicação de 16 bits sem sinal. Nota-se a hierarquia possível na implementação de blocos com diferentes valores de m. Na verdade, a partir de estruturas mais simples, pode-se implementar estruturas mais complexas. No exemplo da Figura 4.7, um módulo m=8 pode ser obtido a partir de uma árvore de blocos m=4, que por sua vez são construídos a partir de blocos mais simples m=2. Esta característica abre uma perspectiva de exploração de espaço de projeto, onde diferentes alternativas podem ser testadas antes da implementação final do circuito. Neste caso, a técnica pode ser adaptada para diferentes valores de m, como mostra a Tabela 4.4. 46 Figura 4.7 - Exemplo de uma multiplicação de 16 bits com blocos de multiplicação m=8 otimizados A Tabela 4.4 mostra também as diferentes possibilidades de implementação de blocos de multiplicação a partir de blocos previamente otimizados. Na primeira coluna da Tabela são indicados os valores dos blocos de multiplicação dedicados a serem implementados. A segunda coluna representa o número de otimizações que foram implementadas para cada valor de m. Finalmente, a terceira coluna da tabela mostra o tipo de otimização que utiliza os blocos previamente implementados. Tabela 4.4 - Possibilidades de otimizações dos blocos de multiplicação Valor de m 3 4 5 6 8 Número de Característica Otimizações 1 Otimizado 1: bloco m=2 otimizado + blocos dedicados 1:2 Otimizado 1: blocos m=2 otimizado 2 Otimizado 2: bloco m=3 otimizado + blocos dedicados 1:3 Otimizado 1: bloco m=4 + blocos dedicados 1:4 2 Otimizado 2: bloco m=3 otimizado + bloco m=2 otimizado Otimizado 1: bloco m=4 otimizado + bloco m=2 otimizado 3 Otimizado 2: bloco m=5 otimizado + blocos dedicados 1:5 Otimizado 3: blocos m=3 otimizados 1 Otimizado 1: blocos m=4 otimizados 47 Deve-se observar na Tabela 4.4 que, para cada valor de m, existe a possibilidade da utilização de blocos irregulares 1:m, para os casos, onde há quebras na operação de multiplicação. Esses blocos 1:m podem ser obtidos utilizando as mesmas técnicas anteriormente mostradas na Seção 4.1.2, para implementações dos blocos de multiplicação m=4 ou a partir de mapas de Karnaugh, quando a complexidade do bloco 1:m não for elevado, como por exemplo, no bloco 1:3. - Figura 4.8 - Bloco de multiplicação otimizado m=3 utilizando blocos dedicados 1:2 A Figura 4.8 mostra um exemplo de multiplicação de 3 bits do Tipo I, onde se faz necessária uma quebra dos blocos de multiplicação. Neste caso, serão utilizados blocos 1:2 do Tipo I, que são facilmente obtidos por mapas de Karnaugh que permitem a simplificação destes blocos para simplesmente duas portas AND, como mostrado na Figura 5.8. Para o bloco de multiplicação m=3, apenas um bloco de multiplicação do Tipo I m=2, um somador CSA e um somador 2:1 estão presentes no caminho crítico. 4.2.1 Análise comparativa entre multiplicadores com diferentes valores de m As Tabelas 4.5, 4.6, 4.7 e 4.8 mostram resultados de área, atraso e consumo de potência de multiplicadores com diferentes blocos otimizados para tamanhos de operandos 48 de 16, 32 e 64 bits. Todos os multiplicadores são comparados com os multiplicadores originais que são sintetizados na ferramenta SIS a partir de descrições PLA. Tabela 4.5 -Resultados para multiplicadores m=3 bloco Área (literais) Atraso (ns) Potência (W) Original 8382 218,50 0,2315 16 bits Otimizado 1 5117 -38,95(%) 227,30 3,87(%) 0,2031 -12,28(%) Original 31849 448,50 1,6609 32 bits Otimizado 1 18951 -40,50(%) 457,30 1,96(%) 1,5640 -5,83(%) Original 130622 919,30 13,9721 64 bits Otimizado 1 75581 -42,14(%) 928,10 0,96(%) 13,554 -2,99(%) Tabela 4.6 - Resultados para multiplicadores m=4 Original 16 bits Otimizado Otimizado Original 32 bits Otimizado Otimizado Original 64 bits Otimizado Otimizado Área (literais) 14983 5102 -65,95(%) 6547 -56,30(%) 61935 20166 -67,44(%) 26115 -57,83(%) 251551 79862 -68,25(%) 104035 -58,64(%) 1 2 1 2 1 2 Atraso (ns) Potência (W) 206,2 0,22925 205,70 -0,24(%) 0,15812 -31,03(%) 215,90 +4,70(%) 0,21694 -5,37(%) 431,4 1,4635 430,90 -0,12(%) 1,126 -23,06(%) 441,10 +2,25(%) 1,3981 -4,47(%) 881,3 10,3773 881,30 -0,06(%) 8,8869 -14,36(%) 891,50 +1,10(%) 10,046 -3,19(%) Tabela 4.7 - Resultados para multiplicadores m=5 Original 16 bits Otimizado Otimizado Original 32 bits Otimizado Otimizado Original 64 bits Otimizado Otimizado 1 2 1 2 1 2 Área (literais) 33452 6290 -81,20(%) 6821 -79,61(%) 131061 21177 -83,84(%) 23265 -82,25(%) 542804 80852 -85,10(%) 89204 -83,57(%) Atraso (ns) Potência (W) 234,5 0,37486 222,8 -4,99(%) 0,22263 -40,61(%) 218,7 -6,74(%) 0,18889 -49,61(%) 458,9 1,8387 447,2 -2,55(%) 1,392 -24,29(%) 443,1 -3,44(%) 1,2042 -34,51(%) 893,7 10,72 882 -1,31(%) 8,3658 -21,96(%) 887,9 -0,65(%) 7,5584 -29,49(%) 49 Tabela 4.8 -Resultados para multiplicadores m=6 Original Otimizado 16 bits Otimizado Otimizado Original Otimizado 32 bits Otimizado Otimizado Original Otimizado 64 bits Otimizado Otimizado 1 2 3 1 2 3 1 2 3 Área (literais) 61758 5336 -91,36(%) 5276 -91,46(%) 5260 -91,48(%) 325885 21934 -93,27(%) 21569 -93,38(%) 21469 -93,41(%) 1505800 82136 -94,55(%) 80863 -94,63(%) 80236 -94,67(%) Atraso (ns) Potência (W) 322,7 0,5144 217,5 -32,60(%) 0,1975 -61,61(%) 234,5 -27,33(%) 0,2537 -50,68(%) 210,7 -34,71(%) 0,194 -62,29(%) 536,1 2,947 430,9 -19,62(%) 1,1736 -60,18(%) 447,9 -16,45(%) 1,6179 -45,10(%) 424,1 -20,89(%) 1,1174 -62,08(%) 973,1 15,7465 867,9 -10,81(%) 6,50823 -58,67(%) 884,9 -9,06(%) 8,42168 -46,52(%) 861,1 -11,51(%) 6,34854 -59,68(%) Em relação aos resultados de área, observa-se a redução significativa em todos os multiplicadores, que utilizam blocos de multiplicação otimizados em relação ao multiplicador com bloco original. Isto ocorre devido ao fato dos circuitos otimizados usarem circuitos mais simples com menos portas lógicas em relação à estrutura original. Os valores de atraso apresentam variações de acordo com os valores de m utilizados para a otimização dos módulos de multiplicação. Entretanto, deve-se observar nesta mesma tabela que o aumento do número de bits reduz a diferença de atraso em relação ao multiplicador com blocos de multiplicação originais. Isto se explica pelo aumento do número de linhas de produtos parciais dos multiplicadores com o aumento do número de bits, com correspondente aumento no caminho crítico e, conseqüentemente, aumento nos valores de atraso. Observa-se também que o aumento do valor de m reflete diretamente nas diferenças entre os valores de atraso, em relação aos multiplicadores com bloco de multiplicação original. Este fato é decorrente da complexidade dos blocos de multiplicação originais variarem exponencialmente com o acréscimo do valor de m. Para os multiplicadores com blocos m=6, por exemplo, as diferenças em atraso em relação aos multiplicadores originais é significativa, como pode ser visto na Tabela 4.8. Isto ocorre devido ao fato destes blocos m=6 originais serem bem mais complexo em relação aos demais blocos originais. Desta forma, o impacto da otimização realizada neste bloco aparece de forma mais significativa O aspecto da regularidade dos multiplicadores é um ponto importante que apresenta um forte impacto nos valores de atraso. Deve-se observar que mesmo usando blocos m=3 50 na sua estrutura, os multiplicadores com blocos m=4 (Otimizado 2) apresentam maiores valores de atraso em relação aos multiplicadores com os blocos originais, como pode ser observado nos valores de multiplicadores na linha Otimizado 2 da Tabela 4.6. Para esta alternativa, os multiplicadores utilizam quebra de blocos (blocos m=3 otimizados + blocos dedicados 1:3). Esta quebra de regularidade afeta os valores de atraso dos multiplicadores, fazendo com que estes apresentem maiores valores de atraso, quando comparados aos multiplicadores com blocos originais. Entretanto, deve-se observar que este mesmo aspecto não se aplica aos multiplicadores com blocos m=5 (que utilizam blocos 1:4) e m=6 (que utilizam blocos 1:5). De fato, como os blocos originais m=5 e m=6 são bem mais complexos, logo o impacto da utilização das estruturas 1:4 e 1:5 não compromete os valores de atraso. O fato de todos os blocos serem otimizados faz com que os multiplicadores de 16, 32 e 64 bits apresentem menor consumo de potência em relação aos multiplicadores com blocos originais, como pode ser visto nas Tabelas 4.5, 4.6, 4.7 e 4.8. Isto se explica pelo fato dos blocos otimizados apresentarem estruturas mais simples e menores caminhos críticos, quando comparados aos blocos originais otimizados pela ferramenta SIS. Esta estrutura mais simples dos blocos otimizados contribui para a redução da atividade de glitching internamente nos blocos, o que por sua vez, contribui significativamente para a redução do consumo de potência dos multiplicadores de 16, 32 e 64 bits. Deve-se observar, entretanto, que os multiplicadores que utilizam a segunda alternativa de otimização (Otimizado 2) nos blocos m=4 não apresentam uma diferença significativa de consumo de potência em relação aos multiplicadores com blocos originais, como pode ser visto na Tabela 4.7. Estes resultados reforçam o aspecto de que a utilização desta alternativa nos blocos m=4 afetam de forma negativa o atraso (devido à utilização de blocos 1:3), o que por sua vez compromete o consumo de potência dos multiplicadores que utilizam esta alternativa arquitetural. Como se pode notar dos resultados apresentados nas Tabelas 4.5, 4.6, 4.7 e 4.8, os circuitos multiplicadores que utilizam os blocos de multiplicação na versão original, apresentam um aumento de área exponencial com o aumento do valor de m. Desta forma, as simulações dos circuitos tornam-se com alto custo computacional. Por exemplo, para o circuito multiplicador na base 64 (m=6) de 64 bits são necessárias 161 horas para a 51 obtenção do resultado de estimativa de potência. Portanto, para os circuitos na base 256 (m=8) não foram realizada simulações com os circuitos multiplicadores na versão original. A técnica de otimização empregada aos blocos de multiplicação (m=8) é a partir da utilização de blocos m=4 otimizados, pois de acordo com as Tabelas 4.6 e 4.8 os multiplicadores na base 16 (Otimizado 1) e base 64 (Otimizado 3) obtiveram os melhores resultados de redução do valor de potência entre as otimizações estudadas. Além disto, estas otimizações foram implementadas através de blocos dedicados de multiplicação regulares, ou seja, sem a necessidade de quebra de operação de multiplicação (sem a utilização de blocos 1:m). Para os circuitos multiplicadores na base 256 (m=8) são utilizados os blocos de multiplicação m=4 Otimizado 1, que foram apresentados na Seção 4.1.2. Os resultados em termos de área, atraso e consumo de potência para o circuito multiplicador m=8 Otimizado 1 são mostrados na Tabela 4.9. O impacto destes resultados comparado com os multiplicadores utilizando valores menores de m, mostrados anteriormente nas Tabelas 4.5, 4.6, 4.7 e 4.8 são mostrados nos gráficos da Figura 4.9, para multiplicadores de 16, 32 e 64 bits. Tabela 4.9 - Resultados das simulações para m=8 Otimizado 16 bits 32 bits 64 bits Área (literais) 5772 22552 88080 Atraso (ns) 201,90 414,50 839,70 Potência (W) 0,19655 1,0152 5,2313 Atraso para multiplicadores para diferentes m 100000 1200 80000 1000 Atraso (ns) Area (literais) Área para multiplicadores para diferentes m 60000 40000 20000 800 600 400 200 0 0 16 bits 32 bits Tamanho do Multiplicador 64 bits 16 bits 32 bits Tamanho do Multiplicador 64 bits 52 Potência para multiplicadores para diferentes m 25 (m=2) Potência (W) 20 (m=3) 15 (m=4) 10 (m=5) (m=6) 5 (m=8) 0 16 bits 32 bits 64 bits Tamanho do Multiplicador Figura 4.9 - Gráficos com os resultados de área, atraso e consumo de potência dos multiplicadores para diferentes valores de m Os resultados na Tabela 4.9 mostram que apesar dos multiplicadores com m=8 estarem entre os que apresentam os maiores valores de área, entre os multiplicadores otimizados, estes circuitos apresentam os menores valores de atraso e consumo de potência para os multiplicadores de 32 e 64 bits, como mostram os gráficos da Figura 4.9. Isto se explica pelo fato dos multiplicadores que utilizam blocos de multiplicação m=8 terem uma redução significativa das suas linhas de produtos parciais. Além disto, o fato dos módulos de multiplicação dedicados m=8 otimizados apresentarem uma estrutura simples (a partir da utilização de blocos m=4), também contribui para significativas reduções de valores de atraso e potência dos multiplicadores array na base 256. Esta diferença se torna mais significativa para circuitos com valores maiores de operandos (64 bits), onde apenas 7 linhas de produtos parciais são necessárias na estrutura array. Esta diferença do número de linhas de produtos parciais pode ser vista na Tabela 5.3. 4.2.2 Análise comparativa entre circuitos multiplicadores array na base 2m e Booth modificado Nesta Seção é apresentado uma comparação dos multiplicadores array na base 2m com os blocos de multiplicação otimizados em relação ao multiplicador Booth Modificado. Em (COSTA, 2002) foi mostrado que o multiplicador array nas bases 4 e 16 são mais eficientes do que o multiplicador Booth. Entretanto, o multiplicador na base 16 utilizou 53 blocos dedicados de multiplicação originais (otimizados a partir de descrição PLA e síntese automática na ferramenta SIS). Além disso, o trabalho de (COSTA, 2002) levou em conta apenas comparações de multiplicadores de 16 bits. Neste trabalho, apresenta-se uma extensão destas comparações com multiplicadores de 16, 32 e 64 bits utilizando variados blocos de grupos de m bits otimizados. O multiplicador Booth opera na base 4, enquanto os multiplicadores array operam nas bases 4 (m=2), 16 (m=4) e 256 (m=8). A Tabela 4.10 mostra os resultados de área, atraso e potência para os multiplicadores analisados. Tabela 4.10 - Resultados das simulações dos Multiplicadores na base 2m e Booth Modificado Booth m=2 Otimizado 16 bits m=4 Otimizado m=8 Otimizado Booth m=2 Otimizado 32 bits m=4 Otimizado m=8 Otimizado Booth m=2 Otimizado 64 bits m=4 Otimizado m=8 Otimizado Área (literais) 3708 4602 +19,43(%) 5102 +27,32(%) 5772 +35,76(%) 14596 18586 +21,47(%) 20166 +27,62(%) 22552 +35,28(%) 57876 74586 +22,40(%) 79862 +27,53(%) 88080 +34,29(%) Atraso (ns) 233,7 227,8 -2,52(%) 205,7 -11,98(%) 201,9 -13,61(%) 474,7 478,2 +0,73(%) 430,9 -9,23(%) 414,5 -12,68(%) 959,2 979 +2,02(%) 881,3 -8,12(%) 839,7 -12,46(%) Potência (W) 0,09525 0,06664 -30,04(%) 0,06013 -36,87(%) 0,06899 -27,57(%) 0,7046 0,43368 -38,45(%) 0,35525 -49,58(%) 0,32264 -54,21(%) 5,5183 3,1296 -43,29(%) 1,8405 -66,65(%) 1,7751 -67,83(%) Como já abordado anteriormente em (COSTA, 2002), os multiplicadores array apresentam maiores valores de área em relação ao multiplicador Booth, como pode ser observado na Tabela 4.10. Isto devido ao fato das arquiteturas array apresentarem um maior número de elementos lógicos nos blocos de multiplicação. Porém, os multiplicadores array apresentam menor atraso em relação ao Booth Modificado, principalmente para m>2. De fato, o multiplicador Booth necessita de um esquema de codificação e um multiplexador, que são responsáveis por produzir o termo multiplicando, de acordo com os 3 bits no termo multiplicador. Estes circuitos apresentam uma maior complexidade, com uma maior quantidade de interconexões e maior valor de atraso comparado ao módulo multiplicador básico das arquiteturas array. 54 A complexidade destes circuitos aumenta com o aumento do número de bits, o que compromete ainda mais o atraso do multiplicador Booth. Isto pode ser comprovado pelos maiores valores de atraso apresentados pelos multiplicadores Booth de 32 e 64 bits comparados com o multiplicador array na base 4, como pode ser visto na Tabela 4.10. Deve-se observar nesta Tabela que os multiplicadores com blocos dedicados m=8 apresentam os menores valores de atraso. Isto se explica pelo fato destes multiplicadores reduzirem mais o número de linhas de somas de produtos parciais, o que reduz o caminho crítico. Além disto, estes blocos m=8 são implementados a partir de blocos m=4 otimizados que apresentam complexidade reduzida. Em (CALLAWAY, 1993) foi mostrado que uma das maiores fontes de dissipação de potência em circuitos multiplicadores podem ser as transições espúrias (glitching) e corridas lógicas que fluem através do array. Desta forma, o maior número de interconexões presentes no multiplicador Booth é responsável pela geração de uma significativa quantidade de atividade de glitching no circuito, o que justifica um grande ganho em potência dos multiplicadores array que operam na base 2m como pode ser observado na Tabela 4.10. Em particular, os multiplicadores array com blocos de otimização m=8. Estes valores estão coerentes com os menores valores de atraso apresentados pelos multiplicadores com estes blocos. Estes menores valores de atraso têm um bom impacto na redução do consumo de potência dos multiplicadores com blocos m=8, principalmente pelas características de regularidade apresentadas por estes blocos, e grande redução das linhas de produtos parciais na estrutura array dos multiplicadores. A Figura 4.10 mostra gráficos comparativos de valores de área, atraso e consumo de potência dos multiplicadores apresentados na Tabela 4.10. Pode-se visualizar através dos gráficos da Figura 4.10 que a área aumenta com o aumento da largura do multiplicador, e que o multiplicador Booth modificado possui menor área em comparação aos multiplicadores array na base 2m. Em termos de atraso os multiplicadores array nas bases maiores do que 4 possuem melhores valores de atraso devido a redução das linhas de soma dos produtos parciais comparados com o multiplicador Booth modificado. Em relação ao consumo de potência os multiplicadores array mostraram-se mais eficientes pois estas arquiteturas possuem menor profundidade lógica o que reduz a 55 atividade de glichting ao longo do array com foi dito anteriormente. Com isto diferenças significativas nos valores de consumo de potência podem ser verificadas quando são comparados os circuitos multiplicadores Booth Modificado e o multiplicador array na base 256. Atraso 1000 80000 800 Atraso (ns) 100000 60000 40000 20000 600 400 200 0 0 16 bits 32 bits 64 bits 16 bits 32 bits Tamanho do Multiplicador Tamanho do Multiplicador Potência Potência 0,12 0,1 0,08 0,06 0,04 0,02 0 Potência (W) 0,8 0,6 0,4 0,2 0 16 bits 32 bits Tam anho do Multiplicador Tam anho do Multiplicador Potência 6 5 Potência (W) Potência (W) Area (literais) Área Booth 4 (m=2) Otimizado 3 (m=4) Otimizado 2 (m=8) Otimizado 1 0 64 bits Tam anho do Multiplicador Figura 4.10 - Gráficos das simulações dos multiplicador para área, atraso e potência. 64 bits 56 4.3 Sumário Nesta Seção foram apresentadas as otimizações dos blocos de multiplicação dedicados das arquiteturas do multiplicador array na base 2m. Resultados em termos de área, atraso e consumo de potência foram mostrados, assim como uma comparação com o multiplicador Booth Modificado. Concluiu-se que na maioria dos multiplicadores, a redução do número de linhas de soma dos produtos parciais acarreta em significativas reduções no atraso e no consumo de potência dos circuitos, principalmente para os multiplicadores de 64 bits. Desta forma, torna-se importante a aplicação de circuitos somadores compressores que podem reduzir ainda mais o número de linhas de somas de produtos parciais. O próximo capítulo apresenta um estudo da aplicação de compressores 4:2, 8:2 e 16:2 nos multiplicadores array. 57 5 CIRCUITOS APLICADOS SOMADORES AOS EFICIENTES MULTIPLICADORES ARRAY NA BASE 2m Na Seção 3.5 foi mostrada uma introdução sobre os somadores compressores, assim como a apresentação da estrutura interna do compressor 4:2 (OKLOBDZIJA, 1996). Neste capítulo, apresenta-se uma extensão dos circuitos compressores para maiores estruturas (8:2 e 16:2) e também a aplicação destes somadores compressores nas linhas de somas dos produtos parciais dos multiplicadores array na base 2m. 5.1 Extensão dos Circuitos Somadores Compressores para Blocos 8:2 e 16:2 Circuitos somadores compressores com maior taxa de compressão, ou seja, maiores valores de somas simultâneas de operandos, podem ser construídos através do compressor 4:2. A representação geral para o cálculo da soma simultânea de operandos, a partir de circuitos compressores, é mostrada na Equação 5.1, onde m representa o tipo de compressor a ser utilizado (neste trabalho 4:2, 8:2 ou 16:2), ai são as entradas primárias e l é o índice de Cin e Cout. (ZIMMERMANN, 1999) (5.1) A estrutura de um somador compressor 8:2 construído a partir de compressores 4:2 é mostrado na Figura 5.1. 58 Figura 5.6 - Estrutura interna de um compressor 8:2 Através da estrutura do compressor 8:2 mostrado na Figura 5.1, verifica-se que o bloco é composto por treze entradas, sendo oito delas primárias (A, B,C, D, E, F, G e H) e cinco entradas de carry de entrada - Cin (Cin0, Cin1, Cin2, Cin3 e Cin4). A estrutura do compressor também apresenta sete saídas, sendo duas primárias (Sum e Carry) e cinco para carry de saída - Cout (Cout0, Cout1, Cout2, Cout3 e Cout4). Assim como no compressor 4:2, o compressor 8:2 tem suas entradas e a saída Sum com peso (j) e as saídas restantes com peso (j+1), sendo que o resultado do valor da soma (R) é dado através da Equação 5.2. R = Sum + 2(Cout0 + Couot1 + Cout2 + Cout3 + Cout4 + Carry) (5.2) A Tabela 5.1 - Tabela verdade de um compressor 8:2 Valor Entrada [j] 0 1 2 3 4 5 6 7 8 9 10 11 11 13 (Cout0 + Couot1 + Cout2 + Cout3 + Cout4 + Carry) [j+1] Resultado Parcial 0 0 1 1 2 2 3 3 4 4 5 5 6 6 Sum (j) R 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 59 Por exemplo, se todas as entradas estiverem em nível lógico 1, o resultado da soma será: R = 1 + 2(1+1+1+1+1+1) = 13, conforme é verificado na Tabela 5.1, pois com a entrada (j) igual a 13, a saída com peso (j+1) é igual a 6 e a saída Sum com peso j é igual a 1. A interpretação deste resultado está estabelecida no aspecto de que o valor 6 (mostrado na coluna resultado parcial) multiplicado por 2 (peso j+1 =2) é somado ao valor de Sum de valor igual a 1 (peso j = 1). O mesmo raciocínio é utilizado para os demais valores da Tabela 5.1. A partir do projeto de compressores 8:2, torna-se factível a utilização destes para a expansão da estrutura para um maior número de somas simultâneas. Neste trabalho, utilizase os compressores 4:2 e 8:2 como base para o projeto de compressores 16:2. Este tipo de estrutura possibilita a realização de somas de até dezesseis operandos simultaneamente. A Figura 5.2 mostra o diagrama em blocos do compressor 16:2. Figura 5.2 - Estrutura interna de um compressor 16:2 O compressor 16:2 é composto por 29 entradas, sendo dezesseis delas primárias (A, B, C, D, E, F, G, H, I, J, L, M, N, O, P e Q) e treze entradas de carry de entrada - Cin (Cin0, Cin1, Cin2, Cin3, Cin4, Cin5, Cin6, Cin7, Cin8, Cin9, Cin10, Cin11 e Cin12). A estrutura também apresenta quinze saídas, sendo duas primárias (Sum e Carry) e treze para carry de saída - Cout (Cout0, Cout1, Cout2, Cout3, Cout4, Cout5, Cout6, Cout7, Cout8, Cout9, Cout10, Cout11 e Cout12). Assim como nos outros dois compressores apresentados, 60 o compressor 16:2 segue a mesma filosofia da utilização das suas entradas e a saída Sum com peso (j) e as saídas restantes com peso (j+1), como mostra a Tabela 5.2. Tabela 5.2 - Tabela verdade de um compressor 16:2 (Cout0 + … + Cout12 + Carry) [j+1] Valor Entrada [j] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 Resultado Parcial 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 Sum (j) R 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 Para a obtenção dos valores de soma, a partir dos valores de entrada, faz-se necessário também o uso de uma expressão representativa, mostrada na Equação (5.3). R = Sum + 2(Cout0 + …+ Cout12 + Carry) (5.3) 61 Se todas as entradas estiverem em nível lógico 1, assim como as entradas de carry de entrada (Cin), a soma deverá apresentar um valor igual a 29. Desta forma, de acordo com a Equação 5.3: R= 1+2(1+1+1+1+1+1+1+1+1+1+1+1+1+1) = 29. Assim como para o compressor 8:2, observa-se a influência dos pesos nos resultados apresentados na Tabela 5.2. Por exemplo, para o valor de entrada igual a 29, o resultado de soma é obtido a partir do valor de saída igual a 14, que deve ser multiplicado por 2 (devido ao peso j+1), somado ao valor Sum igual a 1 (devido ao peso j). 5.2 Aplicação dos Compressores a Multiplicadores Array na Base 2m No capitulo 4 verificou-se que a redução das linhas de soma dos produtos parciais reduzem a profundidade lógica do circuito, e conseqüentemente, ocorre a redução do atraso. Concluiu-se também que o consumo de potência é reduzido com o menor número de linhas de somas nas arquiteturas dos multiplicadores array na base 2m, devido a menor atividade de sinais espúrios ao longo da estrutura array. Essa redução das linhas de somas dos produtos parciais pode ser obtida a partir da utilização de circuitos somadores compressores, pois estes realizam a soma simultânea de vários operandos. O tipo de circuito compressor a ser utilizado depende do número de operandos presente na estrutura array do multiplicador. O número de blocos de operandos em circuitos multiplicadores (n_op) é dado através da Equação 5.4, onde W é a largura do multiplicador e m é o grupo de bits que são multiplicados simultaneamente. n _ op = W m (5.4) Por exemplo, de acordo com a Equação 5.4, para um multiplicador de 16 bits operando na base 16 (m=4), tem-se que n_op=4. Logo, estes quatro operandos podem ser somados por circuitos somadores compressores 4:2. Desta forma, a condição inicial para a introdução de circuitos compressores 4:2 nas arquiteturas dos multiplicadores, para a soma das linhas dos produtos parciais, é que haja no mínimo quatro somas a serem realizadas na 62 estrutura array, ou seja, n_op≥4. Um exemplo de multiplicação de 16 bits em complemento de 2 na base 16 é mostrado na Figura 5.3. Figura 5.3 - Exemplo de multiplicação de 16 bits m=4 utilizando compressores 4:2 Através do exemplo de multiplicação apresentado na Figura 5.3, verifica-se que um circuito compressor 4:2 pode substituir as quatro linhas de somas parciais presentes no cálculo. Através das indicações dos blocos de compressores assinalados na Figura 5.3, podese observar que são necessários vinte circuitos compressores 4:2 de um bit para efetuar a soma dos quatro operandos que compõem os vinte bits mais significativos (incluindo a extensão do sinal). Para os bits menos significativos, que apresentam o número de linhas de operandos menor do que quatro, tem-se a utilização de diferentes estruturas de circuitos somadores. São utilizados somadores CSA para a terceira coluna de operandos (que envolve a soma de três operandos) e somadores RCA para a segunda coluna (que envolve a soma de dois operandos). A primeira coluna dos quatro bits menos significativos, já representa o primeiro resultado final, que é obtido diretamente do bloco de multiplicação dedicado m=4. A arquitetura geral do circuito multiplicador array de 16 bits na base 16 utilizando compressores 4:2 é mostrada na Figura 5.4, onde os blocos de compressão 4:2 estão agrupados de acordo com o exemplo mostrado na Figura 5.3. 63 Figura 5.4 - Estrutura de circuito multiplicador de 16 bits m=4 utilizando compressores 4:2 Verifica-se na Figura 5.4 que há uma linha de somadores RCA na estrutura do multiplicador, e cada somador completo (FA) presente nesta linha, serve para realizar a recombinação da saída Sum (peso j) do compressor 4:2 com o carry (peso j+1) proveniente do bloco do compressor 4:2 anterior. Deve-se observar que não há propagação de carry entre os blocos compressores 4:2, pois o carry de saída (Cout) não depende do carry de entrada (Cin), de acordo com a Equação 3.3 – Seção 3.5. O caminho critico do circuito multiplicador é estabelecido através da linha de somadores RCA, um bloco CSA e um bloco Operando I, que agrega o circuito de multiplicação dedicado m=4. Da mesma forma que os compressores 4:2, os compressores 8:2 e 16:2 podem ser aplicados aos multiplicadores array na base 2m para a soma das linhas dos produtos parciais. A condição inicial para a introdução destes compressores nas linhas de soma dos produtos parciais é de se ter, pelo menos, oito ou dezesseis operandos no circuito multiplicador, ou seja, o resultado da Equação 5.4 deve ser igual ou superior a oito ou dezesseis (n_op≥8 ou n_op≥16), de acordo com o número de linhas de somas de produtos parciais presentes na estrutura array do multiplicador. Se, por exemplo, um multiplicador de 64 bits opera na base 16 (m=4), tem-se somente uma linha de soma utilizando somadores compressores de 16:2 ou duas linhas de somadores compressores 8:2, ou 4 linha de somadores compressores 4:2, ao invés de 15 linhas de produtos parciais utilizando somadores RCA. O número de linhas de compressores em um circuito multiplicador array na base 2m é dado através da Equação 5.5, onde k representa o tipo de somador compressor (Ex. para um compressor 8:2 , k=8). 64 l _ comp(k ) : 2 = (n _ op ) k (5.5) A Tabela 5.3 mostra o número de linhas de somas de produtos parciais necessário para a composição dos multiplicadores array, utilizando somadores RCA (W/m-1) e compressores 4:2, 8:2 e 16:2 (a partir da Equação 5.5, onde n_op é obtido a partir da Equação 5.4). São mostrados exemplos para multiplicadores nas bases 16 e 256. Tabela 5.3 – Número de linhas de somas de produtos parciais em multiplicadores nas bases 16 e 256 (m=4) 16 bits (m=8) (m=4) 32 bits (m=8) (m=4) 64 bits (m=8) RCA Compressor 4:2 Compressor 8:2 Compressor 16:2 3 1 --1 ---7 2 1 -3 1 --15 4 2 1 7 2 1 -- 5.2.1 Análise Comparativa de Circuitos Multiplicadores Array na Base 2m Utilizando Somadores Compressores Nesta Seção é realizada uma análise comparativa entre algumas arquiteturas de circuitos multiplicadores otimizados, apresentadas no capitulo 4, utilizando diferentes somadores compressores nas linhas de soma dos produtos parciais. Esta análise é efetuada a partir de resultados de área, atraso e consumo de potência, seguindo a mesma metodologia mostrada na Seção 1.3.1. Utiliza-se, para a aplicação dos circuitos compressores, os circuitos multiplicadores array que operam nas bases 16 (m=4) e 256 (m=8). Estes circuitos multiplicadores foram escolhidos, por apresentarem os melhores resultados de atraso e potência, como mostrado anteriormente no Capítulo 4. O número de linhas de somas de produtos parciais que se utiliza nos circuitos multiplicadores é apresentado na Tabela 5.3. As Tabelas 5.4 e 5.5 apresentam resultados de área, atraso e potência de multiplicadores de 16, 32 e 64 bits nas bases 16 e 256 utilizando os circuitos somadores compressores 4:2, 8:2 e 16:2. Estes multiplicadores com compressores são comparados em 65 aos circuitos multiplicadores que utilizam somadores RCA, que necessitam de (W/m)-1 linhas de somas de produtos parciais. Para o multiplicador com bloco de multiplicação m=4, utiliza-se a estrutura com o bloco dedicado de multiplicação Otimizado 1, pois este apresentou os melhores resultados de atraso e potência. Tabela 5.4 - Resultados para multiplicadores m=4 Otimizado 1 com o uso de compressores W Somador RCA Compressor 4:2 RCA 32 bits Compressor 4:2 Compressor 8:2 RCA Compressor 4:2 64 bits Compressor 8:2 Compressor 16:2 16 bits Bloco de multiplicação dedicado m=4 Otimizado 1 Área Atraso (ns) Potência (W) 5102 205,7 0,158 5688 11,49(%) 205,8 0,05(%) 0,214 35,45(%) 20166 430,9 1,126 22076 9,47(%) 421,8 -2,11(%) 1,1145 -1,02(%) 22600 12,07(%) 411,4 -4,53(%) 1,3903 23,47(%) 79862 881,3 8,8869 85428 6,97(%) 828,3 -6,01(%) 4,5945 -48,30(%) 85516 7,08(%) 818,2 -7,16(%) 5,6863 -36,01(%) 92712 16,09(%) 821,6 -6,77(%) 7,1854 -19,15(%) Tabela 5.5 - Resultados para multiplicadores m=8 Otimizado com compressores W Métrica RCA Compressor 4:2 RCA 32 bits Compressor 4:2 Compressor 8:2 RCA Compressor 4:2 64 bits Compressor 8:2 Compressor 16:2 16 bits Bloco de multiplicação dedicado m=8 Otimizado Área Atraso (ns) Potência (W) X X X X X X X X X 22552 414,5 1,0152 23698 5,08(%) 412 -0,60(%) 1,3232 30,34(%) X X X X X 88080 839,7 5,2313 91618 4,02(%) 818,8 -2,49(%) 5,6258 7,54(%) 92866 5,43(%) 815,4 -2,89(%) 6,5522 25,25(%) X X X X X X De acordo com os resultados mostrados nas Tabelas 5.4 e 5.4, observa-se que o uso dos compressores 4:2, 8:2 e 16:2 agrega maiores valores de área aos circuitos multiplicadores de 16, 32 e 64 bits. Isto pode ser explicado devido ao fato dos circuitos compressores 4:2 serem implementados com um maior número de portas lógicas em relação a um somador completo presente no somador RCA. Enquanto que o compressor 4:2 de um bit utiliza 12 portas lógicas (2 multiplexadores com 4 portas cada e 4 portas XOR), o somador completo é composto por 5 portas lógicas. Entretanto, observa-se uma redução no 66 atraso dos multiplicadores, quando do uso dos compressores, especificamente nos multiplicadores de 32 e 64 bits. A redução do atraso é devido à maior redução do número de linhas dos produtos parciais nestes circuitos multiplicadores. Em particular, esta redução de atraso se torna mais visível nos multiplicadores na base 16 (m=4), pois estes apresentam um maior número de linhas parciais em relação aos multiplicadores na base 256 (m=8). Em relação ao consumo de potência, observa-se que só há redução do consumo de potência nos multiplicadores quando há uma diferença significativa no número de linhas de somas de produtos parciais. Neste caso, observa-se na Tabela 5.4 que há alguma redução de potência no multiplicador de 32 bits na base 16 (m=4) com compressor 4:2. De fato, Isto se explica pois neste multiplicador há a redução de sete linhas de soma de produtos parciais (necessárias utilizando somadores RCA) para duas linhas de soma utilizando compressores 4:2. Para os multiplicadores de 16 bits não há ganhos de potência com o uso de compressores, pois a diferença no número de linhas de somas de produtos parciais não é significativa. Entretanto, para os multiplicadores de 64 bits, observa-se significativas reduções no consumo de potência dos multiplicadores com o uso de compressores, o que reforça o aspecto de que, obtém-se reduções significativas do consumo de potência dos somadores, quando a redução do número de linhas de somas de produtos parciais é significativo. Para o caso dos multiplicadores na base 256 não há uma redução deste número de linhas de produtos parciais de forma tão significativa, em relação aos multiplicadores com somadores RCA. Logo não há reduções no consumo de potência dos multiplicadores na base 256 com o uso de compressores, como pode ser visto na Tabela 5.4. Do que foi exposto acima, chega-se então a duas conclusões: i) só vale a pena usar circuitos compressores nos multiplicadores quando estes agregam um maior número de bits e operações em bases menores; ii) quando valer a pena utilizar os circuitos compressores nos multiplicadores o mais indicado é o 4:2, pois este agrega uma estrutura mais simples com reduzido caminho crítico, o que influencia de forma significativa na redução da atividade de glitching e, consequentemente, na redução do consumo de potência. 67 5.3 Sumário Nesta Seção foram apresentadas as estruturas dos somadores compressores 8:2 e 16:2, assim como a aplicação destas estruturas aos multiplicadores array na base 2m. Uma análise comparativa em área, atraso e consumo de potência foi mostrada entre os multiplicadores array que utilizam a soma dos produtos parciais através de somadores do tipo RCA e as novas estruturas que utilizam compressores para a soma destas linhas parciais. Verificou-se que ocorre redução nos valores de atraso e consumo de potência nos circuitos multiplicadores, quando há uma redução significativa do número de linhas de somas de produtos parciais (um número igual ou maior a cinco linhas). Na próxima Seção são mostrados estudos de caso para os multiplicadores estudados neste trabalho. 68 6 ESTUDO DE CASO: MULTIPLICADORES ARRAY NA BASE 2m OTIMIZADOS APLICADOS A FILTROS DIGITAIS Nesta Seção, apresenta-se o uso das estruturas otimizadas dos multiplicadores array na base 2m em dois estudos de caso: filtros com resposta finita ao impulso (FIR) com coeficientes fixos e filtros FIR com coeficientes adaptativos. Para o filtro FIR com coeficientes adaptativos, será utilizado o algoritmo LMS (Least Mean Square) como estudo de caso. As implementações apresentadas nesta parte do trabalho foram descritas no formato BLIF e também em VHDL, conforme as metodologias discutidas na Seção 1.3.1. Estas estratégias foram utilizadas em função das arquiteturas disponíveis para os testes do uso dos multiplicadores. Para os filtros FIR de coeficientes fixos, utiliza-se o ambiente SIS e a ferramenta SLS para as estimativas de área, atraso e consumo de potência. Para o filtro FIR com coeficientes adaptativos, estes parâmetros são obtidos no nível FPGA na ferramenta Quartus II da Altera. São aplicados nos filtros FIR com coeficientes fixos e adaptativos, os circuitos multiplicadores otimizados m=2, m=4 e m=8 apresentados no capítulo 5. São realizadas comparações de desempenho dos filtros utilizando os multiplicadores otimizados e o multiplicador Booth Modificado, estado da arte em termos de consumo de potência. Os filtros de coeficientes fixos e coeficientes adaptativos representam arquiteturas de 16 bits. Os valores de consumo de potência para cada uma das arquiteturas são apresentados em função da energia consumida por cada amostra. Este parâmetro é dado de acordo com a Equação 6.1 (COSTA, 2002). Energia _ por _ amostra = (Pot.média ) × (nT ) n o _ de _ amostras (6.1) Na Equação 6.1, o parâmetro n corresponde ao número total de ciclos de relógio para o processamento de uma amostra. Para as arquiteturas apresentadas nesta parte do trabalho, utiliza-se um sinal aleatório com 10000 amostras Este número de amostras representa um bom compromisso para as estimativas de consumo de potência das arquiteturas, conforme mencionado anteriormente em (COSTA, 2002). O parâmetro T representa o período mínimo de relógio para simulação. A potência média é calculada 69 utilizando-se a ferramenta SLS a partir do valor do período T. Como o período utilizado é o mesmo para todas as arquiteturas. Dessa forma, este parâmetro pode ser suprimido da Equação 6.1, e esta pode ser reescrita da forma mostrada na Equação 6.2, que passa a representar o consumo de potência normalizada por amostra. O valor de período de relógio utilizado nas simulações é T=300ns. Este valor é o pior caso apresentado pelas arquiteturas. Para os barramentos de entrada e saída dos circuitos foi utilizado um valor de capacitância igual a 10fF, que corresponde ao menor valor associado ao fan-in de uma porta lógica. As máquinas de estado das arquiteturas seqüencial e semi-paralela dos filtros implementados apresentam valores reduzidos de potência normalizada por amostra, não tendo desta forma, contribuição significativa para o aumento de potência global nestas arquiteturas. Potência _ normalizada _ por _ amostra = (Pot.média ) × (n ) n o _ de _ amostras (6.2) 6.1 Filtros FIR com Coeficientes Fixos A operação de filtragem com resposta finita ao impulso (FIR) é realizada a partir do processo de convolução das amostras dos dados de entrada com a resposta ao impulso unitário. A saída y(n) de um filtro FIR de N-tap é dada pelo somatório dos pesos das ultimas N amostras de dados de entrada (Onde x(n) é a n-ésima amostra), conforme mostra a Equação 6.3. A estrutura de um filtro FIR na forma direta é mostrada na Figura 6.1. N −1 y (n) = ∑ h[i ]x[n − i ] i =0 (6.3) 70 Figura 6.1 - Exemplo de filtro FIR de 8 taps As implementações apresentadas neste trabalho têm como alvo arquiteturas de 16 bits para um filtro FIR de 8ª ordem na forma direta. Isto devido ao fato destas arquiteturas estarem disponíveis de trabalhos anteriores (COSTA, 2002), sendo desta forma, um bom estudo de caso à aplicação dos circuitos multiplicadores otimizados propostos neste trabalho. São apresentadas arquiteturas de filtros FIR totalmente seqüenciais e semiparalelas, ambas com a utilização de pipelinig (COS 2002c). 6.1.1 Aplicação dos Multiplicadores Array Otimizados em Arquiteturas Totalmente Seqüenciais A primeira implementação de filtro FIR com coeficientes fixos aborda a arquitetura totalmente seqüencial na forma direta, como mostrado na Figura 6.2. Os sinais de controle CLK, Reset e Load, q2, q1, q0 são provenientes da máquina de controle. Esta é omitida para a simplificação da Figura 6.2 Em uma implementação seqüencial, a idéia básica é reduzir os requisitos de hardware pela reutilização do hardware tanto quanto possível. Neste caso, uma unidade de controle é utilizada no sentido de introduzir um número de passos de controle e cada produto no filtro FIR é calculado sequencialmente e adicionado à soma acumulada no módulo acumulador. Neste trabalho, apresenta-se uma arquitetura seqüencial na forma pipelined que é representado por um circuito registrador presente entre a saída do multiplicador e a entrada do somador, como pode ser visto na Figura 6.2 Esta técnica acarreta na redução do consumo de potência pela redução da propagação da atividade de chaveamento (glitching) produzido pelo circuito multiplicador (COSTA, 2002). 71 Figura 6.2 - Parte operativa das implementações seqüenciais do filtro FIR. A Tabela 6.1 mostra os resultados de área, atraso e energia normalizada por amostra para os filtros FIR com os multiplicadores otimizados e multiplicador Booth Modificado. Tabela 6.1 -Resultados de área, atraso e energia normalizada por amostra para o filtro seqüencial Filtro com o Multiplicador: Área % Booth m=2 otimizado m=4 otimizado m=8 otimizado 6394 7288 7788 8458 --12,27 17,90 24,40 Período Mínimo de Relógio – T(ns) 105,74 96,55 89,99 88,47 % Energia Normalizada por Amostra % ---8,69 -14,90 -16,33 573,90 331,24 270,74 317,74 ---42,28 -52,82 -44,64 Como pode ser visto na Tabela 6.1, o filtro FIR seqüencial utilizando o circuito multiplicador Booth apresenta o menor valor de área entre as alternativas de circuitos analisados. Isto ocorre devido ao fato dos multiplicadores otimizados utilizarem mais portas lógicas nos módulos dedicados de multiplicação. Desta forma, o uso destes multiplicadores 72 faz com que os filtros FIR apresentem maiores valores de área como mostrado na Tabela 6.1. Em relação ao parâmetro de atraso, observa-se que os filtros com os multiplicadores array na base 2m são mais eficientes em relação ao filtro com o multiplicador Booth, como mostrado na Tabela 6.1. Outro ponto importante a ser observado é que com o aumento de m os valores de atraso são menores. Isto ocorre devido à redução do número de linhas de produtos parciais com o aumento de m, que reduz o caminho crítico destes circuitos multiplicadores. Valores significativos de redução do consumo de potência são obtidos nos filtros FIR com o uso dos circuitos utilizando os multiplicadores array, como pode ser visto na Tabela 6.1. Isto só confirma o fato de que os multiplicadores array otimizados apresentam uma menor quantidade de atividade de glitching em relação ao multiplicador Booth, o que representa uma grande redução em consumo de potência nestes multiplicadores. Desta forma, a utilização dos multiplicadores array nos filtros FIR representa uma boa alternativa para a redução do consumo de potência destes circuitos. Em particular, o filtro com o circuito multiplicador m=4 otimizado apresenta o melhor resultado em termos de redução do consumo de potência. Este aspecto reafirma os resultados obtidos e discutidos no capitulo 4, em que o este multiplicador de 16 bits apresenta um ponto ótimo para a redução do consumo de potência. Logo, o uso deste multiplicador no filtro FIR contribui para uma significativa redução do consumo de potência deste circuito. 6.1.2 Aplicação dos Multiplicadores Array Otimizados em Arquiteturas Semi - Paralelas Apesar da possibilidade de aumento de desempenho na arquitetura totalmente seqüencial pelo uso de pipelining, sua estrutura impõe uma restrição onde são necessários oito ciclos de relógio para o processamento de cada amostra. Por outro lado, as arquiteturas totalmente paralelas podem operar de forma mais rápida, mas ao custo de uma maior quantidade de área devido à maior quantidade de hardware utilizada. Com o intuito de possibilitar uma alternativa intermediária entre as implementações totalmente paralela e totalmente seqüencial, uma arquitetura semi-paralela pode ser construída, sendo que os 73 requisitos de hardware são duplicados em relação a estrutura seqüencial. A arquitetura semi-paralela tende a melhorar o desempenho do filtro em relação à arquitetura seqüencial pela duplicação do hardware, possibilitando que duas amostras sejam processadas ao mesmo tempo. A parte operativa da arquitetura semi-paralela é mostrada Figura 6.3. Assim com na arquitetura seqüencial, os sinais de clk, reset, load, q0 e q1 são provenientes da máquina de controle, que é omitida para a simplificação da Figura 6.3. Na arquitetura semi-paralela, duas amostras podem ser processadas simultaneamente, aumentando o desempenho do filtro FIR devido ao fato de que o hardware pode operar na metade dos ciclos de relógio. Desta forma, na arquitetura semi-paralela há o processamento de uma nova amostra a cada quatro ciclos de relógio. Figura 6.3 - Parte operativa das implementações semi-paralelas do filtro FIR. Na forma pipelined são utilizados dois registradores nas saídas dos circuitos multiplicadores, como mostra a Figura 6.3. Nesta figura deve ser observado que os coeficientes são compartilhados entre dois circuitos multiplexadores, sendo cada grupo de quatro coeficientes compartilhados por cada um destes circuitos. 74 A Tabela 6.2 apresenta resultados de área, atraso e energia normalizada por amostra para filtros FIR semi-paralelos utilizando os multiplicadores otimizados propostos neste trabalho e o multiplicador Booth Modificado. Tabela 6.2 - Resultados de área, atraso e energia normalizada por amostra para o filtro semi-paralelo Filtro com o Multiplicador: Área % Booth m=2 otimizado m=4 otimizado m=8 otimizado 10539 12327 13327 14667 --14,50 20,92 28,14 Período Mínimo de Relógio – T(ns) 104,32 94,96 88,38 88,19 % ---8,97 -15,28 -15,46 Energia Normalizada por Amostra 483,72 265,94 227,42 283,00 % -45,02 -52,98 -41,49 Na arquitetura semi-paralela são utilizados dois circuitos multiplicadores, pois os recursos de hardware são duplicados em relação a uma arquitetura totalmente seqüencial. Logo, os resultados de área, atraso e potência para estes filtros seguem a mesma tendência dos resultados obtidos com os filtros FIR totalmente seqüenciais. Como pode ser observado na Tabela 6.2, apesar dos filtros com os multiplicadores otimizados apresentarem maiores valores de área, estes circuitos apresentam menores valores de atraso e significativos menores valores de consumo de potência comparado com os filtros que utilizam o multiplicador Booth. Uma vez mais se observa que apesar do filtro com o multiplicador m=8 apresentar o menor valor de atraso, o filtro com m=4 é o que apresenta o menor valor de consumo de potência. Logo, na relação atraso versus potência, o filtro com m=4 é o que se apresenta como a melhor alternativa, pois além de apresentar um reduzido consumo de potência, os filtros com multiplicadores otimizados m=4 e m=8 apresentam praticamente os mesmos valores de atraso, como pode ser visto na Tabela 6.2. Deve-se observar que pelo fato de apresentarem praticamente o mesmo caminho crítico, dado pelo multiplexador e pelo circuito multiplicador, a arquitetura totalmente seqüencial e semi-paralela apresentam praticamente os mesmos valores de atraso, como pode ser comparado nas Tabelas 6.1 e 6.2. Entretanto, os filtros semi-paralelos apresentam menores valores de consumo de potência em relação aos filtros seqüenciais, como pode ser comparado nas Tabelas 6.1 e 6.2. Isto se explica pelo fato de ser possível reduzir mais a atividade de glitching, que tem um impacto maior na arquitetura semi-paralela, pois esta 75 utiliza o dobro do número de circuitos multiplicadores em relação à arquitetura totalmente seqüencial. De acordo com os resultados mostrados nesta Seção, conclui-se que a utilização de circuitos multiplicadores array otimizados é uma boa opção para filtros FIR seqüencial ou semi-paralelo se os requerimentos do projeto forem focados para o aumento de desempenho e a redução do consumo de potência. 6.2 Arquitetura de Filtro FIR com Coeficientes Adaptativos Existem diversas aplicações práticas que não podem ser resolvidas com sucesso utilizando filtros com coeficientes fixos, ou pelo fato de não se ter informação suficiente para projetar o filtro com coeficientes fixos ou pelo fato dos critérios do projeto mudarem durante a operação. Uma grande parte destas aplicações pode ser resolvida por um tipo especial de algoritmo chamado de algoritmo adaptativo. A característica principal dos algoritmos adaptativos, que os distingue dos demais, é que estes podem modificar sua resposta automaticamente para melhorar seu desempenho durante a operação (MANOLAKIS, 2005). Os sistemas adaptativos são formados por três módulos, conforme se verifica na Figura 6.4. Figura 6.4 -Elementos de um filtro FIR com coeficientes adaptativos 76 De acordo com a Figura 6.4, observa-se que a estrutura do filtro produz a saída a partir de medições do sinal de entrada. A estrutura é fixa e seus parâmetros são ajustados pelo algoritmo adaptativo. A saída do filtro adaptativo e a resposta desejada são processadas segundo um critério de desempenho, de modo a avaliar a qualidade do resultado em relação aos requisitos da aplicação. O algoritmo adaptativo utiliza o valor do critério de desempenho, ou alguma função dele, e medições da entrada e da resposta desejada para modificar os parâmetros do filtro, com o objetivo de melhorar seu desempenho. Neste trabalho, utiliza-se o hardware dedicado do algoritmo adaptativo LMS como estudo de caso para aplicação dos multiplicadores otimizados propostos. 6.2.1 Algoritmo Adaptativo LMS (Least Mean Square) O algoritmo adaptativo LMS é caracterizado pela sua simplicidade e facilidade de implementação. O algoritmo LMS é definido pelas Equações 6.3, 6.4 e 6.5. e( n ) = d ( n ) − y ( n ) ω ( n + 1) = ω ( n ) + µ e ( n ) x ( n ) (6.4) (6.5) A Equação 6.4 , define o sinal de erro entre o sinal desejado d (n) e a saída do filtro y (n) . A Expressão 6.5 é a equação de ajuste dos coeficientes dos filtros adaptativo, onde µ é o passo de adaptação e x ( n ) é o vetor de amostras do sinal de entrada do processo. O algoritmo LMS pode ser implementado sem utilizar operações de média, divisão, raiz, ou diferenciação, e é elegante em sua simplicidade e eficiência (MANOLAKIS, 2006), possuindo somente operações de somas, subtrações e multiplicações, como pode ser observado nas Equações 6.3, 6.4 e 6.5. Devido a este fato, utiliza-se a arquitetura dedicada para este algoritmo proposta em (ITTURRIET, 2008) como estudo de caso para aplicação dos multiplicadores array otimizados propostos neste trabalho. 77 6.2.2 Aplicação dos Multiplicadores Array Otimizados em Arquitetura Dedicada para o Algoritmo LMS A arquitetura proposta em (ITTURRIET, 2008) utiliza um hardware ponto fixo dedicado, para o algoritmo adaptativo LMS. Esta arquitetura foi implementada em linguagem VHDL. Logo, os resultados de área, atraso e consumo de potência apresentados neste trabalho são voltadas à síntese em FPGA. A arquitetura dedicada para o algoritmo LMS é mostrada na Figura 6.5. Figura 6.5 - Arquitetura do hardware dedicado para o algoritmo adaptativo LMS (ITTURRIET, 2008) Na Figura 6.5, a estrutura do hardware é composta por operadores aritméticos, além de blocos multiplexadores, registradores com sinal de carga, blocos de normalização e truncamento. Este circuito foi implementado para dois coeficientes. Logo, são utilizados dois circuitos multiplicadores para o processamento das amostras, como pode ser observado 78 nos blocos de multiplicação X1 e X2 da Figura 6.5. Nestes módulos são aplicados os multiplicadores array otimizados propostos neste trabalho. Pelo fato de filtro ser descrito em VHDL, há a necessidade da conversão dos multiplicadores da linguagem de descrição textual BLIF para VHDL. Isto é realizado de acordo com a metodologia apresentada na Seção 1.3.1. A Tabela 6.3 mostra os resultados do filtro adaptativo LMS utilizando as diferentes arquiteturas dos circuitos multiplicadores estudados neste trabalho e o multiplicador Booth Modificado. Os resultados obtidos são voltados para a síntese FPGA através da ferramenta Quartus II da fabricante Altera. São utilizadas 10000 amostras de um sinal aleatório nas entradas do filtro. São necessários de 7 ciclos de relógio para a obtenção do resultado na saída do filtro para cada amostra. Os resultados em área são apresentados em função do número de elementos lógicos (EL) necessários para implementação do circuito no componente FPGA. O atraso é fornecido através do valor do caminho critico do circuito, e o consumo de potência é dado em energia normalizada por amostra de acordo com a Equação 6.2. Tabela 6.3 - Valores de área, atraso e consumo de potência da arquitetura para o algoritmo LMS Alternativas Área(EL) % Booth m=2 otimizado m=4 otimizado m=8 otimizado 1088 1590 1775 1905 --31,57 38,70 42,89 Período Mínimo de Relógio – T (ns) 43,687 42,441 35,975 34,363 % ---2,85 -17,65 -21,34 Energia Normalizada por Amostra 352,28 300,06 289,77 297,17 % --14,83 -17,75 -15,64 Diante dos valores apresentados para o hardware de ponto fixo para algoritmo LMS apresentados na Tabela 6.3, verifica-se que as alternativas para o filtro com coeficientes adaptativos que utilizam multiplicadores array na base 2m apresentam um maior número de elementos lógicos. Isto segue a mesma linha de resultados mostrada na Seção anterior para os filtros FIR. De fato, isto se explica pelo fato do hardware para o algoritmo LMS representar um filtro FIR com coeficientes adaptativos. Logo, este aspecto deve ser estendido aos valores de atraso e consumo de potência. Observa-se então, que assim como para os filtros FIR de coeficientes fixos, os filtros FIR com coeficientes adaptativos 79 apresentam menores valores de atraso e consumo de potência quando do uso dos multiplicadores array otimizados propostos neste trabalho, como pode ser observado na Tabela 6.3. Em particular, o filtro com o multiplicador array otimizado m=8 é o mais indicado para a métrica de desempenho e o filtro com o multiplicador array m=4 é o mais indicado par aplicações que requeiram reduzido consumo de potência. 6.3 Sumário Neste capítulo foi apresentado o uso das estruturas otimizadas dos multiplicadores array na base 2m em dois estudos de caso: filtros com resposta finita ao impulso (FIR) com coeficientes fixos e filtros FIR com coeficientes adaptativos. Os resultados obtidos mostraram a eficiência dos filtros utilizando os multiplicadores com blocos de multiplicação dedicados, com menores valores de atraso e potência quando comparados com os filtros utilizando multiplicador Booth. A seguir são apresentadas as principais conclusões deste trabalho e idéias para trabalhos futuros. 80 7 CONCLUSÕES Neste trabalho foram apresentadas técnicas para a otimização do multiplicador array na base 2m. Foram utilizadas técnicas para a otimização dos blocos de multiplicação dedicados presentes nos operandos da estrutura array do multiplicador na base 2m. Estas técnicas foram baseadas no uso de somadores CSA e blocos de multiplicação mais simples na base 4 para a composição de blocos de bases maiores de operação (de 8 – m=3 até 256 – m=8). Estes blocos foram aplicados em multiplicadores array de 16, 32 e 64 bits. Estes multiplicadores foram gerados por uma ferramenta de geração automática de multiplicadores array – RAMAGT, desenvolvida no âmbito deste trabalho. Foram realizadas comparações com os multiplicadores que usavam blocos de multiplicação originais, ou seja, os blocos obtidos a partir de descrições PLA e síntese automática com a ferramenta SIS. Os resultados mostraram que os multiplicadores com blocos otimizados são mais eficientes com significativas reduções de valores de área, atraso e consumo de potência. Isto devido à estrutura mais simples e regular dos blocos de multiplicação otimizados. Os circuitos multiplicadores com blocos de multiplicação otimizados foram comparados com o estado da arte em termos de redução do consumo de potência (multiplicador Booth Modificado), e os resultados mostraram que, apesar de apresentarem maiores valores de área, os multiplicadores com blocos de multiplicação dedicados apresentam menores valores de atraso e potência, devido a maior regularidade e estrutura mais simples dos multiplicadores array com estes blocos dedicados otimizados. O estudo de somadores compressores de diferentes tamanhos para a soma simultânea de vários operandos também foi alvo deste trabalho. Foi realizado um estudo da aplicação de circuitos somadores compressores 4:2, 8:2 e 16:2 nos multiplicadores array de 16, 32 e 64 bits e os resultados mostraram que para multiplicadores de 32 e 64 bits há possibilidade de reduções de atraso e consumo de potência, quando comparados com multiplicadores utilizando somadores do tipo RCA. Os circuitos multiplicadores com blocos de multiplicação otimizados foram utilizados em arquiteturas dedicadas de filtros digitais. Arquiteturas dedicadas de filtros com coeficientes fixos e coeficientes adaptativos foram utilizadas com estudo de caso para 81 o teste dos multiplicadores propostos no âmbito deste trabalho. Foram feitas comparações com os filtros usando o multiplicador Booth modificado e os resultados mostraram a eficiência dos filtros utilizando os multiplicadores com blocos de multiplicação dedicados, com menores valores de atraso e potência quando comparados com os filtros utilizando multiplicador Booth. 7.1 Trabalhos futuros Os resultados obtidos neste trabalho abrem a perspectiva da continuidade deste trabalho a partir de novas técnicas que possam ser aplicadas ao multiplicador array na base 2m, assim como o aprofundamento de comparações deste multiplicador com outras arquitetura presentes na literatura. Desta forma, para a continuidade deste trabalho, as seguintes idéias podem ser exploradas como trabalhos futuros: • Aplicação das diferentes técnicas de otimização dos blocos de multiplicação apresentadas no capítulo 5 a outras codificações de operandos (ex. codificação Híbrida); • Realização de uma análise dos circuitos multiplicadores em outras ferramentas de simulação comerciais utilizando diferentes tecnologias. (ex. Mentor Graphics, Cadence, etc.); • Ampliação da exploração do uso compressores nas linhas de somas de produtos parciais do multiplicador array na base 2m. Em particular, investigar a estrutura do compressor 5:2 presente na literatura;. • Aplicação das otimizações a outros blocos de multiplicação dedicados com bases de operação maiores do que 256. Tentar observar o limite de ganhos em desempenho e redução de consumo de potência que pode ser obtido pelos multiplicadores array usando estes blocos; • Ampliação da biblioteca de circuitos digitais gerados pela ferramenta RAMAGT, como por exemplo circuitos divisores, filtros digitais, etc. • Analise do uso dos multiplicadores otimizados em filtros de maiores tamanhos de operandos (32 e 64 bits) e maior número de taps; 82 • Ampliação do uso dos circuitos multiplicadores otimizados em outras arquiteturas dedicadas (Transformada Rápida de Fourier, por exemplo); • Prototipação de alguns circuitos multiplicadores otimizados no nível físico. 83 REFERÊNCIAS ALTERA, Corporation. Programmable Logic Device Family. Data Sheet, 2002 ALTERA. Quartus II Version 6.0 Handbook. [S.l.]: Altera Inc., 2006. v.I. BAUGH, C. R.; WOOLEY, B. A.; A two’s complement Parallel Array Multiplications Algorithm. IEEE Trans. Computers, vol. C-22, No. 1-2. December 1973, p. 1045-1047. BERKELEY, SIS: Sequential Interactive Synthesis. University of Califórnia. At http://embedded.eecs.berkeley.edu/ . 2007 BOOTH, A. A Signed Binary Multiplication Technique. Journal of Mechanics and Aplied Mathematics, [S.l.], n.4, p.236-240, June 1951. CALLAWAY, T.; SWARTZLANDER, E. Optimizing multipliers for WSI. In. Annual IEEE International Conference on Wafer Scale Integration. 1993 CHANDRAKASAN, A.; BRODERSEN, R. Low Power Digital CMOS Design. Kluwer Academic Publishers, 1995. CHERKAUER, B.; FRIEDMAN, E. A Hybrid Radix-4/Radix-8 Low Power, High Speed Multiplier Architecture for Wide Bit Widths. In: IEEE INTERNATIONAL SYMPOSIUM ON CIRCUITS AND SYSTEMS, ISCAS, 1996. Papers. Piscataway: IEEE, 1996. v.4, p.53-56. COSTA, E. A. C. da. Operadores Aritméticos de Baixo Consumo para Arquiteturas de Circuitos DSP. 2002. Tese (Doutorado em Ciência da Computação) — Programa de PósGraduação em Computação - UFRGS, Porto Alegre, RS. COSTA, J. Monteiro, and S. Bampi. A New Architecture for Signed Radix-2m Pure Array Multipliers. In IEEE International Conference on Computer Design, pages 112-117, 2002a. COSTA, E.; MONTEIRO, J.; BAMPI, S. A New Architecture for 2’s Complement Gray Enconded Array Multiplier. In: SYMPOSIUM ON INTEGRATED CIRCUITS AND SYSTEMS DESIGN, SBCCI, 15.,Sept. 2002b. Proceedings.. Artigo aceito. COSTA, E.; MONTEIRO,. J.; BAMPI, S. Power Optimization Using Coding Methods on Arithmetic Operators. In: IEEE INTERNATIONAL SYMPOSIUM ON SIGNALS CIRCUITS AND SYSTEMS, SCS, 2001. Iasi. Proceedings… Piscataway: IEEE CAS Society, 2001. p. 505-508c. 84 FAVALLI, M.; Analysis of Glitch Power Dissipation in CMOS ICs. In: INTERNATIONAL SYMPOSIUM ON LOW POWER ELECTRONICS AND DESIGN, ISLPED, 1995, Dana Point. Proceedings… New York: ACM, 1995. p. 123-128. GALLAGHER, W. L.; SWARTZLANDER, E. E. Jr., High Radix Booth Multipliers Using Reduced Area Adder, In. Signals, Systems and Computes Conference, 1994. GENDEREN, A. SLS: an efficient switch-level timing simulator using min-max voltage waveforms. In: INTERNATIONAL CONFERENCE ON VERY LARGE SCALE INTEGRATION, VLSI, 1989, Munich. Proceedings… New York: ACM, 1989. p 79-88. GOLDOVSKY, A. et al. Design and Implementation of a 16 by 16 Low-Power Two’s Complement Multiplier. In: IEEE INTERNATIONAL SYMPOSIUM ON CIRCUITS AND SYSTEMS, ISCAS, 2000. Papers. Piscataway: IEEE, 2000. v.5, p.345-348. GOPINEEDI, D. P.; Himannshu T.; Srinivas M. B. and Arabnaia H. R. Novel and efficient 4: 2 and 5: 2 Compressors with Minimum Number of Transistors Designed for LowPower Operations, Proceedings of the 2006 International Conference on Embedded Systems & Applications, Las Vegas, Nevada, June 26-29, 2006 GOWAN, M. K.; Biro, L. L.; Jackson, D. B. Power Considerations in the Design of the Alpha 21264 Microprocessor, Design Automation Conference, p. 726 – 731, Jun. 1998. HAYKIN, S. Adaptive Filter Theory, 4. ed. Englewood Cliffs, NJ: Prentice-Hall, 2002. HWANG, K. Computer Arithmetic: Principles, Architecture and Design. New York: John Wiley and Sons, 1979. IMPERIAL, College of Londom, http://www.ee.imperial.ac.uk, 2008 Adder Circuits – Lecture 13 – At. ITTURRIET, F. P. Implementação de um Hardware Ponto Fixo para o Algoritmo LMS. Trabalho Final de Conclusão de Curso. UCPel. 2008 JACCOTTET, D. P; ROSCHILD, J. M.; PIEPER, L. Z; COSTA, E.; ALMEIDA, S. RAMAGT – Radix 2m Array Multipliers Automatic Generation Tool. XVII SIM – South Symposium on Microelectronics. 2008 JIANG, Yingtao; A Novel Multiplexer-Based Low-Power Full Adder, IEEE Transactions on Circuits and Systems – II, vol. 51, no. 7, July 2004. KHATER, I.; BELLAOUAR, A.; ELMASRY, M. Circuit Techniques for CMOS LowPower High-Performace Multipliers. IEEE Journal of Solid-State Circuits, New York, v. 31, n.10, p.1535-1546, Oct. 1996. 85 KIM T., W. Jao and S Tjiang. Arithmetic Optimization using Carry-Save adders. In 35th Design Automation Conference, pages 433-438,1998. KIM, C.H.; ROY, K. Dynamic VTH Scaling Scheme for Active Leakage Power Reduction, Design, Automation and Test in Europe Conference and Exhibition, Proceedings, Paris – France p. 163 – 167, Mar. 2002. KIM, N. S.; Blaauw, D.; Mudge, T. Leakage Power Optimization Techniques for Ultra Deep Sub-Micron Multi-Level Caches, International Conference on Computer Aided Design ICCAD-2003. p. 627 – 632, Nov. 2003. KOCH, P. “C Scripting Language –Reference Manual http://csl.sourceforge.net/csldoc/index.htm Last Revision: 2002 V. 4.4.0”. At LU, MI; Arithmetic and Logic in Computer Systems. 2004. John Wiley & Sons, Inc. New Jersey. USA MANOLAKIS, D. G. Statistical and adaptive signal processing. Norwood: Artech House, 2005. MARTIN, Kenneth W. Digital Integrated Circuit Design, New York, New York – USA: Oxford University Press, 2000. MILLAR, B.; MADRID, P.; SWARTZLANDER, E. A Fast Hybrid Multiplier Combining Booth and Wallace/DADDA Algorithms. In: MIDWEST SIMPOSIUM ON CIRCUITS AND SYSTEMS, 35., 1992, Washington. Proceedings… Piscataway: IEEE CAS Society, 1992. v.1, p.158-165. NAJM, F.N. A Survey of Power Estimation Techniques in VLSI Circuits, IEEE Transactions on Large Scale Integration (VLSI) Systems, Urbana – IL, USA, p. 446 – 455, Dec. 1994. NAKAMURA, S. Algorithm for Iterative Array Multiplication. IEEE Transactions on Computers, Washington, v.35, n.8, p. 713-719, Aug. 1986. OKLOBDZIJA, V. G.; D. Villeger; Liu S. S.; A Method for Speed Optimized Partial ProductReduction and Generation of Fast Parallel Multipliers Using and Alghoritmic Approach, IEEE Transaction on Computers, Vol. 45, No. 3, March 1996. OLIVEIRA, L. L.; Prototipação e Análise de Circuitos Multiplicadores Array de Baixo Consumo. Dissertação de Mestrado. PPGEE. UFSM, RS. 2005 OUSTERHOUT, J. K. “Scripting: Higher Level Programming for the 21st Century” . IEEE Computer Magazine. March 1998 PARHAMI, BEHROOZ. Computer Arithmetic: algorithms and hardware designs. Oxford University Press. 1999. 86 PEKMESTZI, K. Multiplexer-Base Array Multipliers. IEEE Transactions on Computes, New York, v. 48, n.1, p.15-23, Jan 1999. PENZES, P. L.; Martin, A. J. An energy Estimation Method for Asynchronous Circuits with Application to an Asynchronous Microprocessor, Design, Automation and Test in Europe Conference and Exhibition, Paris, France, p. 640 – 647, March 2002. PIEPER, L. Z.; Multiplicadores Array de Baixo Consumo, Trabalho Individual. PPGINF-UCPEL. 2007 PIEPER, L. ; COSTA, E; ALMEIDA, S.; BAMPI, S.; MONTEIRO, J. Efficient Dedicated Structures for the Radix-16 Multiplication. Iberchip. XIV International Workshop. México. 2008. POPPEN, F. Low Power Design Guide. Oldenburg: Oldenburger Forschungs-Und Entwicklungsinstitut Fur Informatik-Werkzeuge Und-Systeme-OFFIS, 2000. PRASAD, K.; Parhi K. K.; Low-power 4-2 and 5-2 compressors, in Proc. of the 35th Asilomar Conference on Signals, Systems and Computers, vol. I, pp. 129-133, 2001 RABAEY, Jan M. Digital Integrated Circuits – A Design Perspective, USA, Prentice Hall, 1996. RADHAKRISHNAN, D.; Preethy A.P.; Low Power CMOS Pass Logic 4-2 Compressor for High-Speed Multiplication. Circuits and Systems . Proceedings of the 43rd IEEE Midwest Symposium on Volume 3, Issue , 2000 Page(s):1296 - 1298 vol.3 RUSHTON, Andrew, VHDL for Logic Synthesis – Second Edition, John Wiley & Sons, England, 1998. SAM, H.; GUPTA, A. A Generalized Multbit Recoding of Two’s Complement Binary Numbers and Its Proof with Application in Multiplier Implementations. IEEE Transactions on Computers, New York, v.39, n.8, p.1006-1015, July 1990. SEIDEL, P.; MCFEARIN, L.; MATULA, D. Binary Multiplication Radix-32 and Radix256. In: SIMPOSIUM ON COMPUTER ARITHMETIC, 15., 2001. Proceedings… Los Alamitos: IEEE Computer Society, 2001. p.23-32. SENTOVICH, E. et al. SIS: a System for Sequential Circuit Synthesis. Berkeley: University of California, 1992. SHAH, S.; Al-Khalili, A.J.; Al-Khalili, D. Comparison of 32-bit Multipliers for Various Performance Measures, The 12th International Conference on Microelectronics, November 2000. 87 SHEN, A.; Ghosh, A.; Devadas, S.; Keutzer, K. On Average Power Dissipation and Random Pattern Testability of CMOS Combinational Logic Networks, International Conference on Computer-Aided Design ICCAD-92, Santa Clara, CA – USA, p. 402 – 407, Nov. 1992. TUDELFT, University of Technology. SoG CAD technologies At http://www.tudelft.nl/ . 2008 WALLACE, C. A Sugestion for Fast Multiplier. IEEE Transactions on Eletronic Computes, [S.l.], v.13, p. 14-17, Feb. 1964. WANG, Y. ; JIANG, Y.; SHA, E. “On Area-Efficient Low Power Array Multipliers. In. IEEE International Conference on Electronics. Circuits and Systems, ICECS. 2001 WEINBERGER, A.; 4:2 Carry-Save Adder Module, IBM Technical Disclosure Bulletin.,Vol.23, January 1981. WESTE, N. H. E.; ESHRAGHIAN, K. Principles of CMOS VLSI Design – A Systems Perspective. Santa Clara, CA – USA: AT&T, 1994. WILLIAMS, T.W. DENNARD, R.H. KAPUR, R. MERCER, M.R. MALY, M. Iddq test: sensitivity analysis of scaling, Test Conference, Washington, DC – USA, p. 786 – 792, Oct. 1996. YU, Z.; WASSERMAN, L.; WILSON, A. A Painless Way to Reduce Power by Over 18% in Booth-Enconded Carry-Save Array Multipliers for DSP. In: WORKSHOP ON SIGNAL PROCESSING SYSTEMS, SIPS, 2000, Lafayette. Proceedings… Piscataway: IEEE Signal Processing Society, 2000. p. 571-580. ZIMMERMANN, R. Lectures notes on : Computer Arithmetic: Principles, Architectures, and VLSI Design. Integrated Systems Laboratory. Swiss Federal Institute of Technology (ETH). 1999 88 ANEXO I – Exemplo de descrição textual de um multiplicador Este anexo mostra um exemplo de descrição textual em BLIF de um circuito multiplicador de 16 bits, que opera na base 4 (m=2). A descrição foi gerada automaticamente pela ferramenta RAMAGT. -- Multiplicador 16 bits m=2 .model mulbin16m2orig .inputs A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 B15 B14 B13 B12 B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 .outputs S31 S30 S29 S28 S27 S26 S25 S24 S23 S22 S21 S20 S19 S18 S17 S16 S15 S14 S13 S12 S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0 .subckt operando1 A1=A1 A0=A0 B15=B15 B14=B14 B13=B13 B12=B12 B11=B11 B10=B10 B9=B9 B8=B8 B7=B7 B6=B6 B5=B5 B4=B4 B3=B3 B2=B2 B1=B1 B0=B0 S17=S0E15 S16=S0E14 S15=S0E13 S14=S0E12 S13=S0E11 S12=S0E10 S11=S0E9 S10=S0E8 S9=S0E7 S8=S0E6 S7=S0E5 S6=S0E4 S5=S0E3 S4=S0E2 S3=S0E1 S2=S0E0 S1=S1 S0=S0 .subckt operando1 A1=A3 A0=A2 B15=B15 B14=B14 B13=B13 B12=B12 B11=B11 B10=B10 B9=B9 B8=B8 B7=B7 B6=B6 B5=B5 B4=B4 B3=B3 B2=B2 B1=B1 B0=B0 S17=S1E17 S16=S1E16 S15=S1E15 S14=S1E14 S13=S1E13 S12=S1E12 S11=S1E11 S10=S1E10 S9=S1E9 S8=S1E8 S7=S1E7 S6=S1E6 S5=S1E5 S4=S1E4 S3=S1E3 S2=S1E2 S1=S1E1 S0=S1E0 .subckt operando1 A1=A5 A0=A4 B15=B15 B14=B14 B13=B13 B12=B12 B11=B11 B10=B10 B9=B9 B8=B8 B7=B7 B6=B6 B5=B5 B4=B4 B3=B3 B2=B2 B1=B1 B0=B0 S17=S2E17 S16=S2E16 S15=S2E15 S14=S2E14 S13=S2E13 S12=S2E12 S11=S2E11 S10=S2E10 S9=S2E9 S8=S2E8 S7=S2E7 S6=S2E6 S5=S2E5 S4=S2E4 S3=S2E3 S2=S2E2 S1=S2E1 S0=S2E0 .subckt operando1 A1=A7 A0=A6 B15=B15 B14=B14 B13=B13 B12=B12 B11=B11 B10=B10 B9=B9 B8=B8 B7=B7 B6=B6 B5=B5 B4=B4 B3=B3 B2=B2 B1=B1 B0=B0 S17=S3E17 S16=S3E16 S15=S3E15 S14=S3E14 S13=S3E13 S12=S3E12 S11=S3E11 S10=S3E10 S9=S3E9 S8=S3E8 S7=S3E7 S6=S3E6 S5=S3E5 S4=S3E4 S3=S3E3 S2=S3E2 S1=S3E1 S0=S3E0 .subckt operando1 A1=A9 A0=A8 B15=B15 B14=B14 B13=B13 B12=B12 B11=B11 B10=B10 B9=B9 B8=B8 B7=B7 B6=B6 B5=B5 B4=B4 B3=B3 B2=B2 B1=B1 B0=B0 S17=S4E17 S16=S4E16 S15=S4E15 S14=S4E14 S13=S4E13 S12=S4E12 S11=S4E11 S10=S4E10 S9=S4E9 S8=S4E8 S7=S4E7 S6=S4E6 S5=S4E5 S4=S4E4 S3=S4E3 S2=S4E2 S1=S4E1 S0=S4E0 .subckt operando1 A1=A11 A0=A10 B15=B15 B14=B14 B13=B13 B12=B12 B11=B11 B10=B10 B9=B9 B8=B8 B7=B7 B6=B6 B5=B5 B4=B4 B3=B3 B2=B2 B1=B1 B0=B0 S17=S5E17 S16=S5E16 S15=S5E15 S14=S5E14 S13=S5E13 S12=S5E12 S11=S5E11 S10=S5E10 S9=S5E9 S8=S5E8 S7=S5E7 S6=S5E6 S5=S5E5 S4=S5E4 S3=S5E3 S2=S5E2 S1=S5E1 S0=S5E0 .subckt operando1 A1=A13 A0=A12 B15=B15 B14=B14 B13=B13 B12=B12 B11=B11 B10=B10 B9=B9 B8=B8 B7=B7 B6=B6 B5=B5 B4=B4 B3=B3 B2=B2 B1=B1 B0=B0 S17=S6E17 S16=S6E16 S15=S6E15 S14=S6E14 S13=S6E13 S12=S6E12 S11=S6E11 S10=S6E10 S9=S6E9 S8=S6E8 S7=S6E7 S6=S6E6 S5=S6E5 S4=S6E4 S3=S6E3 S2=S6E2 S1=S6E1 S0=S6E0 .subckt operando2 A1=A15 A0=A14 B15=B15 B14=B14 B13=B13 B12=B12 B11=B11 B10=B10 B9=B9 B8=B8 B7=B7 B6=B6 B5=B5 B4=B4 B3=B3 B2=B2 B1=B1 B0=B0 S17=S7E17 S16=S7E16 S15=S7E15 S14=S7E14 S13=S7E13 S12=S7E12 S11=S7E11 S10=S7E10 S9=S7E9 S8=S7E8 S7=S7E7 S6=S7E6 S5=S7E5 S4=S7E4 S3=S7E3 S2=S7E2 S1=S7E1 S0=S7E0 .subckt halfadder_2Bits A1=S0E1 A0=S0E0 B1=S1E1 B0=S1E0 COUT=COUT0E0 S1=S3 S0=S2 .subckt fulladder_2Bits CIN=COUT0E0 A1=S0E3 A0=S0E2 B1=S1E3 B0=S1E2 COUT=COUT0E1 S1=F0E1 S0=F0E0 .subckt fulladder_2Bits CIN=COUT0E1 A1=S0E5 A0=S0E4 B1=S1E5 B0=S1E4 COUT=COUT0E2 S1=F0E3 S0=F0E2 .subckt fulladder_2Bits CIN=COUT0E2 A1=S0E7 A0=S0E6 B1=S1E7 B0=S1E6 COUT=COUT0E3 S1=F0E5 S0=F0E4 .subckt fulladder_2Bits CIN=COUT0E3 A1=S0E9 A0=S0E8 B1=S1E9 B0=S1E8 COUT=COUT0E4 S1=F0E7 S0=F0E6 .subckt fulladder_2Bits CIN=COUT0E4 A1=S0E11 A0=S0E10 B1=S1E11 B0=S1E10 COUT=COUT0E5 S1=F0E9 S0=F0E8 .subckt fulladder_2Bits CIN=COUT0E5 A1=S0E13 A0=S0E12 B1=S1E13 B0=S1E12 COUT=COUT0E6 S1=F0E11 S0=F0E10 .subckt fulladder_2Bits CIN=COUT0E6 A1=S0E15 A0=S0E14 B1=S1E15 B0=S1E14 COUT=COUT0E7 S1=F0E13 S0=F0E12 .subckt fulladder_n++_2Bits CIN=COUT0E7 A1=S0E15 A0=S0E15 B1=S1E17 B0=S1E16 S1=F0E15 S0=F0E14 .subckt halfadder_2Bits A1=F0E1 A0=F0E0 B1=S2E1 B0=S2E0 COUT=COUT1E0 S1=S5 S0=S4 .subckt fulladder_2Bits CIN=COUT1E0 A1=F0E3 A0=F0E2 B1=S2E3 B0=S2E2 COUT=COUT1E1 S1=F1E1 S0=F1E0 .subckt fulladder_2Bits CIN=COUT1E1 A1=F0E5 A0=F0E4 B1=S2E5 B0=S2E4 COUT=COUT1E2 S1=F1E3 S0=F1E2 .subckt fulladder_2Bits CIN=COUT1E2 A1=F0E7 A0=F0E6 B1=S2E7 B0=S2E6 COUT=COUT1E3 S1=F1E5 S0=F1E4 .subckt fulladder_2Bits CIN=COUT1E3 A1=F0E9 A0=F0E8 B1=S2E9 B0=S2E8 COUT=COUT1E4 S1=F1E7 S0=F1E6 .subckt fulladder_2Bits CIN=COUT1E4 A1=F0E11 A0=F0E10 B1=S2E11 B0=S2E10 COUT=COUT1E5 S1=F1E9 S0=F1E8 .subckt fulladder_2Bits CIN=COUT1E5 A1=F0E13 A0=F0E12 B1=S2E13 B0=S2E12 COUT=COUT1E6 S1=F1E11 S0=F1E10 .subckt fulladder_2Bits CIN=COUT1E6 A1=F0E15 A0=F0E14 B1=S2E15 B0=S2E14 COUT=COUT1E7 S1=F1E13 S0=F1E12 .subckt fulladder_n++_2Bits CIN=COUT1E7 A1=F0E14 A0=F0E14 B1=S2E17 B0=S2E16 S1=F1E15 S0=F1E14 .subckt halfadder_2Bits A1=F1E1 A0=F1E0 B1=S3E1 B0=S3E0 COUT=COUT2E0 S1=S7 S0=S6 .subckt fulladder_2Bits CIN=COUT2E0 A1=F1E3 A0=F1E2 B1=S3E3 B0=S3E2 COUT=COUT2E1 S1=F2E1 S0=F2E0 89 .subckt fulladder_2Bits CIN=COUT2E1 A1=F1E5 A0=F1E4 B1=S3E5 B0=S3E4 COUT=COUT2E2 S1=F2E3 S0=F2E2 .subckt fulladder_2Bits CIN=COUT2E2 A1=F1E7 A0=F1E6 B1=S3E7 B0=S3E6 COUT=COUT2E3 S1=F2E5 S0=F2E4 .subckt fulladder_2Bits CIN=COUT2E3 A1=F1E9 A0=F1E8 B1=S3E9 B0=S3E8 COUT=COUT2E4 S1=F2E7 S0=F2E6 .subckt fulladder_2Bits CIN=COUT2E4 A1=F1E11 A0=F1E10 B1=S3E11 B0=S3E10 COUT=COUT2E5 S1=F2E9 S0=F2E8 .subckt fulladder_2Bits CIN=COUT2E5 A1=F1E13 A0=F1E12 B1=S3E13 B0=S3E12 COUT=COUT2E6 S1=F2E11 S0=F2E10 .subckt fulladder_2Bits CIN=COUT2E6 A1=F1E15 A0=F1E14 B1=S3E15 B0=S3E14 COUT=COUT2E7 S1=F2E13 S0=F2E12 .subckt fulladder_n++_2Bits CIN=COUT2E7 A1=F1E14 A0=F1E14 B1=S3E17 B0=S3E16 S1=F2E15 S0=F2E14 .subckt halfadder_2Bits A1=F2E1 A0=F2E0 B1=S4E1 B0=S4E0 COUT=COUT3E0 S1=S9 S0=S8 .subckt fulladder_2Bits CIN=COUT3E0 A1=F2E3 A0=F2E2 B1=S4E3 B0=S4E2 COUT=COUT3E1 S1=F3E1 S0=F3E0 .subckt fulladder_2Bits CIN=COUT3E1 A1=F2E5 A0=F2E4 B1=S4E5 B0=S4E4 COUT=COUT3E2 S1=F3E3 S0=F3E2 .subckt fulladder_2Bits CIN=COUT3E2 A1=F2E7 A0=F2E6 B1=S4E7 B0=S4E6 COUT=COUT3E3 S1=F3E5 S0=F3E4 .subckt fulladder_2Bits CIN=COUT3E3 A1=F2E9 A0=F2E8 B1=S4E9 B0=S4E8 COUT=COUT3E4 S1=F3E7 S0=F3E6 .subckt fulladder_2Bits CIN=COUT3E4 A1=F2E11 A0=F2E10 B1=S4E11 B0=S4E10 COUT=COUT3E5 S1=F3E9 S0=F3E8 .subckt fulladder_2Bits CIN=COUT3E5 A1=F2E13 A0=F2E12 B1=S4E13 B0=S4E12 COUT=COUT3E6 S1=F3E11 S0=F3E10 .subckt fulladder_2Bits CIN=COUT3E6 A1=F2E15 A0=F2E14 B1=S4E15 B0=S4E14 COUT=COUT3E7 S1=F3E13 S0=F3E12 .subckt fulladder_n++_2Bits CIN=COUT3E7 A1=F2E14 A0=F2E14 B1=S4E17 B0=S4E16 S1=F3E15 S0=F3E14 .subckt halfadder_2Bits A1=F3E1 A0=F3E0 B1=S5E1 B0=S5E0 COUT=COUT4E0 S1=S11 S0=S10 .subckt fulladder_2Bits CIN=COUT4E0 A1=F3E3 A0=F3E2 B1=S5E3 B0=S5E2 COUT=COUT4E1 S1=F4E1 S0=F4E0 .subckt fulladder_2Bits CIN=COUT4E1 A1=F3E5 A0=F3E4 B1=S5E5 B0=S5E4 COUT=COUT4E2 S1=F4E3 S0=F4E2 .subckt fulladder_2Bits CIN=COUT4E2 A1=F3E7 A0=F3E6 B1=S5E7 B0=S5E6 COUT=COUT4E3 S1=F4E5 S0=F4E4 .subckt fulladder_2Bits CIN=COUT4E3 A1=F3E9 A0=F3E8 B1=S5E9 B0=S5E8 COUT=COUT4E4 S1=F4E7 S0=F4E6 .subckt fulladder_2Bits CIN=COUT4E4 A1=F3E11 A0=F3E10 B1=S5E11 B0=S5E10 COUT=COUT4E5 S1=F4E9 S0=F4E8 .subckt fulladder_2Bits CIN=COUT4E5 A1=F3E13 A0=F3E12 B1=S5E13 B0=S5E12 COUT=COUT4E6 S1=F4E11 S0=F4E10 .subckt fulladder_2Bits CIN=COUT4E6 A1=F3E15 A0=F3E14 B1=S5E15 B0=S5E14 COUT=COUT4E7 S1=F4E13 S0=F4E12 .subckt fulladder_n++_2Bits CIN=COUT4E7 A1=F3E14 A0=F3E14 B1=S5E17 B0=S5E16 S1=F4E15 S0=F4E14 .subckt halfadder_2Bits A1=F4E1 A0=F4E0 B1=S6E1 B0=S6E0 COUT=COUT5E0 S1=S13 S0=S12 .subckt fulladder_2Bits CIN=COUT5E0 A1=F4E3 A0=F4E2 B1=S6E3 B0=S6E2 COUT=COUT5E1 S1=F5E1 S0=F5E0 .subckt fulladder_2Bits CIN=COUT5E1 A1=F4E5 A0=F4E4 B1=S6E5 B0=S6E4 COUT=COUT5E2 S1=F5E3 S0=F5E2 .subckt fulladder_2Bits CIN=COUT5E2 A1=F4E7 A0=F4E6 B1=S6E7 B0=S6E6 COUT=COUT5E3 S1=F5E5 S0=F5E4 .subckt fulladder_2Bits CIN=COUT5E3 A1=F4E9 A0=F4E8 B1=S6E9 B0=S6E8 COUT=COUT5E4 S1=F5E7 S0=F5E6 .subckt fulladder_2Bits CIN=COUT5E4 A1=F4E11 A0=F4E10 B1=S6E11 B0=S6E10 COUT=COUT5E5 S1=F5E9 S0=F5E8 .subckt fulladder_2Bits CIN=COUT5E5 A1=F4E13 A0=F4E12 B1=S6E13 B0=S6E12 COUT=COUT5E6 S1=F5E11 S0=F5E10 .subckt fulladder_2Bits CIN=COUT5E6 A1=F4E15 A0=F4E14 B1=S6E15 B0=S6E14 COUT=COUT5E7 S1=F5E13 S0=F5E12 .subckt fulladder_n++_2Bits CIN=COUT5E7 A1=F4E14 A0=F4E14 B1=S6E17 B0=S6E16 S1=F5E15 S0=F5E14 .subckt halfadder_2Bits A1=F5E1 A0=F5E0 B1=S7E1 B0=S7E0 COUT=COUT6E0 S1=S15 S0=S14 .subckt fulladder_2Bits CIN=COUT6E0 A1=F5E3 A0=F5E2 B1=S7E3 B0=S7E2 COUT=COUT6E1 S1=S17 S0=S16 .subckt fulladder_2Bits CIN=COUT6E1 A1=F5E5 A0=F5E4 B1=S7E5 B0=S7E4 COUT=COUT6E2 S1=S19 S0=S18 .subckt fulladder_2Bits CIN=COUT6E2 A1=F5E7 A0=F5E6 B1=S7E7 B0=S7E6 COUT=COUT6E3 S1=S21 S0=S20 .subckt fulladder_2Bits CIN=COUT6E3 A1=F5E9 A0=F5E8 B1=S7E9 B0=S7E8 COUT=COUT6E4 S1=S23 S0=S22 .subckt fulladder_2Bits CIN=COUT6E4 A1=F5E11 A0=F5E10 B1=S7E11 B0=S7E10 COUT=COUT6E5 S1=S25 S0=S24 .subckt fulladder_2Bits CIN=COUT6E5 A1=F5E13 A0=F5E12 B1=S7E13 B0=S7E12 COUT=COUT6E6 S1=S27 S0=S26 .subckt fulladder_2Bits CIN=COUT6E6 A1=F5E15 A0=F5E14 B1=S7E15 B0=S7E14 COUT=COUT6E7 S1=S29 S0=S28 .subckt fulladder_n++_2Bits CIN=COUT6E7 A1=F5E14 A0=F5E14 B1=S7E17 B0=S7E16 S1=S31 S0=S30 .end .model operando1 .inputs A1 A0 B15 B14 B13 B12 B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 .outputs S17 S16 S15 S14 S13 S12 S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0 .subckt mult_TipoI_2Bits A1=A1 A0=A0 B1=B1 B0=B0 S3=RP01 S2=RP00 S1=S1 S0=S0 .subckt mult_TipoI_2Bits A1=A1 A0=A0 B1=B3 B0=B2 S3=RP13 S2=RP12 S1=RP11 S0=RP10 .subckt mult_TipoI_2Bits A1=A1 A0=A0 B1=B5 B0=B4 S3=RP23 S2=RP22 S1=RP21 S0=RP20 .subckt mult_TipoI_2Bits A1=A1 A0=A0 B1=B7 B0=B6 S3=RP33 S2=RP32 S1=RP31 S0=RP30 .subckt mult_TipoI_2Bits A1=A1 A0=A0 B1=B9 B0=B8 S3=RP43 S2=RP42 S1=RP41 S0=RP40 .subckt mult_TipoI_2Bits A1=A1 A0=A0 B1=B11 B0=B10 S3=RP53 S2=RP52 S1=RP51 S0=RP50 .subckt mult_TipoI_2Bits A1=A1 A0=A0 B1=B13 B0=B12 S3=RP63 S2=RP62 S1=RP61 S0=RP60 .subckt mult_TipoII_2Bits A1=B15 A0=B14 B1=A1 B0=A0 S3=RP73 S2=RP72 S1=RP71 S0=RP70 .subckt halfadder_2Bits A1=RP01 A0=RP00 B1=RP11 B0=RP10 COUT=COUT0 S1=S3 S0=S2 .subckt fulladder_2Bits CIN=COUT0 A1=RP13 A0=RP12 B1=RP21 B0=RP20 COUT=COUT1 S1=S5 S0=S4 .subckt fulladder_2Bits CIN=COUT1 A1=RP23 A0=RP22 B1=RP31 B0=RP30 COUT=COUT2 S1=S7 S0=S6 .subckt fulladder_2Bits CIN=COUT2 A1=RP33 A0=RP32 B1=RP41 B0=RP40 COUT=COUT3 S1=S9 S0=S8 .subckt fulladder_2Bits CIN=COUT3 A1=RP43 A0=RP42 B1=RP51 B0=RP50 COUT=COUT4 S1=S11 S0=S10 .subckt fulladder_2Bits CIN=COUT4 A1=RP53 A0=RP52 B1=RP61 B0=RP60 COUT=COUT5 S1=S13 S0=S12 .subckt fulladder_2Bits CIN=COUT5 A1=RP63 A0=RP62 B1=RP71 B0=RP70 COUT=COUT6 S1=S15 S0=S14 .subckt bitsadder_2Bits CIN=COUT6 A1=RP73 A0=RP72 S1=S17 S0=S16 .end .model operando2 .inputs A1 A0 B15 B14 B13 B12 B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 .outputs S17 S16 S15 S14 S13 S12 S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0 .subckt mult_TipoII_2Bits A1=A1 A0=A0 B1=B1 B0=B0 S3=RP01 S2=RP00 S1=S1 S0=S0 90 .subckt mult_TipoII_2Bits A1=A1 A0=A0 B1=B3 B0=B2 S3=RP13 S2=RP12 S1=RP11 S0=RP10 .subckt mult_TipoII_2Bits A1=A1 A0=A0 B1=B5 B0=B4 S3=RP23 S2=RP22 S1=RP21 S0=RP20 .subckt mult_TipoII_2Bits A1=A1 A0=A0 B1=B7 B0=B6 S3=RP33 S2=RP32 S1=RP31 S0=RP30 .subckt mult_TipoII_2Bits A1=A1 A0=A0 B1=B9 B0=B8 S3=RP43 S2=RP42 S1=RP41 S0=RP40 .subckt mult_TipoII_2Bits A1=A1 A0=A0 B1=B11 B0=B10 S3=RP53 S2=RP52 S1=RP51 S0=RP50 .subckt mult_TipoII_2Bits A1=A1 A0=A0 B1=B13 B0=B12 S3=RP63 S2=RP62 S1=RP61 S0=RP60 .subckt mult_TipoIII_2Bits A1=A1 A0=A0 B1=B15 B0=B14 S3=RP73 S2=RP72 S1=RP71 S0=RP70 .subckt halfadder_2Bits A1=RP01 A0=RP00 B1=RP11 B0=RP10 COUT=COUT0 S1=S3 S0=S2 .subckt fulladder_n++_2Bits CIN=COUT0 A1=RP13 A0=RP12 B1=RP01 B0=RP01 S1=G1 S0=G0 .subckt halfadder_2Bits A1=RP21 A0=RP20 B1=G1 B0=G0 COUT=COUT1 S1=S5 S0=S4 .subckt fulladder_n++_2Bits CIN=COUT1 A1=RP23 A0=RP22 B1=G1 B0=G1 S1=G3 S0=G2 .subckt halfadder_2Bits A1=RP31 A0=RP30 B1=G3 B0=G2 COUT=COUT2 S1=S7 S0=S6 .subckt fulladder_n++_2Bits CIN=COUT2 A1=RP33 A0=RP32 B1=G3 B0=G3 S1=G5 S0=G4 .subckt halfadder_2Bits A1=RP41 A0=RP40 B1=G5 B0=G4 COUT=COUT3 S1=S9 S0=S8 .subckt fulladder_n++_2Bits CIN=COUT3 A1=RP43 A0=RP42 B1=G5 B0=G5 S1=G7 S0=G6 .subckt halfadder_2Bits A1=RP51 A0=RP50 B1=G7 B0=G6 COUT=COUT4 S1=S11 S0=S10 .subckt fulladder_n++_2Bits CIN=COUT4 A1=RP53 A0=RP52 B1=G7 B0=G7 S1=G9 S0=G8 .subckt halfadder_2Bits A1=RP61 A0=RP60 B1=G9 B0=G8 COUT=COUT5 S1=S13 S0=S12 .subckt fulladder_n++_2Bits CIN=COUT5 A1=RP63 A0=RP62 B1=G9 B0=G9 S1=G11 S0=G10 .subckt halfadder_2Bits A1=RP71 A0=RP70 B1=G11 B0=G10 COUT=COUT6 S1=S15 S0=S14 .subckt fulladder_n++_2Bits CIN=COUT6 A1=RP73 A0=RP72 B1=G11 B0=G11 S1=S17 S0=S16 .end .model mult_TipoI_2Bits .inputs A1 A0 B1 B0 .outputs S3 S2 S1 S0 .gate nand2 a=A1 b=A0 O=I2349809 .gate inv1 a=B1 O=I2349810 .gate inv1 a=B0 O=I2349811 .gate nor3 a=I2349809 b=I2349810 c=I2349811 O=S3 .gate nor2 a=A0 b=I2349811 O=I2349759 .gate nor2 a=I2349759 b=I2349811 O=I2349744 .gate inv1 a=A1 O=I2349807 .gate nor3 a=I2349744 b=I2349807 c=I2349810 O=S2 .gate nand3 a=I2349811 b=A0 c=B1 O=I2349864 .gate xor a=A1 b=A0 O=I2349862 .gate nand2 a=I2349862 b=B1 O=I2349868 .gate nand2 a=I2349810 b=A1 O=I2349878 .gate nand2 a=I2349868 b=I2349878 O=I2349860 .gate nand2 a=I2349860 b=B0 O=I2349866 .gate nand2 a=I2349864 b=I2349866 O=S1 .gate inv1 a=A0 O=I2349808 .gate nor2 a=I2349808 b=I2349811 O=S0 .end .model mult_TipoII_2Bits .inputs A1 A0 B1 B0 .outputs S3 S2 S1 S0 .gate inv1 a=B1 O=II2350002 .gate nor2 a=B0 b=II2350002 O=II2349942 .gate nor2 a=B0 b=II2349942 O=II2349919 .gate inv1 a=A1 O=II2350000 .gate nor2 a=II2349919 b=II2350000 O=S3 .gate inv1 a=B0 O=II2350001 .gate inv1 a=A0 O=II2350004 .gate nor3 a=II2350001 b=II2350002 c=II2350004 O=II2349937 .gate xor a=B1 b=B0 O=II2350003 .gate nor2 a=II2349937 b=II2350003 O=II2349922 .gate nor2 a=II2349922 b=II2350000 O=S2 .gate nand3 a=II2350001 b=B1 c=A0 O=II2350063 .gate xor a=A1 b=A0 O=II2350061 .gate nand2 a=II2350061 b=B1 O=II2350067 .gate nand2 a=II2350002 b=A1 O=II2350083 .gate nand2 a=II2350067 b=II2350083 O=II2350059 .gate nand2 a=II2350059 b=B0 O=II2350065 .gate nand2 a=II2350063 b=II2350065 O=S1 .gate nor2 a=II2350001 b=II2350004 O=S0 .end 91 .model mult_TipoIII_2Bits .inputs A1 A0 B1 B0 .outputs S3 S2 S1 S0 .gate inv1 a=B1 O=III2350227 .gate nor2 a=B0 b=III2350227 O=III2350220 .gate inv1 a=A1 O=III2350224 .gate nand3 a=III2350220 b=III2350224 c=A0 O=III2350321 .gate nand3 a=B1 b=III2350224 c=A0 O=III2350325 .gate nand2 a=III2350227 b=A1 O=III2350341 .gate nand2 a=III2350325 b=III2350341 O=III2350291 .gate nand2 a=III2350291 b=B0 O=III2350323 .gate nand2 a=III2350321 b=III2350323 O=S3 .gate xor a=A1 b=A0 O=III2350295 .gate inv1 a=B0 O=III2350228 .gate nand3 a=III2350295 b=III2350228 c=B1 O=III2350311 .gate nand3 a=B1 b=III2350224 c=A0 O=III2350315 .gate nand2 a=III2350227 b=A1 O=III2350335 .gate nand2 a=III2350315 b=III2350335 O=III2350293 .gate nand2 a=III2350293 b=B0 O=III2350313 .gate nand2 a=III2350311 b=III2350313 O=S2 .gate nand3 a=III2350228 b=A0 c=B1 O=III2350301 .gate xor a=A1 b=A0 O=III2350299 .gate nand2 a=III2350299 b=B1 O=III2350305 .gate nand2 a=III2350227 b=A1 O=III2350329 .gate nand2 a=III2350305 b=III2350329 O=III2350297 .gate nand2 a=III2350297 b=B0 O=III2350303 .gate nand2 a=III2350301 b=III2350303 O=S1 .gate inv1 a=A0 O=III2350225 .gate nor2 a=III2350225 b=III2350228 O=S0 .end .model halfadder_2Bits .inputs A1 A0 B1 B0 .outputs COUT S1 S0 .subckt halfadder A=A0 B=B0 COUT=COUT0 S=S0 .subckt fulladder CIN=COUT0 A=A1 B=B1 COUT=COUT S=S1 .end .model fulladder_2Bits .inputs CIN A1 A0 B1 B0 .outputs COUT S1 S0 .subckt fulladder CIN=CIN A=A0 B=B0 COUT=COUT0 S=S0 .subckt fulladder CIN=COUT0 A=A1 B=B1 COUT=COUT S=S1 .end .model bitsadder_2Bits .inputs CIN A1 A0 .outputs S1 S0 .subckt halfadder A=A0 B=CIN COUT=COUT0 S=S0 .gate xor a=A1 b=COUT0 o=S1 .end .model fulladder_n++_2Bits .inputs CIN A1 A0 B1 B0 .outputs S1 S0 .subckt fulladder CIN=CIN A=A0 B=B0 COUT=COUT0 S=S0 .subckt fulladder_n++ CIN=COUT0 A=A1 B=B1 S=S1 .end .model fulladder_n++ .inputs CIN A B .outputs S .gate xor a=A b=B o=fio1 .gate xor a=fio1 b=CIN o=S .end .model fulladder .inputs CIN A B .outputs COUT S .gate xor a=A b=B o=fio1 92 .gate xor a=fio1 b=CIN o=S .gate and2 a=A b=B o=fio2 .gate and2 a=fio1 b=CIN o=fio3 .gate or2 a=fio3 b=fio2 o=COUT .end .model halfadder .inputs A B .outputs COUT S .gate xor a=A b=B o=S .gate and2 a=A b=B o=COUT .end ANEXO II – Fluxo de projeto para a obtenção dos circuitos multiplicadores O fluxo de projeto para a obtenção dos resultados de área e atraso (ferramenta SIS) e estimativa de potência (ferramenta SLS) dos multiplicadores analisados neste trabalho, é mostrado abaixo e está de acordo com a metodologia mostrada na seção 1.3. A síntese e teste dos circuitos multiplicadores é realizada no ambiente SIS, assim como a obtenção dos resultados de área e atraso do circuito. O procedimento para execução destas tarefas é apresentado a seguir. 1) Simulação no ambiente SIS: 2) Obtenção de área (literais) e atraso (ns) do circuito multiplicador: 93 3) Mapeamento do circuito e geração do circuito “flat”, ou seja sem sub-circuitos em um novo arquivo: 4) Retirar do arquivo multibin16m2origa.blif os caracteres “[“ e “]”, além da seguintes linhas do inicio do arquivo: .default_input_arrival 0.00 0.00 .default_output_required 0.00 0.00 .default_input_drive 0.10 0.10 .default_output_load 2.00 .default_max_input_load 999.00 5) Para obter os resultados de estimativa de potência é necessário a conversão dos formatos BLIF para SLS através da ferramenta blif2sls: [root@localhost mulbin16m2orig]# blif2sls mulbin16m2origa.blif mulbin16m2orig.sls mcnc.genlib >>> CONVERSÃO PARA O FORMATO SLS. 6) Retirar do inicio do arquivo mulbin16m2orig.sls os modelos das portas lógicas que foi introduzido pelo conversor. 7) Criar um projeto no ambiente SLS: 94 [root@localhost mulbin16m2orig]# mkpr –o –p fishbone –l [nome do projeto] 8) Copiar todas as portas lógicas lógicas da biblioteca mcnc.genlib no formato SLS para dentro da pasta do projeto que foi criada. 9) Dentro da pasta de projeto compilar todas as portas lógicas e o circuito através do comando csls , por exemplo: [root@localhost mulbin16m2orig]# csls and2.sls [root@localhost mulbin16m2orig]# csls and3.sls …. [root@localhost mulbin16m2orig]# csls mulbin16m2orig.sls 10) Verificar se todas os arquivos foram corretamente compilados através do comando: [root@localhost mulbin16m2orig]# dblist 11) Comando para estimativa de potência de acordo com um vetor de dados de entrada , sintaxe: sls [nome do projeto] [vetor de entrada (.cmd)] 1> [arquivo de status] [root@localhost mulbin16m2orig]# sls mulbin16m2orig VetBinRan16b.cmd 1> sim.diag 12) Após a simulação no arquivo sim.diag pode ser verificado se ocorreu algum erro de simulação. A ferramenta cria três arquivos: mulbin16m2orig.dis possui o valor estimado do consumo de potência da simulação; mulbin16m2orig.out tabela com os valores de entrada e de saída das simulações; mulbin16m2orig.res mostra a faixa dos tempos de simulação.