Alu 4 Bits

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 7

UNIVERSIDAD CATOLICA BOLIVIANA “SAN PABLO” Facultad de Ingeniería de Telecomunicaciones

Laboratorio de Electrónica Digital – TEL 220 Semestre: I-2016

ARITHMETIC LOGIC UNIT - 4 BITS


GRUPO #5
Paralelo#1 Miércoles 12:45-15:15
Adolfo Lang Camacho
2 de diciembre del 2015
La Paz – Bolivia

Resumen.- Para el proyecto de laboratorio de Electrónica Digital se desarrolló un ALU – 4 BITS implementado al lenguaje
VHDL. Se utilizó la herramienta ISE- Xilinx que es un compilador VHDL en cual se realizó el modelo y simulación del ALU
– 4 BITS, se programó el ALU para que realice 14 operaciones, finalmente se demostró el funcionamiento y análisis de
resultados de este ALU – 4BITS.
En este proyecto se desarrolló una unidad
1. INTRODUCCIÓN
aritmética lógica de 4 bits, es decir lo que
La unidad aritmética lógica, también conocida conocemos como ALU – 4 bits, y la
como ALU (arithmetic logic unit), es un circuito implementaremos a partir del lenguaje VHDL en
digital que calcula operaciones aritméticas (suma, la herramienta ISE-Xilinx, es decir diseñaremos
resta, multiplicación, división, etc.). Además un algoritmo que implemente una ALU de 4 bits.
realiza operaciones lógicas (Yes, Or, Not, And) El algoritmo se ha hecho de forma que todo se
(si, y, o, no). Entre dos números o dos conjuntos tiene que hacer a través de compuertas lógicas es
de números. decir un lenguaje puramente sintetizable ya que
sólo utilizaremos compuertas. Este ALU de 4 bits
La ALU se compone básicamente de: Circuito
tiene que hacer las siguientes operaciones o
Operacional, Registros de Entradas, Registro
funciones:
Acumulador y un Registro de Estados, conjunto
de registros que hacen posible la realización de
1. Suma
cada una de las operaciones.
2. Resta
La mayoría de las acciones de la computadora
son realizadas por la ALU. La ALU toma datos 3. Multiplicación
de los registros del procesador. Estos datos son 4. Half
procesados y los resultados de esta operación se
5. Incremento
almacenan en los registros de salida de la ALU.
Otros mecanismos mueven datos entre estos 6. Decremento
registros y la memoria. 7. Reset
Una unidad de control controla a la ALU, al 8. AND
ajustar los circuitos que le señala a la ALU qué
operaciones realizar. 9. OR
10. NOT
En informática, la unidad aritmética lógica forma 11. NAND
parte del circuito digital del procesador, teniendo 12. XOR
además presencia en otros circuitos electrónicos
13. NOR
que necesiten realizar estas operaciones.
14. XNOR

2. DESCRIPCION DEL PROYECTO


