Está en la página 1de 3

Instituto Tecnolgico de Celaya

Departamento de Ingeniera Mecatrnica


Programas en VHDL
Diciembre 5, 2014
Jos Juan Hernndez Pea, juan-tauro2011@hotmail.com
Resumen
En esta pequea investigacin se mostraran algunos programas, que con la ayuda de tutoriales y libros
sobre el lenguaje VHDL, fue posibles realizar los programas propuestos.
I.

Introduccin

VHDL significa very-high-speed integrated


circuits hardware description language o lenguaje
de descripcin de hardware de circuitos
integrados de muy alta velocidad.
El cual puede ser usado para describir
circuitos internos y la programacin de
FPGAs.

II.

Desarrollo

Sumador completo de 4 bits.


Nuestro sumador completo deber de tener tres
entradas principales, las primeras dos representan
los dos bits que se van a sumar la tercera con el
acarreo.
Cdigo:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.all;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY var IS
Port (
a: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
b : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
cin : IN STD_LOGIC;
suma:OUT STD_LOGIC_VECTOR(3 DOWNTO
0);
cout : OUT STD_LOGIC
);
END var;
ARCHITECTURE Sumador of var IS
SIGNAL acarreo:STD_LOGIC_VECTOR(4 DOWNTO 0);
BEGIN
acarreo(0) <= cin;

F1:FOR i IN a'range generate


begin
suma(i) <= a(i) xor b(i) xor carry(i);
acarreo(i+1) <= (acarreo(i) and (a(i) or
b(i))) or (a(i) and b(i));
END generate;
cout <= acarreo(4);
END Sumador;

En este cdigo lo primero que se realiz, fue


declarar las variables que se utilizan. Despus el
cin se manda a un arreglo(acarreo) en la primera
casilla, ya que no hay ningn acarreo.
Ahora se hace un ciclo de funcionamiento en una
matriz entera, que es la siguiente lnea:
F1:FOR i IN a'range generate
La cual nos permitir guardar los acarreos de
cada operacin (de suma y de acarreo).
Se decidi hacer el programa con arreglos y
ciclos, porque se repetan las mismas operaciones
cuando se calcula la suma y el acarreo. Adems
que solo cambiando algunas variables de
memoria, es posible que nuestro sumador pueda
ser de n bits.
Multiplexor de 5 a 32.
Los multiplexores son circuitos combinacionales
que tienen varias entradas, una sola salida y
varias lneas de seleccin. En este caso sern 5
entradas y 32 salidas.
Codigo
LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.all;
ENTITY var IS
Port(
x: in std_logic_vector(4 downto 0);
y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10,
y11, y12, y13, y14, y15, y16, y17, y18,
y19, y20, y21, y22, y23, y24, y25, y26,
y27, y28, y29, y30, y31, y32: out
std_logic
);
end var;
architecture multi of var is
begin
process(x)
begin
y0<='1'; y1<='1'; y2<='1'; y3<='1';
y4<='1'; y5<='1';
y6<='1'; y7<='1'; y8<='1'; y9<='1';
y10<='1'; y11<='1';
y12<='1'; y13<='1'; y14<='1'; y15<='1';
y16<='1';
y17<='1'; y18<='1'; y19<='1'; y20<='1';
y21<='1'; y22<='1'; y23<='1'; y24<='1';
y25<='1'; y26<='1';
y27<='1'; y28<='1'; y29<='1'; y30<='1';
y31<='1';
end process;
process(x)
begin
when"00000"=> y0 <= ' 0 ';
when"00001"=> y1 <= ' 0 ';
when"00010"=> y2 <= ' 0 ';
when"00011"=> y3 <= ' 0 ';
when"00100"=> y4 <= ' 0 ';
when"00101"=> y5 <= ' 0 ';
when"00110"=> y6 <= ' 0 ';
when"00111"=> y7 <= ' 0 ';
when"01000"=> y8 <= ' 0 ';
when"01001"=> y9 <= ' 0 ';
when"01010"=> y10 <= ' 0 ';
when"01011"=> y11 <= ' 0 ';
when"01100"=> y12 <= ' 0 ';
when"01101"=> y13 <= ' 0 ';
when"01110"=> y14 <= ' 0 ';
when"01111"=> y15 <= ' 0 ';
when"10000"=> y16 <= ' 0 ';
when"10001"=> y17 <= ' 0 ';
when"10010"=> y18 <= ' 0 ';
when"10011"=> y19 <= ' 0 ';
when"10100"=> y20 <= ' 0 ';
when"10101"=> y21 <= ' 0 ';
when"10110"=> y22 <= ' 0 ';
when"10111"=> y23 <= ' 0 ';
when"11000"=> y24 <= ' 0 ';
when"11001"=> y25 <= ' 0 ';

when"11010"=> y26 <= ' 0 ';


when"11011"=> y27 <= ' 0 ';
when"11100"=> y28 <= ' 0 ';
when"11101"=> y29 <= ' 0 ';
when"11110"=> y30 <= ' 0 ';
when"11111"=> y31 <= ' 0 ';
END process;
END multi;

Como se mencion anteriormente, tenemos 5


entradas (0, 1, 2, 3, 4) que es el arreglo x
mientras que el arreglo y cuenta con 32 salidas.
Ahora se necesita inicializar todas las entradas
con un 1 verdadero, para cuando la
direccionemos, mande un cero a la salida
deseada.
Desplazamiento de 4 bits
Los circuitos de desplazamiento son circuitos
digitales que acepta datos binarios de una fuente
de entrada y luego los desplaza, un bit a la vez.
Que fue lo que se hizo en el programa, desplazar
un bit ala derecha para moverlo de lugar.
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.all;
ENTITY Control IS
PORT(

entro: IN STD_LOGIC;
CLR: IN STD_LOGIC;
CLK: IN STD_LOGIC;
Sal : BUFFER
STD_LOGIC_VECTOR (3 DOWNTO 0)
);
END Control;
ARCHITECTURE Despl OF Control IS
BEGIN
PROCESS(CLK)
BEGIN
IF (CKL'event AND CLK='1') THEN
IF(CLR='0') THEN
Sal<='0000';
else
Sal(0)<=Sal(1);
Sal(1)<=Sal(2);
Sal(2)<=Sal(3);
Sal(3)<=entro;
END IF;
END PROCESS;
End Despl;

La palabra reservada BUFFER se utiliza para las


seales que adems de salir de la entidad pueden
usarse como entradas realimentadas. Por esa
razn Sal es de este tipo.
La condicin:
IF (CKL'event AND CLK='1') THEN
Es para detectar un flanco de reloj ascendente.
De esa manera es posible hacer el desplazamiento
de los bits.
III. Conclusiones
El presente trabajo plante como objetivo
estudiar el lenguaje VHDL, el cual servir para
realizar proyectos futuros. Aunque fue muy poco
el tiempo para su estudio, la lgica y la sintaxis
son la principal herramienta para su comprensin.
Adems, el trabajo realizado, hizo recordar cmo
funciona el multiplexor y reforzar los
conocimientos que se fueron adquiriendo durante
el semestre.

También podría gustarte