Electronica y automatizacion

Mundo moderno

sábado, 2 de mayo de 2015

Programacion en VHDL

VHDL 

(NIVEL BASICO)

Lenguaje para descripción y modelado de circuitos


Es un lenguaje utilizado por ingenieros para describir circuitos eléctricos. Es básicamente la conbinacion de  VHSIC y HDL. Aun que sus principios indican que esta diseñado para describir cualquier tipo de circuito, es usado también para programar PLD (Programable Logic Device - Dispositivo Lógico Programable), FPGA (Field Programmable Gate Array), ASIC y similares.






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 >>

Secuencias.

Como cualquier otro sistema de programación, esta conformado por comandos diseñados para generar secuencias.
Existen dos tipos de secuencias en VHDL:

  1. 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.

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.
  1. 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;

No hay comentarios:

Publicar un comentario