300 likes | 402 Views
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.
E N D
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 • 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
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
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
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
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)
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}
Hardware do Booth Modificado • Codificador Booth MRn-1 PassaMDn MRn MRn+1 DeslocaMDn InverteMDn
Hardware do Booth Modificado • Multiplexer InverteMDn PassaMDn Para Mux a Esq. Do Mux a Dir. DeslocaMDn
Hardware do Booth Modificado • Somador A16 B16 A2 B2 A1 B1 A0 B0 Var (inv) Cout S16 S2 S1 S0 Somador Ripple Carry
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
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
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
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';
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;
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);
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
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
Projeto desenvolvido • Simulações Multiplicação com sinal Multiplicando (b) positivo Multiplicador (a) positivo e negativo
Projeto desenvolvido • Simulações Multiplicação com sinal Multiplicando (b) negativo Multiplicador (a) positivo e negativo
Projeto desenvolvido • Simulações Multiplicação com sinal Teste dos limites
Projeto desenvolvido • Simulações Multiplicação com sinal Teste dos limites
Projeto desenvolvido • Simulações Multiplicação sem sinal
Projeto desenvolvido • Simulações Multiplicação sem sinal
Projeto desenvolvido • Simulações Multiplicação sem sinal Teste dos limites
Projeto desenvolvido • Simulações Multiplicação sem sinal Teste dos limites
Projeto desenvolvido • Maior atraso • Calculado pelo Quartus II: 68ns • Medido: ~50ns • Não foram testadas todas as combinações de multiplicando e multiplicador
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
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