Three Ee6366
Three Ee6366
Three Ee6366
Tercer Laboratorio
2010-I
INDICE
1. INTRODUCCIÓN
Divisor de 2 números
4. RESULTADOS OBTENIDOS
5. OBSERVACIONES Y CONCLUSIONES
1. Introducción
1.2 Alcance
En este informe se incluye la metodología utilizada para poder diseñar los módulos
requeridos obteniendo su descripción de hardware en VHDL y finalmente los
resultados obtenidos de las simulaciones para cada uno de estos.
Nombre Descripción
del del Bloque Notación Notación
Módulo Funcional (Entradas) (Salidas)
Dividendo Registro dividendo[(2n-1)..0],desplaza, residuo[(n-1..0)]
dividendo de carga_alu,carga_dividendo,shift_in, cociente[(n-1..0)],
2n bits clk signo
Divisor Registro in_divisor[(n-1)..0] out_divisor[(n-1)..0]
divisor de n ,carga_divisor,clk
bits
Alu Sumador residuo[(n-1)..0], out_alu[(n-1)...0]
/Restador de out_divisor[(n-1..0)],restar
n bits
Control Unidad de Inicio,signo,clk Carga_divisor,carga_
Control del alu,carga_dividendo,
Sistema fin,restar,desplaza
Para esto, tomar en cuenta que la señal clk,es una onda cuadrada de frecuencia
muy baja. Para la simulación escoger una frecuencia de reloj de 10Mhz.
Para poder diseñar cada modulo fue muy importante identificar cual es la función
que realiza distinguiendo como cambian sus salidas para cada posible entrada y
recordando por cursos anteriores el funcionamiento de cada modulo reconocido
para poder detallar su funcionamiento al detalle en el lenguaje de descripción de
hardware.
library IEEE;
use IEEE.std_logic_1164.all;
entity dividendo is
generic (n:in natural :=8);
port(
if carga_dividendo='1' then
q<=dividendo;
elsif carga_alu='1'then
q(2*n-1 downto n)<=out_alu;
end if;
end if;
cociente<=q(n-1 downto 0);
residuo<=q(2*n-1 downto n);
signo<=q(2*n-1);
end process;
end;
3.2.1b Modulo Divisor: Este modulo es una versión simplificada del anterior solo
necesitamos cargar la entrada al registro, por lo tanto el código VHDL es el
siguiente:
library IEEE;
use IEEE.std_logic_1164.all;
entity divisor is
3.2.1c Modulo Alu: Este modulo es un sumador / restador de n bits, en este caso
tomamos como base el full adder de 4 bits y utilizamos el carry de entrada como la
entrada restar, que al conectarlo mediante un X-OR con cada bit de out_divisor
nos diferenciara la suma o resta de los n bits. El código VHDL es el siguiente:
library ieee;
use ieee.std_logic_1164.all;
entity alu is
generic(n:in natural:=8);
port
(
if restar='0' then
for i in 0 to n-1 loop
out_alu(i) <= residuo(i) xor out_divisor(i) xor c(i);
c(i+1) <= (residuo(i) and out_divisor(i))or(residuo(i) and c(i))or(out_divisor(i) and
c(i));
end loop;
else
for i in 0 to n-1 loop
out_alu(i)<= residuo(i) xor ( not out_divisor(i)) xor c(i);
c(i+1) <= (residuo(i) and (not out_divisor(i)))or(residuo(i) and c(i))or((not
out_divisor(i)) and c(i));
end loop;
end if;
end process;
end sumador;
4. RESULTADOS OBTENIDOS:
a) Simulación Funcional
b)Simulación Temporal
a)Simulación Funcional
Se nota fácilmente que el registro carga sus entradas con cada flanco de subida del
reloj,
b) Simulación Temporal
Notamos claramente los retardos propios de un caso real, sin embargo la carga de
los registros no se ve afectada.
5. OBSERVACIONES Y CONCLUSIONES