multiplicação e divisão serial conceitos básicos moraes/ney - 07/novembro/2007
TRANSCRIPT
Multiplicação e Multiplicação e Divisão SerialDivisão Serial
Conceitos básicosConceitos básicos
Moraes/Ney - 07/novembro/2007
2
Representações de Inteiros - 4 formas-Exemplo para 4 bits
- * polarização = 2(n-1) =8
00000001
0010
0011
0100
0101
0110
011110001001
1010
1011
1100
11011110
1111
+0
+0
0
-8
+1+1
+1-7
+2+2
+2-6
+3+3
+3-5
+4 +4 +4 -4
+5+5
+5-3+6
+6+6
-2
+7+7
+7-1
+0-8
-7
-0-1
-6-7
+1
+2-6
-5-2+3
-5-4
-3
+4 -4 -3 -4
+5-3
-2-5
+6-2
-1-6
+7-1
-0-7 SM
1’s
2’s
BIAS*
ConfiguraçãoBinária
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;
3
Multiplicação serial
Solução para a*b: somas sucessivas n passos
Inicialmente, P=0, A=a, B=b. Cada passo, duas partes:– soma carregada em P;– P & A deslocado um bit para a direita.
+
P A
B
n
nn
DeslocamentoVai-um
4
A = 11011 (27)B = 00101 (5)
Multiplicação A*B
P Apasso 0 0 0 0 0 0 1 1 0 1 1
0 0 0 1 0 1 1 1 0 1 11
2
3
4
5
0 0 0 1 0 1 1 1 0 100 0 1 1 1 1 1 1 0 10
0 0 1 1 1 1 1 1 0000 0 1 1 1 1 1 1 000
0 0 1 1 1 1 1 10001 1 0 1 1 1 1 1000
1 1 0 1 1 1 100000 0 0 1 1 1 10100
0 0 0 1 1 101000
135 100 00111
5
A = 00110 (6)B = 01100 (12)
Multiplicação A*B
P Apasso
1
2
3
4
5
72 0100 1000
6
Solução para a/b: subtrações sucessivas, n passos
Cada passo, quatro partes: 1) desloca P&A p/ esq 1 bit; 2) P<- P-B; 3) If (passo 2<0), A0=0 else A0 =1; 4) If (passo 2<0), restaura P fazendo P<-P+B.
-+
P A
B
n
nn+1
Deslocamento
0
1
n+1
n+1
n+1
Controle
Divisão serial
7
A = 11011 (27)B = 00101 (5)
Divisão A/B
P (conterá o resto) A (conterá a divisão)passo 0 0 0 0 0 0 1 1 0 1 1
0 0 0 0 0 1 1 0 1 1 010 0 0 0 0 1 1 0 1 1 0
2
3
4
5
1) desloca P&A p/ esq 1 bit; 2) P P-B; 3) If (P<0), A0=0 else A0 =1; 4) If (P<0), restaura P fazendo P P+B
8
A = 11011 (27)B = 00101 (5)
P (conterá o resto) A (conterá a divisão)passo 0 0 0 0 0 0 1 1 0 1 1
0 0 0 0 0 1 1 0 1 1 010 0 0 0 0 1 1 0 1 1 00 0 0 0 1 1 0 1 1 0 020 0 0 0 1 1 0 1 1 0 0
3
4
5
Divisão A/B
1) desloca P&A p/ esq 1 bit; 2) P P-B; 3) If (P<0), A0=0 else A0 =1; 4) If (P<0), restaura P fazendo P P+B
9
A = 11011 (27)B = 00101 (5)
P (conterá o resto) A (conterá a divisão)passo 0 0 0 0 0 0 1 1 0 1 1
0 0 0 0 0 1 1 0 1 1 010 0 0 0 0 1 1 0 1 1 00 0 0 0 1 1 0 1 1 0 020 0 0 0 1 1 0 1 1 0 00 0 0 1 1 0 1 1 0 0 030 0 0 0 0 1 1 1 0 0 1
4
5
Divisão A/B
1) desloca P&A p/ esq 1 bit; 2) P P-B; 3) If (P<0), A0=0 else A0 =1; 4) If (P<0), restaura P fazendo P P+B
00110 - 00101 = 001
10
A = 11011 (27)B = 00101 (5)
P (conterá o resto) A (conterá a divisão)passo 0 0 0 0 0 0 1 1 0 1 1
0 0 0 0 0 1 1 0 1 1 010 0 0 0 0 1 1 0 1 1 00 0 0 0 1 1 0 1 1 0 020 0 0 0 1 1 0 1 1 0 00 0 0 1 1 0 1 1 0 0 030 0 0 0 0 1 1 1 0 0 10 0 0 0 1 1 1 0 0 1 040 0 0 0 1 1 1 0 0 1 0
5
Divisão A/B
1) desloca P&A p/ esq 1 bit; 2) P P-B; 3) If (P<0), A0=0 else A0 =1; 4) If (P<0), restaura P fazendo P P+B
11
A = 11011 (27)B = 00101 (5)
P (conterá o resto) A (conterá a divisão)passo 0 0 0 0 0 0 1 1 0 1 1
0 0 0 0 0 1 1 0 1 1 010 0 0 0 0 1 1 0 1 1 00 0 0 0 1 1 0 1 1 0 020 0 0 0 1 1 0 1 1 0 00 0 0 1 1 0 1 1 0 0 030 0 0 0 0 1 1 1 0 0 10 0 0 0 1 1 1 0 0 1 040 0 0 0 1 1 1 0 0 1 00 0 0 1 1 1 0 0 1 0 050 0 0 0 1 0 0 0 1 0 1
Resto = 2 resultado=5
Divisão A/B
1) desloca P&A p/ esq 1 bit; 2) P P-B; 3) If (P<0), A0=0 else A0 =1; 4) If (P<0), restaura P fazendo P P+B
12
VHDLentity divide is generic(N: integer := 16); port( divisor: in std_logic_vector( (N-1) downto 0); dividendo: in std_logic_vector( (N-1) downto 0); clock,start : in std_logic; endop : out std_logic; divisao : out std_logic_vector( N-1 downto 0); resto : out std_logic_vector( N-1 downto 0));end;
architecture rtl of divide is type State_type is (inicializa, desloca, calc, fim); signal EA: State_type; signal regP : std_logic_vector( N*2 downto 0); signal regB : std_logic_vector( N downto 0); signal diferenca : std_logic_vector( N downto 0); signal itershift: std_logic_vector( N downto 0); begin
regP( N*2 downto N) <= (others=>'0');regP( N-1 downto 0) <= divisor;regB( N ) <= '0'; regB( N-1 downto 0) <= dividendo;
INICIALIZAÇÕESregP(0)<='1';regP( N*2 downto N) <= diferenca;
regP <= regP( N*2-1 downto 0) & regP(N*2);
rotação
atribuição
13
Integração ao MIPS – bloco de controle
Reset=’1’ (todos os
registradores são zerados)
Swbk wreg wpc
Sfetch CY1
Sld ce wmdr
IR=LBU/LW
Sst rw0, ce, wpc bw0 se IR=SB
Ssalta wpc wreg se IR=JAL/JALR
Sreg CY2 Init_mul se IR=MULTU
IR=SB/ SW IR =J/JAL/JALR/JR /BEQ/
BGEZ/BLEZ/BNE
Sidle
Salu wAlu
Caso geral
Reset=’1’
Reset=’0’
IR=(MULTU e End_mul=’0’) ou (DIVU e End_div=’0’) (IR=MULTU e End_mul=’1’)
ou (IR=DIVU e End_div=’1’)
wpc
14
Integração ao MIPS – bloco de dados
wmdr
CY2
RB
CY2
RA
ce rw bw
D_address
ce/rw
outalu
walu
AL
U
RALU
OP1
data
Me
mó
ria
de
D
ad
os
CY2
IMED
OP2
MDR
RBRA comparador
RB
salta
x“000000” & data
HIMULT
DIV Lo
start_mult_div end_div
start_mult_div end_mult
result