Multiplicador Booth para o FemtoJava Vagner Santos da Rosa.
Transcript of Multiplicador Booth para o FemtoJava Vagner Santos da Rosa.
Multiplicador Booth para Multiplicador Booth para o FemtoJavao FemtoJava
Vagner Santos da RosaVagner Santos da Rosa
TópicosTópicos
Algoritmo de Booth ModificadoAlgoritmo de Booth Modificado Hardware do Booth ModificadoHardware do Booth Modificado Requisitos para o FemtoJavaRequisitos para o FemtoJava Projeto desenvolvidoProjeto desenvolvido ConclusõesConclusões
Algoritmo de Booth Algoritmo de Booth ModificadoModificado
Algoritmo de booth original projetado Algoritmo de booth original projetado para multiplicações de inteiros em para multiplicações de inteiros em complemento de 2complemento de 2
Booth modificado: Capaz de operar 2 Booth modificado: Capaz de operar 2 ou mais bits do multiplicador por vezou mais bits do multiplicador por vez
Ótimo compromisso entre desempenho Ótimo compromisso entre desempenho e complexidade do hardwaree complexidade do hardware
Algoritmo de Booth Algoritmo de Booth ModificadoModificado
Funcionamento (base 4)Funcionamento (base 4) Multiplicador é dividido em grupos de 3 bitsMultiplicador é dividido em grupos de 3 bits
O MSB de um grupo é compartilhado com o LSB O MSB de um grupo é compartilhado com o LSB de outrode outro
A partir de uma tabela de recodificação, A partir de uma tabela de recodificação, podemos ter:podemos ter: Soma/Subtrai MDSoma/Subtrai MD Soma/Subtrai 2*MDSoma/Subtrai 2*MD Não faz operação aritméticaNão faz operação aritmética
Operações sem sinal podem ser obtidas Operações sem sinal podem ser obtidas através do acréscimo de um codificador através do acréscimo de um codificador adicional no MSB do multiplicadoradicional no MSB do multiplicador
Algoritmo de Booth Algoritmo de Booth ModificadoModificado
Exemplo 1Exemplo 1 Multiplicador = 1010 (10Multiplicador = 1010 (1010 10 sem sinal) sem sinal)
00101001: -2MD
2: -MD
3: +MD
GrupoGrupo OperaçOperaçãoão
000000 --
001001 +MD+MD
010010 +MD+MD
011011 +2MD+2MD
100100 -2MD-2MD
101101 -MD-MD
110110 -MD-MD
111111 --
1: 1 * -2MD
2: 4 * -MD
3: 16 * MD
------------
P = 10 * MD
Algoritmo de Booth Algoritmo de Booth ModificadoModificado
Exemplo 2Exemplo 2 Multiplicador = 1010 (-6Multiplicador = 1010 (-610 10 com sinal) com sinal)
101001: -2MD
2: -MD
GrupoGrupo OperaçOperaçãoão
000000 --
001001 +MD+MD
010010 +MD+MD
011011 +2MD+2MD
100100 -2MD-2MD
101101 -MD-MD
110110 -MD-MD
111111 --
1: 1 * -2MD
2: 4 * -MD
------------
P = -6 * MD
Hardware do Booth Hardware do Booth ModificadoModificado
Visão top-levelVisão top-level
Multiplicador (MD) Multiplicando (MR)
Operando1
Operando2
Operando8
Produto (32 bits)
MD{13,14,15}
MD{1,2,3}
MD{-1,0,1} P{0,1}
P{2,3}
P{14,15}
P[31..16]
Hardware do Booth Hardware do Booth ModificadoModificado
OperandosOperandos
CodificadorBooth
Multiplexador(Inverte/desloca/zera MR)
SomadorMD
Produto ParcialDo Estágio Anterior
Produto ParcialPara o Próximo Estágio
3
16
MR
P{2n, 2n+1}
MR{2n-1, 2n, 2n+1}
Hardware do Booth Hardware do Booth ModificadoModificado
Codificador BoothCodificador Booth
MRn-
1MRn
MRn+
1
PassaMDn
DeslocaMDn
InverteMDn
Hardware do Booth Hardware do Booth ModificadoModificado
MultiplexerMultiplexer
PassaMDn
DeslocaMDn
InverteMDn
Do Mux a Dir.
Para Mux a Esq.
Hardware do Booth Hardware do Booth ModificadoModificado
SomadorSomador
Var (inv)A0 B0A1 B1A2 B2A16 B16
Cout S16 S2 S1 S0
Somador Ripple CarrySomador Ripple Carry
Requisitos para o Requisitos para o FemtoJavaFemtoJava
Multiplicação com e sem sinalMultiplicação com e sem sinal Possível através de pequenas adaptações Possível através de pequenas adaptações
na lógica do multiplicador e colocação de na lógica do multiplicador e colocação de um sinal de controleum sinal de controle
Multiplicação de 8 ou 16 bitsMultiplicação de 8 ou 16 bits Versão de 16 bits: implementadaVersão de 16 bits: implementada Versao de 8 bits (com multiplicador de 16 Versao de 8 bits (com multiplicador de 16
bits): possível através da extensão do bits): possível através da extensão do sinal do multiplicando e do multiplicadorsinal do multiplicando e do multiplicador
Projeto desenvolvidoProjeto desenvolvido
Implementação em VHDL de um Implementação em VHDL de um multiplicador booth para números com multiplicador booth para números com e sem sinale sem sinal Operandos de 17 bitsOperandos de 17 bits
Lógica de tratamento de sinalLógica de tratamento de sinal Extender os operandos para 17 bits (com Extender os operandos para 17 bits (com
ou sem sinal) para o multiplicador poder ou sem sinal) para o multiplicador poder tratar indistintamente números com e sem tratar indistintamente números com e sem sinalsinal
Teste de funcionamentoTeste de funcionamento
Projeto desenvolvidoProjeto desenvolvido
Para números com sinal (complemento Para números com sinal (complemento de 2)de 2) Faz a extensão de sinal dos operandos Faz a extensão de sinal dos operandos
durante a conversão de 16 para 17 bitsdurante a conversão de 16 para 17 bits Ignora os 2 bits mais significativos do Ignora os 2 bits mais significativos do
produtoproduto Para números sem sinalPara números sem sinal
Zera o bit mais significativo dos operandosZera o bit mais significativo dos operandos Ignora os 2 bits mais significativos do Ignora os 2 bits mais significativos do
produtoproduto
Projeto desenvolvidoProjeto desenvolvido
Recodificação do multiplicando: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 desenvolvidoProjeto desenvolvido
Somas parciaisSomas 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 desenvolvidoProjeto desenvolvido
Geração do produtoGeração do produtoa0: 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 desenvolvidoProjeto desenvolvido
Seleção de operação com ou sem sinalSeleçã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 desenvolvidoProjeto desenvolvido
SimulaçõesSimulações Verificação de funcionamentoVerificação de funcionamento
Vetores de teste que examinam possíveis Vetores de teste que examinam possíveis falhas na implementaçãofalhas na implementação
Não exaustivoNão exaustivo Medição do atrasoMedição do atraso
Atraso analíticoAtraso analítico caminho mais longo no datapathcaminho mais longo no datapath Pode ser um falso caminhoPode ser um falso caminho
Atraso máximo experimental:Atraso máximo experimental: Atraso mais realistaAtraso mais realista Pode não ser o maior atraso absolutoPode não ser o maior atraso absoluto
Projeto desenvolvidoProjeto desenvolvido
SimulaçõesSimulações
Multiplicação com sinalMultiplicação com sinal
Multiplicando (b) positivoMultiplicando (b) positivo
Multiplicador (a) positivo e negativoMultiplicador (a) positivo e negativo
Projeto desenvolvidoProjeto desenvolvido
SimulaçõesSimulações
Multiplicação com sinalMultiplicação com sinal
Multiplicando (b) negativoMultiplicando (b) negativo
Multiplicador (a) positivo e negativoMultiplicador (a) positivo e negativo
Projeto desenvolvidoProjeto desenvolvido
SimulaçõesSimulações
Multiplicação com sinalMultiplicação com sinal
Teste dos limitesTeste dos limites
Projeto desenvolvidoProjeto desenvolvido
SimulaçõesSimulações
Multiplicação com sinalMultiplicação com sinal
Teste dos limitesTeste dos limites
Projeto desenvolvidoProjeto desenvolvido
SimulaçõesSimulações
Multiplicação sem sinalMultiplicação sem sinal
Projeto desenvolvidoProjeto desenvolvido
SimulaçõesSimulações
Multiplicação sem sinalMultiplicação sem sinal
Projeto desenvolvidoProjeto desenvolvido
SimulaçõesSimulações
Multiplicação sem sinalMultiplicação sem sinal
Teste dos limitesTeste dos limites
Projeto desenvolvidoProjeto desenvolvido
SimulaçõesSimulações
Multiplicação sem sinalMultiplicação sem sinal
Teste dos limitesTeste dos limites
Projeto desenvolvidoProjeto desenvolvido
Maior atrasoMaior atraso Calculado pelo Quartus II: 68nsCalculado pelo Quartus II: 68ns Medido: ~50nsMedido: ~50ns
Não foram testadas todas as combinações de Não foram testadas todas as combinações de multiplicando e multiplicadormultiplicando e multiplicador
Projeto desenvolvidoProjeto desenvolvido
Inserção no FemtoJavaInserção no FemtoJava Substituição arquivo mul.vhdSubstituição arquivo mul.vhd Criação de uma instrução de Criação de uma instrução de
multiplicação com sinalmultiplicação com sinal Criação de lógica de controle de sinalCriação de lógica de controle de sinal
ConclusõesConclusões
Arquitetura relativamente regular, Arquitetura relativamente regular, mas com características que tiveram mas com características que tiveram que ser observadas para a obtenção que ser observadas para a obtenção do resultado corretodo resultado correto
Para suportar operações de 16 bits Para suportar operações de 16 bits com e sem sinal, um multiplicador de com e sem sinal, um multiplicador de 17 bits teve que ser implementado17 bits teve que ser implementado
Pipelines podem ser facilmente Pipelines podem ser facilmente inseridos, se necessárioinseridos, se necessário