Sumador/Restador en Punto Flotante IEEE 745 en el MIPS
-
Upload
pedro-daniel-ramirez-lopez -
Category
Engineering
-
view
159 -
download
12
Transcript of Sumador/Restador en Punto Flotante IEEE 745 en el MIPS
CYT808 Universidad Católica “Nuestra Señora de Asunción”Proyecto con
Microprocesadores IISede Regional Asunción
Ing. Electrónica Facultad de Ciencias y TecnologíaSemestre IX Departamento de Electrónica e Informática
Proyecto con Microprocesadores IIInforme de Trabajo Final
Sumador/Restador en Punto Flotante en el MIPS
Fecha: 1 de julio de 2013Pedro D. Ramírez LópezAlberto Gómez de la Fuente
0.1. Descripción del Proyecto
Diseño de un módulo de operaciones entre registros tipo coma flotante F-TYPE deMIPS con base en el estandar IEEE 754.
0.2. Diagrama de Bloques
Después de consultar algunos ejemplos sobre la manera de realizar el proyecto, sedecide que la mejor manera de implementar el diseño de este proyecto es mediante unbanco de datos propio, como se puede apreciar en la figura 1.
Para Obtener la Implementación en el Spartan 3AN completa del trabajo diríjase elsgte Link
Figura 1: Unidad de Punto Flotante con el Mips
AG-PR 1
CYT808 Universidad Católica “Nuestra Señora de Asunción”Proyecto con
Microprocesadores IISede Regional Asunción
Ing. Electrónica Facultad de Ciencias y TecnologíaSemestre IX Departamento de Electrónica e Informática
0.3. Diseño de Modulos de Operaciones Internos
0.3.1. Excepción
Este módulo puramente combinacional se encarga de comparar los registros que con-tienen los operandos de manera previa a la realización de cualquier operación con el finde revisar si se esta llegando a generar una excepción.
Data A Data B Flag Operation Data C Typexxxx xxxx Overflow add/sub Infinite Operation Processxxxx xxxx Underflow add/sub Zero Operation Process
Invalid OperationInfinite xxxx none add/sub NaN Propagationxxxx Infinite none add/sub NaN Propagation
Infinite Infinite none add/sub NaN PropagationNaN xxxx none add/sub NaN Propagationxxxx NaN none add/sub NaN PropagationNaN NaN none add/sub NaN Propagation
Cuadro 1: Manejador de Excepciones del FPU
0.3.2. Pre-Normalización
Este es un módulo donde:
1. Se debe decodificar la información de exponente que se encuentra en el respectivoregistro con el fin de procesarla.
2. Se debe hacer la correspondiente operación entre exponentes; es decir como losregistros se suman o restan, se debe hallar el exponente mayor entre ambos.
si
no
Figura 2: Diagrama de Flujo del Módulo de Pre-Normalización
AG-PR 2
CYT808 Universidad Católica “Nuestra Señora de Asunción”Proyecto con
Microprocesadores IISede Regional Asunción
Ing. Electrónica Facultad de Ciencias y TecnologíaSemestre IX Departamento de Electrónica e Informática
0.3.3. Suma/Resta
Este módulo debe:
1. Efectuar la operación teniendo en cuenta las consideraciones del estandar de tra-bajar con números con signo y no con complemento a dos.
2. Generar un flag de carry necesaria para el módulo de post-normalización.
si
si
nono
si
si
no nono
si
Figura 3: Diagrama de Flujo del Módulo de Suma y Resta(Big Alu)
0.3.4. Postnormalización
En este módulo se deben:
1. Efectuar corrimientos respectivos para lograr la normalización efectiva de la mantisacon el correspondiente aumento/disminución de pre_exp_result proveniente delmódulo de prenormalización.
2. Comprobar la que no haya desbordamiento o sub-desbordamiento de alguna de lasvariables de modo que no se llegen a estados obsoletos, para ello se deben generarlos flags de excepción underflow y overflow.
AG-PR 3
CYT808 Universidad Católica “Nuestra Señora de Asunción”Proyecto con
Microprocesadores IISede Regional Asunción
Ing. Electrónica Facultad de Ciencias y TecnologíaSemestre IX Departamento de Electrónica e Informática
shift_right_post_norm
PM_SR
mantisa_in(63:0)
carry
mantisa_out(63:0)
demux_64
PM_DEMUX_64
c(63:0)
sel
a(63:0)
b(63:0)
amount
PM_AMOUNT
pre_mant_c(63:0) shift_amount(10:0)
mux_64
PM_MUX_64
a(63:0)
b(63:0)
sel
c(63:0)
calcular_exponente
PM_CALCULAR
pre_exp(10:0)
shift_amount(10:0)
carry
mode
amount(10:0)
exponente(10:0)
overflow
shift_left_2
PM_SL
pre_mant_c(63:0)
shift_amount(10:0)
mant_shift(63:0)
or2
overflow_imp_overflow1
I0
I1O
exponente_final
PM_EXPONENTE_FINAL
exponente_in(10:0)
mantisa_shift_left(63:0)
carry
mode
exponente_out(10:0)
overflow
underflow
redondeo_52
PM_ROUND_52
mant_c(63:0) mantisa(51:0)
carry
underflow
or2
underflow_imp_underflow1
I0
I1O
post_norm:1
PM_POST_NORM
pre_exp(10:0)
pre_mant_c(63:0)
carry
mode
exponente(10:0)
mantisa(51:0)
overflow
underflow
Figura 4: Módulo de Post-Norm implementado en VHDL
0.4. Conversión de simple a doble precisión
Especificación del operador:
1. Entrada: SA (1 bit), EA (8 bits) y MA (23 bits)
2. Salida: SR(1 bit), ER (11 bits) y MR (52 bits)
3. El signo no cambia: SR = SA
4. Exponente: hay que cambiar de exceso 127 a exceso 1023
ER = EA + 896
Obs.: Los números desnormalizados son iguales excepto que exponente = −126 ymantisa = 0,Fracción. (exponente NO es -127 : la mantisa ha de ser desplazado ala derecha por un bit más, de forma que incluya el bit principal, que no siempre es 1en este caso. Esto se balancea incrementando el exponente a -126 para el cálculo.).Por lo tanto, para el caso desnormalizado se tiene que:
ER = EA + 896 + 1
5. Mantisa: hay que añadir 52-23 = 29 ceros a la derecha
MR = MA||00 · · · 0
6. Hay que tratar correctamente los valores especiales:
AG-PR 4
CYT808 Universidad Católica “Nuestra Señora de Asunción”Proyecto con
Microprocesadores IISede Regional Asunción
Ing. Electrónica Facultad de Ciencias y TecnologíaSemestre IX Departamento de Electrónica e Informática
EA SR ER MR
Zero 000000002 SA 000000000002 MA || 00 · · · 0Subnormal 000000002 SA 89610 MA || 00 · · · 0±∞ i NaN 111111112 SA 111111111112 MA || 00 · · · 0
Valores Corrientes (otros valores) SA EA + 896 MA || 00 · · · 0
Cuadro 2: Valores Especiales en el Estándar IEEE745
Tratamiento de los valores especiales Detalle del cálculo del exponente.
27
Conversión de simple a doble precisión
! El operador básico– No trata los valores especiales
SA EA MA
1 8 23
1 11 52
00..0
896 29
SR ER MR
28
Conversión de simple a doble precisión
! Tratamiento de los valores especiales– Detalle del cálculo del exponente
1 8 23
DEC
0
1…254
255
MUX
896
11
8
1 11 52
SR ER MR
SA EA MA
00…02 11…12
Figura 5: Diagrama en bloques del Hardware simple a double precisión.
0.5. Conversión de doble a simple precisión
0.5.1. Estructura del operador
1. El signo no cambia
2. Exponente: hay que cambiar de 11 bits en exceso 1023 a 8 bits en exceso127
Puede darse desbordamiento
3. Mantisa: hay que eliminar 29 bits por la derecha y redondear
AG-PR 5
CYT808 Universidad Católica “Nuestra Señora de Asunción”Proyecto con
Microprocesadores IISede Regional Asunción
Ing. Electrónica Facultad de Ciencias y TecnologíaSemestre IX Departamento de Electrónica e Informática
29
Conversión de doble a simple precisión
! Estructura del operador– El signo no cambia
– Exponente: hay que cambiar de 11 bits en exceso 1023 a 8 bits enexceso 127
• puede darse desbordamiento
– Mantisa: hay que eliminar 29 bits por la derecha y redondear
S E M
1 8 23
S E M
1 11 52
–896
Redondeo
cA
30
El redondeo
! Circuito para el redondeo al más próximo
R
M (simple precisión)
cA
b51 b50 … b29 b28 b27 … b0
redondeo
guar
da
retenidos
0
b29 g red R
x 0 x 0
0 1 0 01 1 0 1x 1 1 10 1
MUX
0 1.1111111 1
10.00000
1.00000
+
1.1001101 0
1.10011
+
Si R=0, truncar:
Si R=1, incrementar:
1.1001111 1
1.10100
+
implícito
Si cA=1, corregir
Figura 6: Diagrama en bloques del Hardware double a simple precisión.
0.6. El redondeo
Circuito para el redondeo al más próximo
29
Conversión de doble a simple precisión
! Estructura del operador– El signo no cambia
– Exponente: hay que cambiar de 11 bits en exceso 1023 a 8 bits enexceso 127
• puede darse desbordamiento
– Mantisa: hay que eliminar 29 bits por la derecha y redondear
S E M
1 8 23
S E M
1 11 52
–896
Redondeo
cA
30
El redondeo
! Circuito para el redondeo al más próximo
R
M (simple precisión)
cA
b51 b50 … b29 b28 b27 … b0
redondeo
guar
da
retenidos
0
R
0
0110 1
MUX
0
1.1111111 1
10.00000
1.00000
+
1.1001101 0
1.10011
+
Si R=0, truncar:
Si R=1, incrementar:
1.1001111 1
1.10100
+
implícito
Si cA=1, corregir
Figura 7: Diagrama en boques del Hardware de redondeo.
AG-PR 6
CYT808 Universidad Católica “Nuestra Señora de Asunción”Proyecto con
Microprocesadores IISede Regional Asunción
Ing. Electrónica Facultad de Ciencias y TecnologíaSemestre IX Departamento de Electrónica e Informática
b29 guarda redondeo RX 0 X 00 1 0 01 1 0 1X 1 1 1
Cuadro 3: Tabla de verdad del Algoritmo de redondeo al más próximo
Casos de valores de R
Si R = 0, Truncar
29
Conversión de doble a simple precisión
! Estructura del operador– El signo no cambia
– Exponente: hay que cambiar de 11 bits en exceso 1023 a 8 bits enexceso 127
• puede darse desbordamiento
– Mantisa: hay que eliminar 29 bits por la derecha y redondear
S E M
1 8 23
S E M
1 11 52
–896
Redondeo
cA
30
El redondeo
! Circuito para el redondeo al más p
R
M (simple precisión)
cA
b51 b50 … b29 b28 b27 … b0
redondeo
guar
da
retenidos
0
b29 g red R
x 0 x 0
0 1 0 01 1 0 1x 1 1 10 1
MUX
0 1.1111111 1
10.00000
1.00000
+
1.1001101 0
1.10011
+
Si R=1, incrementar:
1.1001111 1
1.10100
+
implícito
Si cA=1, corregir
Figura 8: Caso de R = 0
Si R = 1, Incrementar
29
Conversión de doble a simple precisión
! Estructura del operador– El signo no cambia
– Exponente: hay que cambiar de 11 bits en exceso 1023 a 8 bits enexceso 127
• puede darse desbordamiento
– Mantisa: hay que eliminar 29 bits por la derecha y redondear
S E M
1 8 23
S E M
1 11 52
–896
Redondeo
cA
30
El redondeo
! Circuito para el redondeo al más próximo
R
M (simple precisión)
cA
b51 b50 … b29 b28 b27 … b0
redondeo
guar
da
retenidos
0
b29 g red R
x 0 x 0
0 1 0 01 1 0 1x 1 1 10 1
MUX
0 1.1111111 1
10.00000
1.00000
+
1.1001101 0
1.10011
+
Si R=0, truncar:
Si R=1, incrementar:
1.1001111 1
1.10100
+
implícito
Si cA=1, corregirFigura 9: Caso R = 1
Si CA = 1, Corregir
AG-PR 7
CYT808 Universidad Católica “Nuestra Señora de Asunción”Proyecto con
Microprocesadores IISede Regional Asunción
Ing. Electrónica Facultad de Ciencias y TecnologíaSemestre IX Departamento de Electrónica e Informática
29
Conversión de doble a simple precisión
! Estructura del operador– El signo no cambia
– Exponente: hay que cambiar de 11 bits en exceso 1023 a 8 bits enexceso 127
• puede darse desbordamiento
– Mantisa: hay que eliminar 29 bits por la derecha y redondear
S E M
1 8 23
S E M
1 11 52
–896
Redondeo
cA
30
El redondeo
! Circuito para el redondeo al más próximo
R
M (simple precisión)
cA
b51 b50 … b29 b28 b27 … b0
redondeo
guar
daretenidos
0
b29 g red R
x 0 x 0
0 1 0 01 1 0 1x 1 1 10 1
MUX
0 1.1111111 1
10.00000
1.00000
+
1.1001101 0
1.10011
+
Si R=0, truncar:
Si R=1, incrementar:
1.1001111 1
1.10100
+
implícito
Si c
Figura 10: Caso CA = 1
0.7. Resultados
Aquí el código del test bench de la implementacion en vhdl del trabajo
LIBRARY ieee;USE ieee.std_logic_1164.ALL;
-- Uncomment the following library declaration if using-- arithmetic functions with Signed or Unsigned values--USE ieee.numeric_std.ALL;
ENTITY floating_point_unit_tbm ISEND floating_point_unit_tbm;
ARCHITECTURE behavior OF floating_point_unit_tbm IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT floating_point_unitPORT(
a1 : IN std_logic_vector(31 downto 0);a2 : IN std_logic_vector(31 downto 0);b1 : IN std_logic_vector(31 downto 0);b2 : IN std_logic_vector(31 downto 0);mode : IN std_logic;operation : IN std_logic;c1 : OUT std_logic_vector(31 downto 0);c2 : OUT std_logic_vector(31 downto 0)
);END COMPONENT;
--Inputssignal a1 : std_logic_vector(31 downto 0) := (others => ’0’);signal a2 : std_logic_vector(31 downto 0) := (others => ’0’);signal b1 : std_logic_vector(31 downto 0) := (others => ’0’);
AG-PR 8
CYT808 Universidad Católica “Nuestra Señora de Asunción”Proyecto con
Microprocesadores IISede Regional Asunción
Ing. Electrónica Facultad de Ciencias y TecnologíaSemestre IX Departamento de Electrónica e Informática
signal b2 : std_logic_vector(31 downto 0) := (others => ’0’);signal mode : std_logic := ’0’;signal operation : std_logic := ’0’;
--Outputssignal c1 : std_logic_vector(31 downto 0);signal c2 : std_logic_vector(31 downto 0);
BEGIN
-- Instantiate the Unit Under Test (UUT)uut: floating_point_unit PORT MAP (
a1 => a1,a2 => a2,b1 => b1,b2 => b2,mode => mode,operation => operation,c1 => c1,c2 => c2
);-- Stimulus processstim_proc: processbegin
-- hold reset state for 100 ns.wait for 100 ns;
-- insert stimulus here--Modo simplea1 <= X"40C80000";--6.25
a2 <= X"00000000";b1 <= X"40C80000";b2 <= X"00000000";mode <= ’0’; -- simpleoperation <= ’0’; -- suma
wait for 100 ns;
a1 <= X"40C80000";--6.25a2 <= X"00000000";b1 <= X"40200000";--2.5b2 <= X"00000000";mode <= ’0’; -- simpleoperation <= ’1’; -- resta
wait for 100 ns;
AG-PR 9
CYT808 Universidad Católica “Nuestra Señora de Asunción”Proyecto con
Microprocesadores IISede Regional Asunción
Ing. Electrónica Facultad de Ciencias y TecnologíaSemestre IX Departamento de Electrónica e Informática
a1 <= X"40C80000";--6.25a2 <= X"00000000";b1 <= X"40C80000";--2.5b2 <= X"00000000";mode <= ’0’; -- simpleoperation <= ’1’; -- resta
wait for 100 ns;
a1 <= X"41020000";--8.125a2 <= X"00000000";b1 <= X"41020000";--8.125b2 <= X"00000000";mode <= ’0’; -- simpleoperation <= ’1’; -- resta
wait for 100 ns;
a1 <= X"3FF40000";--1.25 en doublea2 <= X"00000000";b1 <= X"3FD00000";--0.25 en doubleb2 <= X"00000000";mode <= ’1’; -- doubleoperation <= ’1’; -- resta
wait for 100 ns;
a1 <= X"3FF40000";--1.25 en doublea2 <= X"00000000";b1 <= X"3FD00000";--0.25 en doubleb2 <= X"00000000";mode <= ’1’; -- doubleoperation <= ’0’; -- suma
wait for 100 ns;wait;
end process;
END;
AG-PR 10
CYT808 Universidad Católica “Nuestra Señora de Asunción”Proyecto con
Microprocesadores IISede Regional Asunción
Ing. Electrónica Facultad de Ciencias y TecnologíaSemestre IX Departamento de Electrónica e Informática
Los resultados se pueden ver en la formas de onda de salida donde los resultados estanen hexadecimal, a1,a2 es el primer operando, b1,b2 es el segundo operando, c1,c2 esel resultado, mode es ’0’ en forma simple y ’1’ en forma double, operation es una restacuando es ’1’ y ’0’ cuando es una suma, Si se opera en fornato simple solo se opera sobrelos operandos a1,b1 y el resultado tiene sentido solo en c1, en caso de operar en mododouble los operandos son en conjunto a1&a2(64 bits) y b1&b2(64 bits) y el resultado esc1&c2(64 bits).
0 ns 100 ns 200 ns 300 ns 400 ns 500 ns 600 ns 700 ns
Figura 11: Resultados de la FPU
0.8. Referencias
1. Organización y Diseño de Computadores David A. Patterson, McGraw Hill, 3ThEdición
2. http://www.zator.com/Cpp/E2_2_4a1.htm
3. http://www6.uniovi.es/ãntonio/uned/ieee754/IEEE-754hex32.html
4. http://babbage.cs.qc.cuny.edu/IEEE-754.old/64bit.html
5. http://www.h-schmidt.net/FloatConverter/
6. http://www.mipshelper.com/mips-converter.php
AG-PR 11