Aunque no es la característica más interesante del
3. IMPLEMENTACION EN VHDL
VHDL, también permite ser usando como
lenguaje de descripción de estructura. En este
VHDL fue desarrollado como un lenguaje para el caso esta estructura también estaría indicada
modelado y simulación lógica dirigida por dentro de un bloque de arquitectura, aunque la
eventos de sistemas digitales, y actualmente se sintaxis interna es completamente diferente.
utiliza también para la síntesis automática de
circuitos. Uno de los objetivos del lenguaje
VHDL es el modelado. Modelado es el ARCHITECTURE nombre_arquitectura OF
desarrollo de un modelo para simulación de un nombre_entidad IS
circuito o sistema previamente implementado
- Declaración de tipos
cuyo comportamiento, por tanto, se conoce. El - Declaración de señales.
objetivo del modelado es la simulación. - Declaración de constantes
Para la implementación de nuestro ALU – 4 bits - Declaración de componentes
se realizó la estructura y comportamiento de - Definición de funciones
nuestro ALU. - Definición de procedimientos
1. Primero declarándose la entidad
BEGIN
En la declaración de entidades, se definen las
Enunciado concurrente
entradas y salidas de nuestro chip, diciendo ...
cuántas son, de qué tamaño (de 0 a n bits), modo Enunciado concurrente
(entrada, salida) y tipo (integer, bit,...). Las END nombre_arquitectura;
entidades pueden definir bien las entradas y
salidas de un diseño más grande o las entradas y Con este ejemplo se verá más claro lo que es una
salidas de un chip directamente. descripción estructural, definiremos una ALU.
Esto lo interpretaremos como una caja donde
dentro habrá un bloque que sume y reste, otro
ENTITY programa IS bloque que haga las operaciones and y or, y por
último otro bloque que sea un multiplexor que
port(
nos escoja la salida que queremos en función
- puertos de entradas de si en las operaciones Op0, Op1, Op2 le hemos
- puertos de salidas dicho que función nos tiene que hacer si suma o
- puertos de I/O resta, o and o or. Para este ejemplo tendremos dos
- puertos de buffers registros de entrada que serán el registro a y el
); registro b que serán con los que haremos las
operaciones, tendremos una salida del carry
END programa;
llamada Cout y otra salida que será el resultado
de la operación hecha. Aparte como se verá en
2. Segundo declarándose la arquitectura la unión de todos los bloques crearemos unas
señales para unir las diferentes entradas y salidas
La arquitectura es lo que nos dice que debemos que serán x e y.
hacer con los puertos, grupos de señales de
entrada, declarados previamente en la entidad) Se realizara el programa para unir los diferentes
para llegar a tener los puertos de salida (también componentes y así se verá como se ha hecho
para hacer una descripción estructural.
declarados en la entidad). En la declaración de
Primero mediante una entidad general tal y como
entidades es donde reside todo el funcionamiento habíamos definido en el enunciado pondremos las
de un programa, ya que es ahí donde se indica diferentes entradas y salidas de las que está
que hacer con cada entrada, para obtener la compuesta nuestra ALU, que serán, las
salida. siguientes.

ENTITY alu IS
Port ( a: in std_logic --Entrada de 1 bit tiene que tener en cuenta es que al hacer el paso
b: in std_logic --Entrada de 1 bit de parámetros lo hagamos en igual orden con el
resultat: out std_logic --Resultado de la operación
que hemos definido las variables, ya que si no al
op0: in std_logic; --Op0, Op1, Op2
op1: in std_logic; --para seleccionar la operación compilar nos dará error si asignamos variables de
op2: in std_logic; --que tiene que realizar la ALU tipo in a tipo out, o igual no nos dara error, pero
cout: out std_logic); --Carry de salida si invertimos variables el programa no va a
END alu; funcionar.

Ahora se unirán las dos partes del programa y se 4. CODIGO FUENTE DE VHDL
harán las uniones de los diferentes bloques
mediante una arquitectura como la siguiente: CODIGO VHDL: ALU – 4 BITS

ARCHITECTURE estructura OF alu IS library IEEE;


