Arquitectura de computadoras
Díaz Lara Jesús, Partida Herrera Alma Karen, Plata Valencia Carlos, Villalbazo
Sánchez Ricardo
Ingeniería en computación, Instituto
Politécnico Nacional, CDMX, México
Práctica— La presente práctica tiene por objetivo conocer el Diseño de una ALU:
funcionamiento de una ALU, para posteriormente poder realizar Una forma de construir una ALU simple es mediante una
una ALU de 32 bits en VHDL. célula de tipo “bit-slice”. Esta célula permite realizar la suma ó
alguna operación lógica entre 2 bits.
I. INTRODUCCIÓN
En principio, la célula basada en un Full Adder permite realizar
VHDL: VHDL es un lenguaje de descripción de circuitos operaciones de SUMA, RESTA, AND, OR, XOR yNOT.
electrónicos digitales que utiliza distintos niveles de Las funciones AND y XOR se toman de las salidas de
abstracción. El significado de las siglas VHDL es VHSIC CarryOut y Suma Respectivamente.
(Very High Speed Integrated Circuits) Hardware Description
Language. Esto significa que VHDL permite acelerar el
proceso de diseño. Esta arquitectura tiene la limitante que, para las funciones AND
En particular VHDL permite tanto una descripción de la y XOR, se requiere que tanto A como B no estén negados, y
estructura del circuito (descripción a partir de subcircuitos que el Carry-In sea ‘0’. Si A, o B están negadas, o si el Carry-in
más sencillos), como la especificación de la funcionalidad de es ‘1’. Entonces las salidas de Carry-Out y de Suma no pueden
un circuito utilizando formas familiares a los lenguajes de ser utilizadas para generar las funciones AND y XOR
programación. respectivamente:
ALU: Una ALU (Unidad Aritmética-Lógica) es un circuito
que permite, como su nombre lo indica, realizar operaciones
lógicas y aritméticas. Además de los operadores lógicos y
aritméticos, la ALU cuenta con una serie de registros para
almacenar los datos, y bits de información sobre los
resultados, también llamados banderas.
Las banderas más comunes son: Carry, Auxiliary Carry,
Borrow, Overflow, Parity, Zero.
A continuación, Podemos observar el símbolo de una ALU.
Otro tipo de célula que se puede emplear es a base de
multiplexores:
El circuito ALU es simplemente un operador, es decir,
sólo realiza operaciones.
- La ALU no toma decisiones.
- Las entradas deben contener tanto la magnitud como
el signo que corresponda a la operación.
- La ALU requiere de un mecanismo de control que le
permita saber el tipo de operación a realizar
Partes de la ALU: when "101" =>
res(30 downto 0) <= a(31 downto
1); --Desplazamiento a la derecha (ROR)3
- Sumador/restador rápido res(31) <= '0';
- Operadores lógicos (AND, OR, XOR, NOT) when others => NULL;
- Un acumulador y un registro auxiliar end case;
end process;
- Un registro de salida
end ALUimplemetacion;
- Señales de control que indiquen la operación a
realizar
Este código se decidió hacer debido a las facilidades que nos
- Registro de banderas de estatus da para este propósito.
Para comenzar empezamos a declarar las variables que serían
La ALU deberá contar con un circuito de control que le de 32 bits para nuestro propósito de crear un procesador más
permita: adelante de igual 32 bits, se usó un selecto de operación de 3
bits y con este se determinaría que operación estaría realizando
la ALU, se introdujeron banderas tanto de acarreo como de
- Identificar la operación a realizar cero.
- Administrar los recursos internos de la ALU que Se fue indicando que operación realizaría la ALU según sea
requiera la operación el caso que indicará el usuario, por ejemplo, si el usuario
- Generar las banderas de estatus ingresa un 000, la ALU entenderá que la operación entre bits a
realizar será la compuerta AND, mientras que si el usuario
selecciona la 001 será la compuerta OR, 010 la suma de bits,
II. IMPLEMENTACIÓN Y CÓDIGO 011 la resta de bits, 100 desplazamiento hacia la izquierda y
Teniendo en cuenta los requerimientos de la práctica se 100 desplazamiento hacia la derecha. Pará otros casos el valor
realizó el programa que se muestra a continuación: sería nulo.
Con esto se pudo demostrar el funcionamiento de la ALU.
library ieee;
use ieee.std_logic_1164.all; A continuación, se muestra una figura del funcionamiento de
use ieee.std_logic_arith.ALL; nuestro programa:
use ieee.std_logic_unsigned.all;
entity ALU is
port(
a :in std_logic_vector (31 downto 0); -
-Primer operando
b :in std_logic_vector (31 downto 0); -
-Segundo operando
op :in std_logic_vector (2 downto 0); -
-Selector de operacion
res :out std_logic_vector (31 downto 0); -
-Resultado
BcarryO :out std_logic; -
-BanderaAcarreoSalida
Bcero :out std_logic -
-Bandera cero.
); Se puede observar una de las 6 operaciones, en este caso se
end ALU; usará un desplazamiento a la izquierda de los valores en la
variable a que son 01101011... (se ponen los puntos para evitar
architecture ALUimplemetacion of ALU is
poner los 32 bits)
begin Este desplazamiento nos arrojará lo siguiente como se puede
process(a,b,op) observar en la variable de resultado "11010110..." esto nos hace
begin percatar que, si está cumpliendo su función la ALU y está
case op is
desplazando una vez hacia la izquierda, esta es solo una de las
operaciones de dicha ALU las demás operaciones serán
when "000" => res <= a and b; --AND
presentadas en clase.
when "001" => res <= a or b; --OR
when "010" => res <= a + b; --Suma
when "011" => res <= a - b; --Resta
when "100" =>
res(31 downto 1) <= a(30 downto
0); --Desplazamiento a la izquierda (ROL)
res(0) <= '0';
III. CONCLUSIONES
En conclusión podemos agregar que VHDL es un
lenguaje que nos permite crear una ALU en pocas líneas de
código, además de ver su funcionamiento de manera gráfica,
se podría llegar hasta a implementar a una placa como seria
la SPARTAN o algún otro modelo, dándonos una mejor
manera de visualizar dichas operaciones, en este caso nuestra
ALU fue de 32 bits y no nos llevamos demasiadas líneas de
código como hubiera podido ser en otro lenguaje de
programación, fue bastante interesante la forma de realizar
esta práctica pues nos da una idea más amplia del
funcionamiento de esta misma además de que nos refuerza
los conocimientos adquiridos anteriormente, las operaciones
que es capaz de realizar la ALU son como su nombre lo
indica "Unidad Aritmética Lógica", en este caso vemos
cómo se puede trabajar con desplazamientos, con sumas, con
restas y obviamente con las operaciones lógicas que podrían
ser la AND y la OR.
REFERENCIAS
[1] García García, A. D. (2014, 1 noviembre). Procesadores. Tecnológico
de Monterrey.
[Link]
%[Link]