Multiplicao e Diviso Serial Conceitos bsicos MoraesNey 16junho2020
Multiplicação e Divisão Serial Conceitos básicos Moraes/Ney - 16/junho/2020
2 Representações de Inteiros - 4 formas -8 0 +0 1101 +4 -4 -3 -4 +3 -5 -3 Configuração Binária 1100 1010 -2 -6 +2 -5 - * polarização = 2(n-1) =8 Æ Bias tem distribuição uniforme com relação a binários puros Æ Complemento de 2 facilita soma Æ Complemento de 1 facilita complementação Æ SM é fácil de entender e separa sinal de valor 0011 1011 -4 -Exemplo para 4 bits BIAS* +7 -7 2’s -1 +1 +6 1’s -6 -0 +1 -2 +2 +0 SM -7 +2 -1 +1 +5 0000 -6 1111 -5 0001 +2 -3 +3 -2 0010 1110 +3 -5 +3 -0 -7 -8 +0 +4 +4 +4 -4 0101 0110 1001 1000 0111 -1 -6 -7 +1 0100 +6 +5 +5 +5 +6 +7 -2 +7 -1 -3
3 Multiplicação serial Æ Solução para a*b: somas sucessivas n passos Deslocamento Vai-um P A n n + B n Æ Inicialmente, P=0, A=a, B=b. Cada passo, duas partes – – soma carregada em P P & A deslocado um bit para a direita
4 Multiplicação A*B A = 11011 B = 00101 passo 1 2 3 4 5 0 0 0 (27) (5) 0 0 0 135 100 00111 0 0 0 0 0 1 0 P 0 1 0 0 1 1 0 0 0 1 1 1 1 0 0 0 1 1 1 1 1 0 A 0 0 1 1 1 1 1 1 0 0 1 1 1
5 Multiplicação A*B - Exercício A = 00110 B = 01100 (6) (12) 72 0100 1000 P passo 1 2 3 4 5 A
6 Divisão serial Ø Solução para a/b: subtrações sucessivas, n passos Deslocamento n+1 P A n+1 + Controle n+1 0 1 B n Ø Cada passo, quatro partes 1) desloca P&A p/ esq 1 bit 2) P<- P-B 3) If (passo 2<0), A 0=0 else A 0 =1 4) If (passo 2<0), restaura P fazendo P<-P+B n
7 Divisão A/B A = 11011 B = 00101 passo 1 2 3 4 5 0 0 0 (27) (5) 1) desloca P&A p/ esq 1 bit 2) P P-B 3) If (P<0), A 0=0 else A 0 =1 4) If (P<0), restaura P fazendo P P+B P (conterá o resto) 0 0 0 0 0 1 A (conterá a divisão) 1 1 0 1 1 0
8 Divisão A/B A = 11011 (27) B = 00101 (5) passo 1 2 3 4 5 0 0 0 1) desloca P&A p/ esq 1 bit 2) P P-B 3) If (P<0), A 0=0 else A 0 =1 4) If (P<0), restaura P fazendo P P+B P (conterá o resto) 0 0 0 0 0 1 1 0 0 0 1 1 A (conterá a divisão) 1 1 0 1 1 0 0 0 1 1 0 0
9 Divisão A/B A = 11011 (27) B = 00101 (5) passo 1 2 3 0 0 0 0 1) desloca P&A p/ esq 1 bit 2) P P-B 3) If (P<0), A 0=0 else A 0 =1 4) If (P<0), restaura P fazendo P P+B P (conterá o resto) 0 0 0 0 0 1 1 0 0 0 1 4 5 00110 - 00101 = 001 A (conterá a divisão) 1 1 0 1 1 0 0 0 1 1 0 0 1
10 Divisão A/B A = 11011 (27) B = 00101 (5) passo 1 2 3 4 5 0 0 0 0 0 1) desloca P&A p/ esq 1 bit 2) P P-B 3) If (P<0), A 0=0 else A 0 =1 4) If (P<0), restaura P fazendo P P+B P (conterá o resto) 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 1 A (conterá a divisão) 1 1 0 1 1 0 0 0 1 1 0 0 1 0
11 Divisão A/B 1) desloca P&A p/ esq 1 bit 2) P P-B 3) If (P<0), A 0=0 else A 0 =1 4) If (P<0), restaura P fazendo P P+B A = 11011 (27) B = 00101 (5) passo 1 2 3 4 5 0 0 0 P (conterá o resto) 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 1 1 0 0 0 1 0 Resto = 2 A (conterá a divisão) 1 1 0 1 1 0 0 0 1 1 0 0 1 0 0 0 0 1 resultado=5
12 VHDL entity divide is generic(N: integer : = 16); port(divisor: in dividendo: in clock, start: in endop: out divisao: out resto: out end; std_logic_vector((N-1) downto 0); std_logic; std_logic_vector(N-1 downto 0); std_logic_vector(N-1 downto 0)); architecture divide of divide is type State_type is (inicializa, desloca, calc, termina, fim); signal EA: State_type; signal reg. P: reg. B: diferenca: cont: std_logic_vector(N*2 downto 0); std_logic_vector(N downto 0); integer; begin INICIALIZAÇÕES reg. P(N*2 downto N) <= (others=>'0'); reg. P(N-1 downto 0) <= divisor; reg. B(N) <= '0'; reg. B(N-1 downto 0) <= dividendo; atribuição diferenca <= reg. P(N*2 downto N) reg. P(0)<='1'; reg. P(N*2 downto N) <= diferenca; reg. B(N downto 0); rotação reg. P <= reg. P(N*2 -1 downto 0) & reg. P(N*2);
13 Integração ao MIPS – bloco de controle
14 Integração ao MIPS – bloco de dados end_div start_mult_div DIV Lo data result end_mult start_mult_div MULT HI ce rw bw x“ 000000” & data OP 1 Memóri a de Dados RA RB OP 2 RALU walu MDR D_address A outalu L U CY 2 wmdr CY 2 ce/rw IMED CY 2 RB comparador RA RB salta
- Slides: 14