VHDL
(NIVEL BASICO)
Lenguaje para descripción y modelado de circuitos

Estructura del programa.
Comenzaremos con la forma en que esta estructurado un programa en VHDL, es lo primordial para empezar a programar en este lenguaje, seguido de otras bases.
LIBRARY
Esta parte del programa es donde se colocaran las librerias que sean necesarias para que el programa realice correctamente su funcionamiento.
ENTITY nombre de la entidad IS
PORT( En esta parte se colocaran todo tipo de entradas y salidas que deseemos ocupar en el programa);
END ENTITY;
ARCHITENCURE BEHAVIORAL OF nombre de la entidad IS
En esta parte colocaremos toda las funciones del programa (señales, variables, process o cualquier tipo de secuencias).
END BEHAVIORAL;
Elementos basicos
En este apartado veremos los elementos que son fundamentales para la programación de VHDL, como lo son: como agregar un comentario, como dientificar un tipo de numero, constantes, variables y señales, asignacion de señales y variables, tipos de datos, entre otros mas.
Seguir leyendo >>
Elementos basicos
En este apartado veremos los elementos que son fundamentales para la programación de VHDL, como lo son: como agregar un comentario, como dientificar un tipo de numero, constantes, variables y señales, asignacion de señales y variables, tipos de datos, entre otros mas.
Seguir leyendo >>
Secuencias.
Como cualquier otro sistema de programación, esta conformado por comandos diseñados para generar secuencias.
Existen dos tipos de secuencias en VHDL:
- Secuencias concurrentes .
Este concepto se ve muy claro en los circuitos electrónicos, donde los componentes sen encuentran siempre activos, es decir, describe al hardware que debe permitir ejecución paralela.
A diferencia de la programación común, como suele serlo en c o c++, en VHDL al realizar una programación con secuencias concurrentes, las lineas de programación no se ejecutan una seguida de otra, las lineas se ejecutan en paralelo, es decir, al mismo tiempo.
Ejemplo.
En una compuerta AND no es necesario activar la primer entrada para poder darle paso a la segunda, no importa el orden en que la ejecutes, el proceso siempre estará preparado para obtener instrucciones si se desea, de forma paralela o discontinuo.

Sintaxis para secuencias concurrentes.
WHEN ... ELSE
Es conocida como selección múltiple ya que es necesario asignarle las opciones que debe realizar si tal condición se cumple.
<señal> <= <asignación1> WHEN <condición1> ELSE
<asignación2> WHEN <condición2> ELSE
.
.
.
<asignaciónN> WHEN <condiciónN> ELSE
<asignaciónN+>;
Ejemplo.
c <= '1' when a < b
else
'0';
Este simple ejemplo nos da ha entender que al momento en que A sea menor que B, la señal de C va ha obtener un valor de 1, pero si esta codicion no se cumple y sea cual sea la condicion que se presente, el valor de C sera 0.
<señal> <= <asignación1> WHEN <condición1> ELSE
<asignación2> WHEN <condición2> ELSE
.
.
.
<asignaciónN> WHEN <condiciónN> ELSE
<asignaciónN+>;
Ejemplo.
c <= '1' when a < b
else
'0';
Este simple ejemplo nos da ha entender que al momento en que A sea menor que B, la señal de C va ha obtener un valor de 1, pero si esta codicion no se cumple y sea cual sea la condicion que se presente, el valor de C sera 0.
WITH ... SELECT ... WHEN
en esta secuencia es necesario esperar por algún tipo de valor, señal o variable, para ejecutar lo que viene después.
WITH <señal1> SELECT
<señal2> <= <asignación1> WHEN <estado_señal1>,
<asignación2> WHEN <estado_señal2>,
.
.
.
<asignaciónN> WHEN OTHERS;
Ejemplo.
with Switch select
Foco <= "encendido" when '1';
"apagado" when '0' ;
"apagado" when others;
Esta programación nos da un claro ejemplo de como se ocupa esta sentencia, cuando el SWITCH muestre un cambio de valor la variable FOCO obtendrá una asignación que dependa de el valor que contenga SWITCH.
- Secuencias secuenciales.
Para poder iniciar con este tema, es necesario hacer una pausa para obtener información sobre PROCESS que es necesario para poder ejecutar estas secuencias, debido a que las secuencias concurrentes no son suficientes para describir las ideas, tenemos que refugiarnos en instrucciones secuenciales y el process es la instrucción que le indica al programa que se va ha empezar a trabajar con estas secuencias.
El process es una parte del programa, en donde las secuencias se ejecutaran en un solo sentido, es decir, una tras otra(en serie).
IF... ELSE.
Para las personas que conoces de programación básica esta sintaxis se les ara muy familiar, debido que su estructura es parecida a la de programación en c o c++.
IF condicion THEN
sentencia;
ELSIF condicion THEN
sentencia;
ELSE
sentencia;
END IF;
EJEMPLO.
If a = '0' then
b<='1';
Elsif a = '1' then
b <= '0';
End if;
En este caso no se utilizo ELSE debido que solo se tenian dos condiciones, ELSIE es utilizado, generalmente cuando se desea dar un mismo valor a otro tipo de condiciones no mencionadas.
En este ejemplo el programa solo asignara un valor a B cuando A se encuentre en '1' o en '0'.
CASE .... WHEN.
Esta secuencia es utilizada por muchos para generar una MAQUINA DE ESTADOS, pero por supuesto, tiene mas utilidades.
CASE expresión IS
WHEN valor1 =>
sentencias1;
WHEN valor2 =>
sentencias2;
.
.
.
WHEN rango de valores =>
sentenciasN;
WHEN OTHERS =>
sentenciasM;
END CASE;
EJEMPLO.
CASE (semaforo) IS
WHEN Verde =>
a<= "001";
WHEN Amarillo =>
a<= "010";
WHEN Rojo =>
a<= "100";
WHEN OTHERS =>
a<= "000";
END CASE;
Esta programación nos da un claro ejemplo de como se ocupa esta sentencia, cuando el SWITCH muestre un cambio de valor la variable FOCO obtendrá una asignación que dependa de el valor que contenga SWITCH.
IF... ELSE.
Para las personas que conoces de programación básica esta sintaxis se les ara muy familiar, debido que su estructura es parecida a la de programación en c o c++.
IF condicion THEN
sentencia;
ELSIF condicion THEN
sentencia;
ELSE
sentencia;
END IF;
EJEMPLO.
If a = '0' then
b<='1';
Elsif a = '1' then
b <= '0';
End if;
En este caso no se utilizo ELSE debido que solo se tenian dos condiciones, ELSIE es utilizado, generalmente cuando se desea dar un mismo valor a otro tipo de condiciones no mencionadas.
En este ejemplo el programa solo asignara un valor a B cuando A se encuentre en '1' o en '0'.
CASE .... WHEN.
Esta secuencia es utilizada por muchos para generar una MAQUINA DE ESTADOS, pero por supuesto, tiene mas utilidades.
CASE expresión IS
WHEN valor1 =>
sentencias1;
WHEN valor2 =>
sentencias2;
.
.
.
WHEN rango de valores =>
sentenciasN;
WHEN OTHERS =>
sentenciasM;
END CASE;
EJEMPLO.
CASE (semaforo) IS WHEN Verde =>a<= "001"; WHEN Amarillo =>a<= "010";WHEN Rojo =>a<= "100";WHEN OTHERS =>a<= "000";END CASE;
No hay comentarios:
Publicar un comentario