Vous êtes sur la page 1sur 10

UNIVERSIDAD NACIONAL DE INGENIERÍA

FACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

SISTEMAS DIGITALES II – EE636M

Tercer Laboratorio

1er Informe Previo

Integrante: ROJAS HERRERA ANTONIO 20052047B

Horario: Lunes 13:00 – 15:00

Profesor: Briceño Aranda Cesar Alberto

Fecha de presentación: 24 de Mayo del 2010

2010-I
INDICE

1. INTRODUCCIÓN

1.1 Objeto del documento


1.2 Alcance
1.3 Contenido del documento
1.4 Convenciones notacionales

2. PLANTEAMIENTO DEL PROBLEMA

Divisor de 2 números

3. DESCRIPCIÓN GENERAL DE LA SOLUCIÓN

3.1 Metodología de trabajo


3.2 Solución del problema
3.2.1a.Esbozo de la descripción de hardware del módulo dividendo
3.2.1b.Esbozo de la descripción de hardware del módulo divisor
3.2.1c.Esbozo de la descripción de hardware del módulo Alu

4. RESULTADOS OBTENIDOS

4.1 Resultados parciales del modulo dividendo


4.2 Resultados parciales del modulo divisor
4.3 Resultados parciales del modulo Alu

5. OBSERVACIONES Y CONCLUSIONES
1. Introducción

Este informe nos da una descripción parcial al diseño requerido en la presente


experiencia de laboratorio del curso de Sistemas Digitales II, el cual proporciona
un primer panorama mediante las simulaciones y observaciones que se obtuvieron
del código VHDL planteado que se mostrara en el presente informe.

1.1 Objeto del documento

El presente documento es el primer informe previo de la tercera experiencia de


laboratorio del curso, con el principal objetivo de analizar el funcionamiento de
cada módulo en forma independiente para finalmente poder sintetizarlos conforme
se continúe con la experiencia.

1.2 Alcance

Se ha diseñado, codificado y simulado satisfactoriamente tres de los cuatro


módulos solicitados y se ha comprobado su funcionamiento en forma independiente
según lo requerido.

1.3 Contenido del documento

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.

1.4 Convenciones Notacionales

Se siguió estrictamente la notación especificada en la guía de laboratorio para


evitar confusiones, no hubo necesidad de agregar alguna variable.
2. PLANTEAMIENTO DEL PROBLEMA

Diseñar, simular e implementar un circuito secuencial síncrono, utilizando la


herramienta de diseño digital Quartus II de Altera, que realice la división de dos
números. Implementar la especificación en forma jerárquica del circuito divisor,
usando el lenguaje de descripción de hardware VHDL. Se utilizara para esto, un
archivo de tope (división) y 4 módulos.

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.

3. Descripción General de la Solución

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.

3.1 Metodología de la Solución


a) Reconocimiento del Modulo: La descripción del bloque funcional fue esencial
ya que es lo requerido para ser diseñado.

b) Identificación de entradas: Es aquí donde entendemos que es lo que


ocasiona cada una de estas y como modifican la salida del modulo.

c) Codificación VHDL: Procedemos a realizar la descripción de hardware de


cada bloque detallando el funcionamiento para cada combinación de las
entradas.

d) Simulación y Verificación: Corroboramos el funcionamiento óptimo de


nuestros diseños, en este informe se presenta la simulación temporal y en
especial la funcional ya que nuestro objetivo es asegurar la performance
ideal en los módulos.
3.2 Solución del Problema

3.2.1a Modulo Dividendo:


Según la tabla este modulo es un registro de 2n bits, por lo tanto su
funcionamiento como todo registro es básicamente el de cargar datos en cada
flanco de subida del reloj, siempre que su señal de carga este en “1”.

Adicionalmente se aprecia que tiene una entrada desplaza que origina un


desplazamiento circular a la izquierda de todo el registro. Finalmente la entrada
carga_alu actualiza los “n” bits más significativos del registro, según estas
condiciones el codigo VHDL es el siguiente:

library IEEE;
use IEEE.std_logic_1164.all;
entity dividendo is
generic (n:in natural :=8);
port(

dividendo:in std_logic_vector(2*n-1 downto 0);


desplaza:in std_logic;
carga_alu:in std_logic;
carga_dividendo:in std_logic;
shift_in:in std_logic;
clk:in std_logic;
out_alu:in std_logic_vector(n-1 downto 0);
residuo:out std_logic_vector(n-1 downto 0);
cociente:out std_logic_vector(n-1 downto 0);
signo:out std_logic
);
end ;

architecture divide of dividendo is


signal q:std_logic_vector(2*n-1 downto 0);
begin
process(clk,carga_dividendo,desplaza,carga_alu)
begin

if clk'event and clk='1' then

if carga_dividendo='1' then
q<=dividendo;

elsif desplaza='1' then


q<=q(2*n-2 downto 0)&q(2*n-1);

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

generic(n:in natural :=8);

port (in_divisor:in std_logic_vector(n-1 downto 0);


clk:in std_logic;
carga_divisor: in std_logic;
out_divisor:out std_logic_vector(n-1 downto 0)
);
end;
architecture reg of divisor is
signal IQ:std_logic_vector(n-1 downto 0);
begin
process(clk,carga_divisor,IQ)
begin
if clk'event and clk='1' then
if carga_divisor='1' then
IQ<=in_divisor;
else null;
end if;
end if;
out_divisor<=IQ;
end process;
end reg;

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
(

residuo,out_divisor: in std_logic_vector(n-1 downto 0);


restar : in std_logic;

out_alu : out std_logic_vector(n-1 downto 0)


);
end ;

architecture sumador of alu is


signal c : std_logic_vector(n downto 0);
begin
process(residuo,out_divisor,restar,c)
begin
c(0) <= restar;

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:

4.1 MODULO DIVIDENDO

a) Simulación Funcional
b)Simulación Temporal

4.2 MODULO DIVISOR

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.

4.3 MODULO ALU


Este modulo funciona según lo esperado, es decir suma sus entrada cuando la
señal restar= 0 y las resta cuando esta en nivel alto.

5. OBSERVACIONES Y CONCLUSIONES

Vous aimerez peut-être aussi