COMPONENT and_or--Bloque AND y OR use IEEE.STD_LOGIC_1164.ALL;
Port ( aa: in std_logic --Entrada del bloque use IEEE.NUMERIC_STD.ALL;
bb: in std_logic; --Entrada del bloque
entity alu is
operacio0: in std_logic; port(Op1,Op2 : in std_logic_vector(3 downto 0);
operacio1: in std_logic;--operación a realizar Res : out std_logic_vector(3 downto 0);
operacio2: in std_logic; Multipli : out std_logic_vector(15 downto 0);
sor_and_or: out std_logic; --salida Sel : in bit_vector(3 downto 0);
Ck : in std_logic;
END COMPONENT;
Control : in std_logic;
COMPONENT suma_resta--Bloque suma y reset : in std_logic;
resta sreset : out std_logic;
Port ( aa: in std_logic; --Entrada del CarryOut : out std_logic;
bloque bb: in std_logic; Flag : out std_logic);
end alu;
operacio0 in std_logic; operacio1:in std_logic;
operacio2: in std_logic; --Selección de architecture Behavioral of alu is
operación --DECLARACION TEMPORAL DE VARIABLES A
cout:out std_logic; --Carry de salida UTILIZAR
sor_sum_res:out std_logic --Salida signal Reset1: std_logic;
signal Tempo: std_logic_vector(4 downto 0);
END COMPONENT;
begin
SIGNAL x: std_logic; --Variables intermedias
para unir process(Ck,Tempo,op1,op2,Reset1,reset,sel,Control) is
SIGNAL y: std_logic; --los 3 bloques begin
anteriores if(rising_edge(Ck)) then --HACE EL CALCULO EN EL
CICLO POSITIVO DEL CK
BEGIN
Flag <= '0';
U1 : and_or port map (a,b,op0,op1,y); --Paso de case Sel is
parámetros when "0000" =>--SUMA
U2: suma_resta port map Tempo<= std_logic_vector((unsigned(Op1)+unsigned(Op2)));
(a,b,op0,op1,op2,cout,x);--Paso de parámetros Res<= Tempo(3 downto 0);
U3: multiplexor port map (x, y, op0, op1, op2, CarryOut <= Tempo(4);
when "0001" =>--RESTA
resultado); --Paso de parámetros if(Op1 >= Op2) then
END estructura; Res <= std_logic_vector(unsigned(Op1)-unsigned(Op2));
Como se puede ver en el ejemplo en las últimas Flag <= '0';
líneas se hizo el paso de parámetros de los else
componentes a las variables de la entidad Res <= std_logic_vector(unsigned(Op2)-unsigned(Op1));
Flag <= '1';
principal que es la entidad ALU, lo único que se
end if; 5. DESCRIPCION DEL
when "0010" =>--MULTIPLICACION FUNCIONAMIENTO
Multipli<=std_logic_vector(unsigned(Op1)* unsigned(Op2));
when "0011" =>--HALF Todas las operaciones aritméticas se llevan a
Res <= std_logic_vector(unsigned(Op1) /2);
when "0100" =>--INCREMENTO
cabo en la unidad aritmética lógica ALU.
if(Control <= '0') then
Tempo <= std_logic_vector((unsigned(Op1)) + 1); El propósito general del ALU es aceptar los datos
Res <= Tempo(3 downto 0); binarios que se almacenan en la memoria y
CarryOut <= Tempo(4); ejecutar operaciones aritméticas y lógicas con
else
estos datos según las instrucciones de la unidad
Tempo <= std_logic_vector((unsigned(Op2)) + 1);
Res <= Tempo(3 downto 0); de control.
CarryOut <= Tempo(4);
end if;
when "0101" =>--DECREMENTO
if(Control <= '0') then
Tempo <= std_logic_vector((unsigned(Op1)) - 1);
Res <= Tempo(3 downto 0);
Flag <= Tempo(4);
else
Tempo <= std_logic_vector((unsigned(Op2)) - 1);
Res <= Tempo(3 downto 0);
Flag <= Tempo(4);
end if;
when "0110" =>
Res <= Op1 AND Op2;
when "0111" =>
Res <= Op1 OR Op2; Figura 1. En esta figura se muestra los registros de
when "1000" => operaciones, estado, resultado. También se ve el bus de
Res <= Op1 NAND Op2; control y el bus de datos.
when "1001" =>
Res <= Op1 XOR Op2;
when "1010" =>
Para que la ALU sea capaz de realizar una
Res <= Op1 NOR Op2;
when "1011" => operación aritmética, se le deben proporcionar los
Res <= Op1 XNOR Op2; siguientes datos:
when "1100" => 1. El código que indique la operación a efectuar.
if(Control <= '0') then
Res <= NOT Op1;
2. La dirección de la celda donde esta
else
Res <= NOT Op2; almacenando el primer sumando.
end if;
when "1101" => 3. La dirección del segundo sumando implicado
Reset1 <= reset; --ESTA en la operación a realizar.
FUNCION DE RESET ES SINCRONICA YA QUE
SUCEDE EN EL CICLO POSITIVO DEL CK
sreset <= Reset1;
4. La dirección de la celda de memoria donde se
when others => almacenara el resultado.
NULL;
end case; Los registros son un medio de ayuda a las
end if;
operaciones realizadas por la unidad de control y
end process;
end Behavioral;
la unidad aritmética y lógica. Permiten almacenar
información, temporalmente, para facilitar la Selección Salida Descripción
manipulación de los datos. 0 0 0 0 Op1+Op2 Suma
Realizando una similitud con el resto del sistema 0 0 0 1 Op1 - Op2 Resta
informático, los registros son a la CPU como la 0 0 1 0 Op1 * Op2 Multiplicación
memoria principal es a la computadora. 0 0 1 1 Op1 /2 Half
0 1 0 0 Op1+1 Incremento
Los registros se dividen en tres grupos
0 1 0 1 Op1-1 Decremento
principales: 0 1 1 0 Op1 *Op2 And
0 1 1 1 Op1+Op2 Or
Registros de Propósito General. 1 0 0 0 Op1∗Op2 Nand
Registros de Segmento de Memoria. 1 0 0 1 Op1⊕Op2 Xor
Registros de Instrucciones. 1 0 1 0 Op 1+Op 1 Nor
1 0 1 1 Op1 ⊕ Op 2 Xnor
1 1 0 0 Op 1 Not
1 1 0 1 Reset Reset
Tabla 1. Se muestra la tabla de verdad del ALU de 4 bits

En la siguiente figura se muestra la simulación de


las operaciones aritméticas y se muestra la prueba
en el subprograma test bench
Figura 2. Se muestra el diagrama de bloque de un ALU de
4 bits.

Las entradas de A se combinan con las de B


generando una operación de salida de cuatro bits.
La entrada de selección de modo S distingue
entre las operaciones aritméticas y lógicas.
Los acarreos de entrada y salida tienen sentido
únicamente en las operaciones aritméticas. El
diseño de una ALU implica el diseño de la
sección aritmética, la sección lógica y la
modificación de la sección aritmética para
realizar las operaciones aritméticas y lógicas.

6. ANALISIS DE LOS RESULTADOS Figura 3. Se muestra la simulación del ALU de la primera


operaciones aritméticas.
TABLA DE OPERACIONES
Se muestran las 14 operaciones aritméticas y
lógicas generados por nuestro ALU de 4 bits.
Tomar en cuenta que para las operaciones de
Incremento, Decremento, Half y Not se utilizó
una estructura condicional If para la 7. CONCLUSIONES Y
programación que funciona de acuerdo a un bit RECOMENDACIONES
de control ya sea 1 para Op1 o 0 para Op2, ya
que para estas entradas y para dichas operaciones Después de haber realizado este proyecto, hemos
solo se pueden operar una vez para cada entrada llegado a comprender el funcionamiento,
(Op1, Op2). estructurado y comportamiento de un ALU,
además se aprendió a programar en lenguaje
VHDL para desarrollar y simular el circuito
digital. Lenguajes de programación como VHDL
ofrecen posibilidades infinitas de aplicación, en
este caso la realización de operaciones
aritméticas y lógicas simples. Se puede decir que
las operaciones y funciones de un ALU son la
base de las computadoras ya que se pudo
observar las etapas y como transmiten sus datos
en sus distintos estados para varias secuencias de
activación. Además se aprendió a demostrar las
características operativas del ALU – 4 bits.
Mediante el programa ISE- Xilinx se logró
programar y simular el ALU – 4 bits en lenguaje
VHDL realizando todas las operaciones
generados por nuestro ALU y verificadas con el
subprograma test bench, dando resultados
correctos en cada operación aritmética y lógica.
Se realizó este proyecto satisfactoriamente.

Se recomienda tener conocimientos previos para


la programación en VHDL.

8. BIBLIOGRAFÍA
1. Pearson Education - Sistemas Digitales
(principios y aplicaciones) Edición 2003.
Autores: Ronald Tocci y Neal Widmer
[Consultada el 25 de noviembre del 2015]

2. RA-MA - Lenguaje para la síntesis y


modelado de circuitos VHDL. Autores:
Fernando Pardo y José Gil. [Consultada el 25 de
noviembre del 2015]

3. Marcombo – Electronica Digital aplicada,


Edicion 2011. Autores: David Caldevilla.
[Consultada el 26 noviembre del 2015]

4. www.prenhall.com/digital electronics
[Consultada el 26 de noviembre del 20

También podría gustarte