Multiplicador Binário com Sinal Edson T. Midorikawa/2010 E.T.M./2012 (revisão) RESUMO Nesta experiência será implementado um circuito para multiplicação binária com sinal. Deve ser aplicada a metodologia para projeto estruturado de sistemas digitais apresentada em experiências anteriores. A parte experimental será desenvolvida com o auxílio da ferramenta de software Quartus II da Altera e depois implementada com o dispositivo lógico Altera Cyclone II EP2C35F672C6. 1. PARTE TEÓRICA 1.1. Revisão sobre Multiplicação Binária A referência [Ranzini, 2004] 1 apresenta como a operação de multiplicação binária pode ser implementada para números sem sinal. Este texto apresenta o algoritmo usado para uma execução melhorada da operação de multiplicação. Baseado na descrição da operação de multiplicação, podemos desenvolver um circuito digital que implementa sua funcionalidade. A figura 1.1 mostra um diagrama de blocos do fluxo de dados do circuito do multiplicador binário. Figura 1.1 - Diagrama de blocos do fluxo de dados do multiplicador binário. O multiplicador é armazenado no registrador M e depois transferido para o registrador deslocador Q. A cada passo do algoritmo, o bit do multiplicador em consideração está na posição menos significativa de Q (bit Q0), que é analisado pela unidade de controle. O multiplicando é armazenado no registrador B que é somado a cada passo com o produto parcial, presente no registrador deslocador A. O bit de vai-um do somador é armazenado no flip-flop C. O conjunto composto pelos componentes flip-flop C, deslocador A e deslocador Q compõem um grande deslocador para as operações de deslocamento para a esquerda. Um contador de passos P completa o fluxo de dados para indicar o final da operação de multiplicação, gerando o sinal ZERO. As saídas dos deslocadores A e Q formam o produto na saída do multiplicador. 1 Outra referência com informação relacionada é [Mano e Kime, 2000]. Multiplicador Binário com Sinal (2012) 1
A implementação da unidade de controle pode ser modelada pelo diagrama ASM da figura 1.2. O circuito permanece no estado inicial (PARADO) até que o sinal INICIAR seja ativado. Ao ser ativado este sinal, o flip-flop C, o deslocador A e o contador P são inicializados, e o deslocador Q recebe o valor do multiplicador. O processo de multiplicação envolve os estados MUL0 e MUL1, executados até que o sinal ZERO indique que todos os bits do multiplicador foram considerados. Ao final, o sinal PRONTO é ativado no estado FIM. O circuito permanece neste estado até que o sinal INICIAR seja desativado 2. Figura 1.2 - Diagrama ASM da unidade de controle do multiplicador binário. Repare que o diagrama ASM não inclui o processamento dos sinais ENTRA_MULTIPLICANDO e ENTRA_MULTIPLICADOR. Isto é devido ao fato destes sinais ativarem diretamente o controle de carga dos registradores B e M, respectivamente. A implementação da unidade de controle pode ser desenvolvida usando o método tradicional de projeto de circuitos sequenciais, o método de mapeamento direto do diagrama ASM para circuito ou o método registrador de estado decodificador, conforme descrito com detalhes em [Ranzini, 2004]. Uma alternativa é usar uma linguagem de descrição de hardware: por exemplo, a apostila [Midorikawa, 2011] mostra como converter o diagrama ASM em código AHDL. É também possível usar outras linguagens de descrição de hardware, como VHDL ou Verilog, como mostrado em [Midorikawa, 2007]. 2 Por que é necessário aguardar o sinal INICIAR ficar desativado? Se não houvesse esta espera, quando o circuito terminar a multiplicação, voltar ao estado inicial e encontrar o sinal INICIAR ativado, ele iria reiniciar o processo de multiplicação. Isto continuaria até que INICIAR fosse desativado. Na apostila [Ranzini, 2004] isto não é considerado. Multiplicador Binário com Sinal (2012) 2
Figura 1.3 Código VHDL do circuito Multiplicador Binário.
1.2. Implementação da Multiplicação Binária em VHDL O Multiplicador Binário apresentado na seção 1.1 pode ser representado durante o processo de projeto como uma descrição comportamental VHDL, apresentada na figura 1.3 (veja [Midorikawa, 2007] para mais detalhes). Tal descrição apresentada abaixo representa o diagrama de blocos do fluxo de dados MB apresentado na figura 1.1 e o diagrama ASM da figura 1.2. O código VHDL está contido na entidade multiplicador_binario e na arquitetura comportamento_mult4. A arquitetura contém duas atribuições e três processos. Cada um dos processos tem uma função distinta, mas podem interagir para a realização da operação de multiplicação. No início da entidade, são definidas as entradas e as saídas do multiplicador. A seguir, no início da arquitetura são definidos os três estados de funcionamento do circuito pela declaração de tipo. Em seguida, sinais internos que gerarão registradores são definidos. Entre os sinais estão estado e prox_estado para o controle, os registradores A, B, M, P e Q e o flip-flop C. Um sinal intermediário Z é declarado por conveniência. 1.3. Multiplicação Binária com Sinal Quando consideramos números com sinal, o algoritmo usado no circuito de multiplicação binária sem sinal não pode ser aplicado. Considere a multiplicação de 11 (1011 2 ) com 13 (1101 2 ), onde obtemos o resultado 143 (10001111 2 ). Se considerarmos estes valores binários como números em complemento de dois, teríamos a multiplicação de -5 (1011 2 ) com -3 (1101 2 ) resultando em -113 (10001111 2 ), que é um valor diferente de 15 (00001111 2 ). Para mais detalhes consulte [Stallings, 2002]. Uma forma de levar em consideração o sinal dos operandos na operação de multiplicação binária é usar o algoritmo de Booth. A figura 1.4 mostra fluxograma para o algoritmo de Booth. INÍCIO A 0, Q -1 0 M multiplicando Q multiplicador Contador n = 10 Q 0,Q -1 = 01 A A M = 00 = 11 A A + M Deslocamento aritmético para a direita de A,Q,Q -1 Contador Contador -1 NÃO Contador = 0? SIM FIM Figura 1.4 Fluxograma do algoritmo de Booth. Multiplicador Binário com Sinal (2012) 4
Convém apontar alguns aspectos a serem considerados no projeto do fluxo de dados do multiplicador binário com sinal: presença do bloco somador/subtrator; presença do flip-flop F à direita do multiplicador para armazenar Q -1 ; o deslocamento do acumulador deve ser aritmético (o que isto significa e o que muda no circuito em relação ao multiplicador sem sinal?); a decisão de soma ou subtração depende do bit menos significativo do multiplicador (Q 0 ) e do flip-flop F (Q -1 ). Estes sinais de estado são enviados à unidade de controle; a unidade de controle é bem parecida com a do multiplicador binário de números sem sinal. A figura 1.5 mostra o diagrama de blocos básico do multiplicador binário com sinal. O flip-flop F mantém o dado que é identificado como Q -1 no fluxograma da figura 1.4. Figura 1.5 Diagrama de blocos básico do multiplicador binário com sinal. Algumas dicas sobre o projeto do Multiplicador Binário com Sinal: 1) o bloco somador/subtrador pode ser facilmente projetado com um somador binário e portas OU EXCLUSIVO (XOR). O sinal que indica a operação (0=soma, 1=subtração) é conectado em uma das entrada das portas e também na entrada de vem-um do somador binário; 2) O sinal acima para soma ou subtração pode vir direto do bit menos significativo do registrador Q (sinal Q 0 ): quando Q 0 =0, deve ocorrer uma soma, e quando Q 0 =1, uma subtração. 3) Na unidade de controle do multiplicador binário sem sinal, era realizada a soma somente se o sinal Q 0 fosse igual a 1. Caso contrário, havia somente o deslocamento dos registradores. Na unidade de controle do multiplicador binário com sinal, se Q 0 F (ou seja, Q 0 F=1) ocorre a soma ou subtração, dependendo do valor de Q 0, e depois o deslocamento dos registradores. Caso Q 0 =F (ou seja, Q 0 F=0), deve ocorrer somente o deslocamento. Deste modo, acredito que a unidade de controle não deve ser mudada quanto a este aspecto. 4) Para mais informações sobre a metodologia de projeto a ser considerada consulte referência [Midorikawa, 2011]. Multiplicador Binário com Sinal (2012) 5
1.3. Exemplos do Algoritmo de Booth Ilustramos aqui vários exemplos de multiplicação binária para números em complemento de dois com representação binária de 4 bits. Sejam os números: 6 = 0110 e -6 = 1010. Nos exemplos abaixo, a legenda das tabelas indicam: acum. = acumulador A mult. = multiplicador Q F = flip-flop a direita do multiplicador (Q -1 ) a) 6 x 6 PASSO ACUM. MULT. F. Condição (Q 0,F) Ação 0 1 2 3 0000 0110 0 00 não faz nada 0000 0011 0 shift aritmético 0000 0011 0-1010 0110 0011 0 10 subtrai 0011 0001 1 shift aritmético 0011 0001 1 11 não faz nada 0001 1000 1 shift aritmético 0001 1000 1 +1010 1011 1000 1 01 soma 1101 1100 0 shift aritmético fim 1101 1100 resultado = -36 b) 6 x -6 PASSO ACUM. MULT. F. Condição (Q 0,F) Ação 0 1 2 3 0000 1010 0 00 não faz nada 0000 0101 0 shift aritmético 0000 0101 0-0110 1010 0101 0 10 subtrai 1101 0010 1 shift aritmético 1101 0010 1 +0110 0011 0010 1 01 soma 0001 1001 0 shift aritmético 0001 1001 0-0110 1011 1001 0 10-> subtrai 1011 1100 1 shift aritmético fim 1011 1100 resultado = -36 Multiplicador Binário com Sinal (2012) 6
c) 6 x 6 PASSO ACUM. MULT. F. Condição (Q 0,F) Ação 0 1 2 3 0000 0110 0 00 não faz nada 0000 0011 0 shift aritmético 0000 0011 0-0110 1010 0011 0 10 subtrai 1101 0001 1 shift aritmético 1101 0001 1 11 não faz nada 1110 1000 1 shift aritmético 1110 1000 1 +0110 0100 1000 1 01 soma 0010 0100 0 shift aritmético fim 0010 0100 resultado = 36 d) -6 x -6 PASSO ACUM. MULT. F. Condição (Q 0,F) Ação 0 1 2 3 0000 1010 0 00 não faz nada 0000 0101 0 shift aritmético 0000 0101 0-1010 0110 0101 0 10 subtrai 0011 0010 1 shift aritmético 0011 0010 1 +1010 1101 0010 1 01 soma 1110 1001 0 shift aritmético 1110 1001 0-1010 0100 1001 1 10-> subtrai 0010 0100 1 shift aritmético fim 0010 0100 resultado = 36 Multiplicador Binário com Sinal (2012) 7
2. PARTE EXPERIMENTAL Nesta experiência será desenvolvido um circuito baseado no multiplicador binário desenvolvido na experiência anterior. O projeto pode ser feito usando os componentes discretos básicos MSI e SSI ou com a linguagem VHDL. 2.1. Especificação do Multiplicador Binário com Sinal O circuito Multiplicador Binário com Sinal (MBcS) é responsável pela realização de uma multiplicação de dois números binários com sinal de 4 bits, introduzidos separadamente no circuito através de uma única via de dados (chaves). A operação é iniciada com o acionamento do sinal INICIAR (botão), e o resultado da operação com 8 bits (OUT) deve ser conectado a dois displays de saída. Os operandos da multiplicação são especificados para o MBcS pelos sinais ENTRA_MULTIPLICANDO (botão) e ENTRA_MULTIPLICADOR (botão). O sinal PRONTO (led) indica o final da multiplicação. Os sinais de entrada e saída do Multiplicador Binário são os seguintes: IN - via de dados de entrada, com quatro bits; INICIAR - sinal de controle utilizado iniciar a multiplicação; ENTRA_MULTIPLICANDO - especifica o multiplicando da operação; ENTRA_MULTIPLICADOR - especifica o multiplicador da operação; OUT - via de dados de saída, com oito bits; PRONTO indica final da operação. A figura 2.1 abaixo mostra o MBcS com os sinais descritos anteriormente: INICIAR ENTRA_MULTIPLICANDO ENTRA_MULTIPLICADOR IN[3:0] MBcS OUT[7:0] PRONTO Figura 2.1 Sinais de entrada e de saída do Multiplicador Binário com Sinal a ser desenvolvido. A operação do circuito deve seguir os seguintes passos: 1. Acertar um valor binário na vida de dados de entrada (IN); 2. Ativar o sinal ENTRA_MULTIPLICANDO; 3. Colocar outro valor na via de dados de entrada; 4. Ativar o sinal ENTRA_MULTIPLICADOR; 5. Acionar o botão INICIAR para a execução da multiplicação binária; 6. Verificar resultado na via de dados de saída (OUT, PRONTO). Caso se deseje repetir um valor anteriormente ajustado no circuito MBcS, os passos 1 e 2 ou os passos 3 e 4 podem ser ignorados, visto que um registrador interno deve manter os valores do multiplicador e do multiplicando da operação anterior. Multiplicador Binário com Sinal (2012) 8
DICAS: 1. Para auxiliar a depuração do circuito do MBcS, determine alguns sinais internos do circuito projetado para serem monitorados durante os testes e depuração do circuito. Estes sinais devem ser ligados nos leds e/ou displays disponíveis na placa de desenvolvimento. 2. Apresentar o diagrama ASM do circuito do MBcS, explicando os sinais de estado e de controle usados. 3. A depuração da máquina de estados da unidade de controle pode ser feita com uma indicação (sinal externo) do estado atual do circuito. 4. O fluxo de dados do projeto deve armazenar tanto o multiplicando como o multiplicador para poderem ser reaproveitados entre multiplicações consecutivas. Que alterações devem ser feitas no fluxo de dados apresentado na figura 1.5? 5. Trazer o arquivo do projeto para o Laboratório Digital (bdf e/ou vhd). 2.2. Implementação a) O projeto do MBcS deve ser programado na placa de desenvolvimento FPGA DE2 da Altera com a seguinte designação de sinais do projeto: IN[0..3]: chaves SW0 a SW3 ENTRA_MULTIPLICANDO: botão KEY1 ENTRA_MULTIPLICADOR: botão KEY2 INICIAR: botão KEY3 RESET: chave SW17 CLOCK: clock interno de 50 MHz (CLK_50) OUT[0..7]: leds vermelhos LEDR0 a LEDR7 ou displays HEX0 e HEX1 PRONTO: led verde LEDG0 Se houver sinais adicionais no projeto (p.ex. sinais de depuração), apresente no relatório a designação efetuada. b) Elabore uma tabela contendo todos os códigos binários de 4 bits em complemento de dois e o seu respectivo valor equivalente. Por exemplo, o código 0001 é a representação do valor +1 e 1111 é a representação do valor -1. c) Execute a multiplicação dos valores apresentados na seção 1.3. Comente os resultados. d) Escolha mais casos de teste para avaliar o correto funcionamento do MBcS. e) Execute os casos de teste escolhidos e avalie os resultados. 2.3. Modificação do Circuito DICA: lembre-se que os botões na placa DE2 são ativos em baixo. Os projetos devem levar isto em consideração. Use a tabela de designação de pinos da placa DE2. f) (OPCIONAL) Implemente a modificação solicitada pelo professor e documente o projeto e os resultados obtidos. Perguntas 1. Explique a diferença entre deslocamento e deslocamento aritmético. Exemplifique. 2. Como é implementado o deslocamento aritmético no fluxo de dados? 3. Descreva detalhadamente o funcionamento e a implementação da unidade de controle do MBcS. 4. Que fatores influenciaram na escolha do grupo no projeto do MBcS (componentes discretos ou VHDL)? Que vantagens e desvantagens vocês poderiam ressaltar para cada alternativa? 5. Como o resultado apresentado pelo circuito pode ser verificado? De que forma a saída de 8 bits em complemento de dois pode ser convertido para sua representação decimal? 6. Como o tempo total de execução da operação de multiplicação pode ser calculado? 7. A execução da multiplicação pode ser otimizada? Mostre algumas alternativas de otimização do circuito desenvolvido. Multiplicador Binário com Sinal (2012) 9
3. BIBLIOGRAFIA 1. MANO, M. M.; KIME, C. R. Logic and computer design fundamentals. 2 nd edition, New Jersey: Prentice-Hall, 2000. 2. MIDORIKAWA, E.T. Lógica programável II. Apostila de Laboratório Digital. Escola Politécnica da USP, 2004. 3. MIDORIKAWA, E.T. Introdução às Linguagens de Descrição de Hardware. Apostila de PCS2304. Escola Politécnica da USP, 2007. 4. MIDORIKAWA, E.T. Projeto de Sistemas Digitais. Apostila de Laboratório Digital, 2011. 5. PARHAMI, B. Computer arithmetic: algorithms and hardware designs. Oxford: Oxford University Press, 2000. 6. PATTERSON, D. A. & HENNESSY, J. L. Computer organization and design: the hardware/ software interface. 2 nd edition, San Francisco: Morgan Kaufmann, 1998. 7. RANZINI, E.; HORTA, E. L. Lógica programável. Apostila de Laboratório Digital. Escola Politécnica da USP, 2000. 8. RANZINI, E. Exemplo 1 de projeto de circuito síncrono: multiplicador binário. Resumo da disciplina PCS2304. Escola Politécnica da USP, 2004. 9. STALLINGS, W. Arquitetura e organização de computadores. 5ª edição, Prentice-Hall, 2002. 4. EQUIPAMENTOS NECESSÁRIOS 1 placa de desenvolvimento FPGA DE2 da Altera com o dispositivo Altera Cyclone II EP2C35F672C6. 1 computador PC com programa Altera Quartus II e interface USB. Histórico de Revisões E.T.M./2004 primeira versão da experiência. E.T.M./2010 revisão geral e atualização do texto. E.T.M./2012 - revisão. Multiplicador Binário com Sinal (2012) 10