Tinciones simples en el laboratorio de microbiología
Sumador/Restador en Punto Flotante IEEE 745 en el MIPS
1. CYT808 Universidad Católica “Nuestra Señora de Asunción”
Proyecto con
Microprocesadores II
Sede Regional Asunción
Ing. Electrónica Facultad de Ciencias y Tecnología
Semestre IX Departamento de Electrónica e Informática
Proyecto con Microprocesadores II
Informe de Trabajo Final
Sumador/Restador en Punto Flotante en el MIPS
Fecha: 1 de julio de 2013
Pedro D. Ramírez López
Alberto 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 de
MIPS 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, se
decide que la mejor manera de implementar el diseño de este proyecto es mediante un
banco 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 el
sgte Link
Figura 1: Unidad de Punto Flotante con el Mips
AG-PR 1
2. CYT808 Universidad Católica “Nuestra Señora de Asunción”
Proyecto con
Microprocesadores II
Sede Regional Asunción
Ing. Electrónica Facultad de Ciencias y Tecnología
Semestre 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 fin
de revisar si se esta llegando a generar una excepción.
Data A Data B Flag Operation Data C Type
xxxx xxxx Overflow add/sub Infinite Operation Process
xxxx xxxx Underflow add/sub Zero Operation Process
Invalid Operation
Infinite xxxx none add/sub NaN Propagation
xxxx Infinite none add/sub NaN Propagation
Infinite Infinite none add/sub NaN Propagation
NaN xxxx none add/sub NaN Propagation
xxxx NaN none add/sub NaN Propagation
NaN 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 respectivo
registro con el fin de procesarla.
2. Se debe hacer la correspondiente operación entre exponentes; es decir como los
registros 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
3. CYT808 Universidad Católica “Nuestra Señora de Asunción”
Proyecto con
Microprocesadores II
Sede Regional Asunción
Ing. Electrónica Facultad de Ciencias y Tecnología
Semestre 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 mantisa
con el correspondiente aumento/disminución de pre_exp_result proveniente del
módulo de prenormalización.
2. Comprobar la que no haya desbordamiento o sub-desbordamiento de alguna de las
variables de modo que no se llegen a estados obsoletos, para ello se deben generar
los flags de excepción underflow y overflow.
AG-PR 3
4. CYT808 Universidad Católica “Nuestra Señora de Asunción”
Proyecto con
Microprocesadores II
Sede Regional Asunción
Ing. Electrónica Facultad de Ciencias y Tecnología
Semestre 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
I1
O
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
I1
O
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 y
mantisa = 0, Fracción. (exponente NO es -127 : la mantisa ha de ser desplazado a
la derecha por un bit más, de forma que incluya el bit principal, que no siempre es 1
en 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
5. CYT808 Universidad Católica “Nuestra Señora de Asunción”
Proyecto con
Microprocesadores II
Sede Regional Asunción
Ing. Electrónica Facultad de Ciencias y Tecnología
Semestre IX Departamento de Electrónica e Informática
EA SR ER MR
Zero 000000002 SA 000000000002 MA || 00 · · · 0
Subnormal 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
! 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 exceso
127
Puede darse desbordamiento
3. Mantisa: hay que eliminar 29 bits por la derecha y redondear
AG-PR 5
6. CYT808 Universidad Católica “Nuestra Señora de Asunción”
Proyecto con
Microprocesadores II
Sede Regional Asunción
Ing. Electrónica Facultad de Ciencias y Tecnología
Semestre 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 en
exceso 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
guarda
retenidos
0
b29 g red R
x 0 x 0
0 1 0 0
1 1 0 1
x 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 en
exceso 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
guarda
retenidos
0
R
0
0
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 7: Diagrama en boques del Hardware de redondeo.
AG-PR 6
7. CYT808 Universidad Católica “Nuestra Señora de Asunción”
Proyecto con
Microprocesadores II
Sede Regional Asunción
Ing. Electrónica Facultad de Ciencias y Tecnología
Semestre IX Departamento de Electrónica e Informática
b29 guarda redondeo R
X 0 X 0
0 1 0 0
1 1 0 1
X 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
– El signo no cambia
– Exponente: hay que cambiar de 11 bits en exceso 1023 a 8 bits en
exceso 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
guarda
retenidos
0
b29 g red R
x 0 x 0
0 1 0 0
1 1 0 1
x 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
structura del operador
– El signo no cambia
– Exponente: hay que cambiar de 11 bits en exceso 1023 a 8 bits en
exceso 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
edondeo
rcuito para el redondeo al más próximo
R
M (simple precisión)
1 b50 … b29 b28 b27 … b0
redondeo
guarda
retenidos
0
b29 g red R
x 0 x 0
0 1 0 0
1 1 0 1
x 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 9: Caso R = 1
Si CA = 1, Corregir
AG-PR 7
8. CYT808 Universidad Católica “Nuestra Señora de Asunción”
Proyecto con
Microprocesadores II
Sede Regional Asunción
Ing. Electrónica Facultad de Ciencias y Tecnología
Semestre IX Departamento de Electrónica e Informática
30
ircuito para el redondeo al más próximo
R
M (simple precisión)
1 b50 … b29 b28 b27 … b0
redondeo
guarda
retenidos
0
b29 g red R
x 0 x 0
0 1 0 0
1 1 0 1
x 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 IS
END floating_point_unit_tbm;
ARCHITECTURE behavior OF floating_point_unit_tbm IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT floating_point_unit
PORT(
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;
--Inputs
signal 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
9. CYT808 Universidad Católica “Nuestra Señora de Asunción”
Proyecto con
Microprocesadores II
Sede Regional Asunción
Ing. Electrónica Facultad de Ciencias y Tecnología
Semestre 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’;
--Outputs
signal 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 process
stim_proc: process
begin
-- hold reset state for 100 ns.
wait for 100 ns;
-- insert stimulus here
--Modo simple
a1 <= X"40C80000";--6.25
a2 <= X"00000000";
b1 <= X"40C80000";
b2 <= X"00000000";
mode <= ’0’; -- simple
operation <= ’0’; -- suma
wait for 100 ns;
a1 <= X"40C80000";--6.25
a2 <= X"00000000";
b1 <= X"40200000";--2.5
b2 <= X"00000000";
mode <= ’0’; -- simple
operation <= ’1’; -- resta
wait for 100 ns;
AG-PR 9
10. CYT808 Universidad Católica “Nuestra Señora de Asunción”
Proyecto con
Microprocesadores II
Sede Regional Asunción
Ing. Electrónica Facultad de Ciencias y Tecnología
Semestre IX Departamento de Electrónica e Informática
a1 <= X"40C80000";--6.25
a2 <= X"00000000";
b1 <= X"40C80000";--2.5
b2 <= X"00000000";
mode <= ’0’; -- simple
operation <= ’1’; -- resta
wait for 100 ns;
a1 <= X"41020000";--8.125
a2 <= X"00000000";
b1 <= X"41020000";--8.125
b2 <= X"00000000";
mode <= ’0’; -- simple
operation <= ’1’; -- resta
wait for 100 ns;
a1 <= X"3FF40000";--1.25 en double
a2 <= X"00000000";
b1 <= X"3FD00000";--0.25 en double
b2 <= X"00000000";
mode <= ’1’; -- double
operation <= ’1’; -- resta
wait for 100 ns;
a1 <= X"3FF40000";--1.25 en double
a2 <= X"00000000";
b1 <= X"3FD00000";--0.25 en double
b2 <= X"00000000";
mode <= ’1’; -- double
operation <= ’0’; -- suma
wait for 100 ns;
wait;
end process;
END;
AG-PR 10
11. CYT808 Universidad Católica “Nuestra Señora de Asunción”
Proyecto con
Microprocesadores II
Sede Regional Asunción
Ing. Electrónica Facultad de Ciencias y Tecnología
Semestre IX Departamento de Electrónica e Informática
Los resultados se pueden ver en la formas de onda de salida donde los resultados estan
en hexadecimal, a1,a2 es el primer operando, b1,b2 es el segundo operando, c1,c2 es
el resultado, mode es ’0’ en forma simple y ’1’ en forma double, operation es una resta
cuando es ’1’ y ’0’ cuando es una suma, Si se opera en fornato simple solo se opera sobre
los operandos a1,b1 y el resultado tiene sentido solo en c1, en caso de operar en modo
double los operandos son en conjunto a1&a2(64 bits) y b1&b2(64 bits) y el resultado es
c1&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, 3Th
Edició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