1 / 30

Multiplicador Booth para o FemtoJava

Multiplicador Booth para o FemtoJava. Vagner Santos da Rosa. Tópicos. Algoritmo de Booth Modificado Hardware do Booth Modificado Requisitos para o FemtoJava Projeto desenvolvido Conclusões. Algoritmo de Booth Modificado.

rufin
Download Presentation

Multiplicador Booth para o FemtoJava

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Multiplicador Booth para o FemtoJava Vagner Santos da Rosa

  2. Tópicos • Algoritmo de Booth Modificado • Hardware do Booth Modificado • Requisitos para o FemtoJava • Projeto desenvolvido • Conclusões

  3. Algoritmo de Booth Modificado • Algoritmo de booth original projetado para multiplicações de inteiros em complemento de 2 • Booth modificado: Capaz de operar 2 ou mais bits do multiplicador por vez • Ótimo compromisso entre desempenho e complexidade do hardware

  4. Algoritmo de Booth Modificado • Funcionamento (base 4) • Multiplicador é dividido em grupos de 3 bits • O MSB de um grupo é compartilhado com o LSB de outro • A partir de uma tabela de recodificação, podemos ter: • Soma/Subtrai MD • Soma/Subtrai 2*MD • Não faz operação aritmética • Operações sem sinal podem ser obtidas através do acréscimo de um codificador adicional no MSB do multiplicador

  5. 2: -MD 0010100 3: +MD 1: -2MD Algoritmo de Booth Modificado • Exemplo 1 • Multiplicador = 1010 (1010 sem sinal) 1: 1 * -2MD 2: 4 * -MD 3: 16 * MD ------------ P = 10 * MD

  6. 2: -MD 10100 1: -2MD Algoritmo de Booth Modificado • Exemplo 2 • Multiplicador = 1010 (-610 com sinal) 1: 1 * -2MD 2: 4 * -MD ------------ P = -6 * MD

  7. Hardware do Booth Modificado • Visão top-level Multiplicador (MD) Multiplicando (MR) MD{-1,0,1} P{0,1} Operando1 MD{1,2,3} P{2,3} Operando2 P{14,15} MD{13,14,15} Operando8 P[31..16] Produto (32 bits)

  8. Hardware do Booth Modificado • Operandos Produto Parcial Do Estágio Anterior MR{2n-1, 2n, 2n+1} Codificador Booth Multiplexador (Inverte/desloca/zera MR) 3 16 MD Somador MR Produto Parcial Para o Próximo Estágio P{2n, 2n+1}

  9. Hardware do Booth Modificado • Codificador Booth MRn-1 PassaMDn MRn MRn+1 DeslocaMDn InverteMDn

  10. Hardware do Booth Modificado • Multiplexer InverteMDn PassaMDn Para Mux a Esq. Do Mux a Dir. DeslocaMDn

  11. Hardware do Booth Modificado • Somador A16 B16 A2 B2 A1 B1 A0 B0 Var (inv) Cout S16 S2 S1 S0 Somador Ripple Carry

  12. Requisitos para o FemtoJava • Multiplicação com e sem sinal • Possível através de pequenas adaptações na lógica do multiplicador e colocação de um sinal de controle • Multiplicação de 8 ou 16 bits • Versão de 16 bits: implementada • Versao de 8 bits (com multiplicador de 16 bits): possível através da extensão do sinal do multiplicando e do multiplicador

  13. Projeto desenvolvido • Implementação em VHDL de um multiplicador booth para números com e sem sinal • Operandos de 17 bits • Lógica de tratamento de sinal • Extender os operandos para 17 bits (com ou sem sinal) para o multiplicador poder tratar indistintamente números com e sem sinal • Teste de funcionamento

  14. Projeto desenvolvido • Para números com sinal (complemento de 2) • Faz a extensão de sinal dos operandos durante a conversão de 16 para 17 bits • Ignora os 2 bits mais significativos do produto • Para números sem sinal • Zera o bit mais significativo dos operandos • Ignora os 2 bits mais significativos do produto

  15. Projeto desenvolvido • Recodificação do multiplicando: two_b <= b(15 downto 0) & '0'; -- 2*MD b_bar <= not b; -- -MD two_b_bar <= b_bar(15 downto 0) & '1'; -- -2*MD bb <= b when a="001" or a="010" else two_b when a="011" else two_b_bar when a="100" else b_bar when a="101" or a="110" else x"0000" & '0';

  16. Projeto desenvolvido • Somas parciais soma: for i in 0 to 16 generate -- 17 somadores su: entity WORK.fadd port map( sum_in(i), -- Produto parcial anterior bb(i), -- Multiplicando recodificado ctemp(i), -- carry (FA anterior) psum(i), -- Produto parcial atual ctemp(i+1)); -- carry (proximo FA) end generate;

  17. Projeto desenvolvido • Geração do produto a0: entity WORK.badd port map(mul0, be, zer, s(0), p( 1 downto 0)); a1: entity WORK.badd port map(a(3 downto 1), be, s(0), s(1), p( 3 downto 2)); (...) a8: entity WORK.badd port map(“00” & msb_mr, be,s(7),s(8), p(17 downto 16)); p(31 downto 18) <= s(8)(13 downto 0);

  18. Projeto desenvolvido • Seleção de operação com ou sem sinal topbit <= b(15) when sign = '1' else '0'; -- calcula extensao do multiplicando msb_mr <= a(15) when sign = '0' else '0'; -- calcula extensao do multiplicador be <= topbit & b ; -- multiplicando de 17 bits

  19. Projeto desenvolvido • Simulações • Verificação de funcionamento • Vetores de teste que examinam possíveis falhas na implementação • Não exaustivo • Medição do atraso • Atraso analítico • caminho mais longo no datapath • Pode ser um falso caminho • Atraso máximo experimental: • Atraso mais realista • Pode não ser o maior atraso absoluto

  20. Projeto desenvolvido • Simulações Multiplicação com sinal Multiplicando (b) positivo Multiplicador (a) positivo e negativo

  21. Projeto desenvolvido • Simulações Multiplicação com sinal Multiplicando (b) negativo Multiplicador (a) positivo e negativo

  22. Projeto desenvolvido • Simulações Multiplicação com sinal Teste dos limites

  23. Projeto desenvolvido • Simulações Multiplicação com sinal Teste dos limites

  24. Projeto desenvolvido • Simulações Multiplicação sem sinal

  25. Projeto desenvolvido • Simulações Multiplicação sem sinal

  26. Projeto desenvolvido • Simulações Multiplicação sem sinal Teste dos limites

  27. Projeto desenvolvido • Simulações Multiplicação sem sinal Teste dos limites

  28. Projeto desenvolvido • Maior atraso • Calculado pelo Quartus II: 68ns • Medido: ~50ns • Não foram testadas todas as combinações de multiplicando e multiplicador

  29. Projeto desenvolvido • Inserção no FemtoJava • Substituição arquivo mul.vhd • Criação de uma instrução de multiplicação com sinal • Criação de lógica de controle de sinal

  30. Conclusões • Arquitetura relativamente regular, mas com características que tiveram que ser observadas para a obtenção do resultado correto • Para suportar operações de 16 bits com e sem sinal, um multiplicador de 17 bits teve que ser implementado • Pipelines podem ser facilmente inseridos, se necessário

More Related