Guia De Vhdl Y Xilinx
johnymar11 de Mayo de 2014
12.541 Palabras (51 Páginas)283 Visitas
GENERALIDADES SOBRE VHDL Y LA HERRAMIENTA XILINX
Realizado por: Ing. Johnymar L Herrera de Baron
Abril2012
PROGRAMA EN VHDL
VHDL es el acrónimo que representa la combinación de VHSIC y HDL, donde VHSIC es el acrónimo de “Very High Speed Integrated Circuit” y HDL es a su vez el acrónimo de “Hardware Descripción Language”, siendo un lenguaje definido por el IEEE (Institute of Electrical and Electronics Engineers) (ANSI/IEEE 1076-1993) usado por ingenieros para describir circuitos digitales; Aunque puede ser usado de forma general para describir cualquier circuito se usa principalmente para desarrollar programas para PLDs (Programable Logic Device - Dispositivo Lógico Programable), FPGAs (“Field Programmable Gate Array”) y similares.
Haciendo una comparación con un lenguaje de programación de alto nivel se puede decir que el código VHDL es similar en cuanto a las sentencias utilizadas, pero no es así en el flujo de ejecución de las instrucciones. Un código de programación en VHDL no es precisamente un "programa", ya que un programa es un conjunto de instrucciones que se ejecutan paso a paso para llevar a cabo una tarea determinada, y en este caso no se puede decir que las instrucciones se estén ejecutando de esta manera en este lenguaje, porque esto no corresponde en la realidad al comportamiento de un circuito. En VHDL las instrucciones se están ejecutando en todo momento lo cual sí se asemeja al comportamiento real de un circuito, en este caso cuando cambie algún “BIT” de entrada cambiará inmediatamente la salida y, por consiguiente, estamos describiendo cual es el verdadero funcionamiento del circuito.
La forma en que se "programa" en VHDL al principio resultará un tanto extraña, pero si se asocia éste código con el circuito que se esta describiendo, podemos darnos cuenta que en él los componentes siempre están activos, y es esto es precisamente lo que describimos mediante VHDL Asi mismo, la programacion en VHDL esta formada por módulos cuya estructura contempla entidades que tienen una arquitectura donde se describe el funcionamiento de la aplicación, pudiendo esta a su vez contener procesos. El cuerpo o estructura de un módulo típico de VHDL se muestra en el siguiente esquema:
-----DESCRIPCION DEL PROYECTO-----
--
----------BIBLIOTECAS A UTILZAR---------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
--
-----------DEFINICION DE LA ENTIDAD--------
entity Nombre _de _la_entidad is
ports (Nombre_de_la_señal: modo tipo;)
end Nombre _de _la_entidad;
---DESCRIPCION DE LA ARQUITECTURA---
architecture nombre_arquitectura of Nombre _de _la_entidad is
begin
end Behavioral;
En el listado anterior, se observan cuatro áreas básicas del programa: descripción del proyecto, librerías, definición de la entidad y descripción de la arquitectura, las cuales se explican a continuación.
Área 1
Descripción del proyecto: área donde se guarda la información relacionada con un diseño determinado, la cual es generada automáticamente por el sintetizador de programa.
Área 2
Bibliotecas: área donde se pueden incluir archivos ya sintetizados llamados bibliotecas que permiten utilizar las distintas funciones y modos de los datos este lenguaje. Algunos ejemplos de estas librerías son:
ieee.std_logic_1164 (permite usar señales del tipo std_logic)
ieee.std_logic_arith (permite usar operaciones aritméticas)
ieee.std_logic_unsigned (permite usar operaciones binarias puras sin signo), ieee.std_logic_signed (permite usar operaciones binarias puras con signo), entre las más importantes.
Área 3
Definición de Identidad: Una entidad es la abstracción de un circuito, ya sea desde un complejo sistema electrónico hasta una simple compuerta lógica. La entidad únicamente describe la forma externa del circuito, aquí se enumeran las entradas y salidas del diseño. Una entidad es análoga a un símbolo esquemático de los diagramas electrónicos, el cual describe las conexiones del dispositivo hacia el resto del diseño, el cual describe las conexiones del dispositivo hacia el resto del diseño, en esta se debe declarar:
• Nombre_de_la_entidad: es un identificador seleccionado por el usuario para seleccionar la entidad.
• Ports: Incluye una lista de uno o más identificadores seleccionados por el usuario para identificar las señales externas de la interfaz, donde debe incluirse el modo y tipo correspondiente a estos identificadores según las palabras reservadas para ello. (ver tabla 1y 2)
Tabla N˚1: Modos de las señales de Puerto en VHDL
Modo Descripción
IN En este modo las señales solo entran en la entidad
OUT Las señales salen de la entidad
BUFFER Este modo se utiliza para las señales que además de salir de la entidad pueden usarse como entradas realimentadas
INOUT Este modo se utiliza para señales bidireccionales. Se emplea en salida con tres estados. Se puede asignar como sustituto de los tres modos anteriores, pero no se aconseja pues dificulta la comprensión del programa.
Tabla N˚2: Tipos de las señales en VHDL
TIPO Características
“BIT” En este tipo las señales solo toman los valores de "1" y "0"
Booleana En este tipo las señales solo toman los valores de True y False
Std_logic En este tipo las señales toman 9 valores, entre ellos tenemos: Uninitialized (U), Forcing Unknown (X), Forcing 0 (0), Forcing 1 (1), High Impedance (Z), Weak Unknown (W), Weak 0 (L), Weak 1(H), Don’t care (-).
Integer En este tipo las señales toman valores enteros.
“BIT”_Vector En este tipo los valores de las señales son una cadena de unos y ceros. Ejemplo: “1000”
Std_Logic_Vector En este tipo los valores de las señales son una cadena de los nueve valores permisibles para el tipo std_logic.
Character Contiene todos los caracteres ISO de 8 “BIT”s, donde los primeros 128 son los caracteres ASCII.
Parte 4.
Descripción de la arquitectura: En esta área se distinguen dos partes para la inclusión de código con dos propósitos distintos:
1. La comprendida entre la cabecera y la palabra BEGIN está destinada a la declaración de objetos que se precisen para realizar la descripción del funcionamiento del dispositivo.
2. Entre la palabra BEGIN y END se describe el funcionamiento del diseño.
Ahora bien, para definir la arquitectura de una entidad hay distintos niveles de abstracción:
• Por estilo de comportamiento (“behevioral”): Este estilo utiliza el lenguaje o los comandos comunes usados en lenguajes de programación, como IF, THEN, CASE, sin necesidad que el programador se preocupe por la arquitectura del elemento programable donde estará alojada la aplicación.; siendo necesario para incluir este tipo de comando la declaración de procesos ya que los mimos son de naturaleza secuencial.
• Por estilo de flujo de datos (“data flow"): En este se describe como la información es transmitida de una señal a otra, de una entrada a una salida, sin el uso de condiciones secuenciales.
• Por estilo estructural (“stuctural”): En este estilo se describe un “netlist” de VHDL en donde se interconectan varios módulos, identificando cuales módulos son usados y de que manera están interconectados.
• Por estilo mixto: En este se combinan uno o varios estilos anteriores.
Específicamente antes del Begin de la descripción de la arquitectura, se pueden declarar las constantes, variables o señales que se requieran para lograr la operación programada, teniendo que:
Una constante: es un elemento que puede tomar un único valor de un tipo dado. A las constantes se les debe asignar un valor en el momento de la declaración. Una vez que se le ha asignado algún valor, éste no puede ser cambiado dentro de la descripción del diseño. Los objetos de esta clase tienen un valor inicial que es asignado de forma previa a la simulación y que no puede ser modificado durante ésta.
Su sintaxis: constant identificador: tipo[:= valor];
Ejemplo: constant x: “BIT”:=’1’;
Una Variable: Es similar a las constantes, con la diferencia que su valor puede ser modificado cuando sea necesario. Las variables en VHDL son similares a cualquier tipo de variable de un lenguaje de programación de alto nivel. A las variables también se les puede asignar un valor inicial al momento de ser declaradas. Se utilizan únicamente en los procesos y subprogramas (funciones y procedimientos). Las variables generalmente se utilizan como índices, principalmente en instrucciones de bucle, o para tomar valores que permitan modelar componentes. Las variables no representan conexiones o estados de memoria.
Su sintaxis: variable identificador: tipo [:= valor]; La asignación posterior de valores a los objetos de este tipo se realiza con el operador “:=”.
Ejemplo: variable i :integer :=10;
Una Señal (“signal”): Es similar a un objeto de la clase variable, con una importante diferencia: las señales si pueden almacenar o pasar valores lógicos, mientras que una variable no lo puede hacer. Las señales, por lo tanto, representan elementos de memoria o conexiones y si pueden ser sintetizadas. Los puertos de una entidad son implícitamente declarados como señales en
...