Title | Lenguaje VHDL |
---|---|
Course | Programación II |
Institution | Universidad Nacional de Ingeniería Nicaragua |
Pages | 28 |
File Size | 1.5 MB |
File Type | |
Total Downloads | 72 |
Total Views | 136 |
Download Lenguaje VHDL PDF
1. Origen del lenguaje VHDL VHDL significa HDL Hardware Description Language, y a su vez VHSIC significa Very High Speed Integrated Circuit. Se trata de un lenguaje de descripción de hardware, esto significa que mediante él se puede describir la forma de comportarse de un circuito electrónico. El comportamiento puede ser llevado a algún dispositivo que dispondrá de sus propios componentes con los que lograr ese comportamiento deseado. La forma de comportarse es independiente del hardware donde se implementará. Originalmente, el lenguaje VHDL fue desarrollado por el departamento de defensa de los Estados Unidos a inicios de los años 80 basado en el lenguaje de programación ADA con el
fin de
simular circuitos
eléctricos digitales.
Posteriormente se desarrollaron herramientas de síntesis e implementación en hardware a partir de los archivos VHD. Otros métodos para diseñar circuitos son la captura de esquemas (con herramientas CAD) y los diagramas de bloques, pero estos no son prácticos en diseños complejos. Otros lenguajes para el mismo propósito, pero con un nivel de abstracción superior son Verilog y ABEL. 2. Compiladores para microcontroladores.
ActiveVHDL (Aldec)
Leapfrog (Cadence)
Leonardo (Mentor Graphics)
Max Plus II (Altera)
Project Manager y Modelsim (Xilinx)
SYNOPSYS
VeryBest
3. Estructura de un programa. VHDL fue diseñado con base a los principios de la programación estructurada. La idea es definir la interfaz de un módulo de hardware mientras deja invisible sus detalles internos. La entidad (ENTITY) en VHDL es simplemente la declaración de las
entradas
y
salidas
de
un
módulo
mientras
que
la
arquitectura
(ARCHITECTURE) es la descripción detallada de la estructura interna del módulo o de su comportamiento. En la siguiente figura se ilustra el concepto anterior. Muchos diseñadores conciben la Entity como una funda de la arquitectura dejando invisible los detalles de lo que hay dentro (architecture). Esto forma la base de un sistema de diseño jerárquico, la arquitectura de la entidad de más nivel (top level) puede usar otras entidades, dejando invisible los detalles de la arquitectura de la identidad de menos nivel. En la figura las entidades B, E y F no utilizan otras entidades. Mientras que la entidad A utiliza todas las demás. A la pareja entidadarquitectura se la llama modelo. En un fichero texto VHDL la entidad y la arquitectura se escriben separadas, por ejemplo a continuación se muestra un programa muy simple en VHDL de una compuerta de 2 entradas. Como otros programas, VHDL ignora los espacios y saltos de líneas. Los comentarios se escriben con 2 guiones (--) y terminan al final de la línea. En la figura siguiente se muestra la estructura de un modelo en VHDL. Sintaxis para la declaración de la entidad VHDL define muchos caracteres especiales llamados “palabras reservadas”. Aunque las palabras reservadas no son sensibles a las mayúsculas o minúsculas, en el ejemplo que sigue las utilizaremos en mayúsculas y negrita para identificarlas. ENTITY Nombre_entidad IS PORT ( Nombre de señal: modo tipo de señal; ... Nombre de señal: modo tipo de señal ) ; END nombre_entidad ;
Además de darle nombre a la entidad el propósito de la declaración es definir sus señales (o ports) de interfaz externa en su declaración de ports. Además de las palabras reservadas o claves ENTITY, IS, PORT and END, una ENTITY tiene los siguientes elementos. Nombre_entidad; es un identificador seleccionado por el usuario para
seleccionar la entidad. Nombre de señal; es una lista de uno o más identificadores separados por una
coma y seleccionados por el usuario para identificar las señales externas de la interfaz. MODO es una de las 4 siguientes palabras reservadas para indicar la dirección
de la señal:
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.
Cuando se omite el modo de una señal en la declaración de la entidad se sobreentiende que es de entrada.
Tipo de señal; en VHDL, hay varios tipos de señales predefinidas por el lenguaje, tales como:
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: "1", "0", "Z" (para el 3.er estado), "-" (para los opcionales).
Integer
En este tipo las señales toman valores enteros. Los 1 y los 0 se escriben sin “
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 bits, donde los primeros 128 son los caracteres ASCII.
Operadore s
Tipo
Std_logic
U
Uninitialized (Sin inicializar)
X
Forcing Unknown (Forzar valor desconocido)
0
Forcing 0 (Forzar un cero)
1
Forcing 1 (Forzar un uno)
Z
High Impedance (Alta impedancia)
W
Weak Unknown (Valor débil desconocido)
L
Weak 0 (Cero débil)
H
Weak 1 (uno débil)
-
Don’t care (Cualquier valor)
Este tipo es parte del paquete IEEE 1164 Además el usuario puede definir otros tipos de señales, lo que resulta muy conveniente en algunos casos, como en el diseño de máquinas de estados. El lenguaje VHDL concede máxima importancia a los tipos de señales, no se admite realizar una asignación mezclando tipos diferentes. Un PORT de una entidad y sus modos y tipos pueden ser vistos por otros módulos que la utilicen. La operación
interna de la entidad está definida en la architecture cuya sintaxis general se muestra a continuación. Ejemplo, escriba la declaración de la entidad para un circuito digital con dos entradas a y b y una salida F según se muestra en la siguiente figura. ENTITY ejemplo1 IS PORT ( a, b : IN bit; F : OUT bit ); END ejemplo1 ; 4. Entorno de trabajo PRIMER ENTORNO DE TRABAJO: EL PROGRAMA BLUEPC: El primer entorno de trabajo que se va a introducir es el programa BluePc. Este programa est· disponible de forma gratuita en Internet, soporta las tres descripciones de VHDL (algorítmica, dataflow y estructural) y proporciona los siguientes elementos de trabajo: Compilador en un entorno grafico (figura 1): soporta un subconjunto aceptable de VHDL; en particular soporta las construcciones de tipo process. El compilador soporta las descripciones de paquetes
(package)
y
funciones.
BluePc
dispone
de
las
librerías:
ieee.std_logic_1164.all, ieee.std_logic_textio.all, std.textio. Simulador temporal de sistemas (figura 3): proporciona las formas de onda de respuesta del circuito sometido a unos estímulos de entrada. Desde el punto de vista didáctico este compilador tiene una gran ventaja respecto de los demás entornos: admite la programación de bancos de pruebas Test Bench para los circuitos deseados previamente utilizando el propio lenguaje VHDL. Los demás entornos realizan la generación de patrones de pruebas en entornos diferenciados (no descritos en VHDL). El programa proporciona las salidas como forma de onda y como fichero de texto. En las imágenes siguientes se muestran las descripciones de un multiplexor realizadas mediante el programa BluePc. Se comprueba que se admiten las tres
descripciones (algorítmica, dataflow, estructural). Además se programa el banco de pruebas a partir del cual se instancia el circuito que se pretende simular.
ux2a
mux is signal ctrl_n, n1, n2 : bit; component INV port (y : in bit; z : out bit); end component; component AND2 port (x : in bit; y : in bit; z : out bit); end component; component OR2 port (x : in bit; y : in bit; z : out bit); end component; begin U0: INV port map (ctrl, ctrl_n); U1: AND2 port map (ctrl_n, a,n1); U2: AND2 port map (ctrl, b, n2); U3: OR2 port map (n1, n2, zout); end estructura;
entity tb_mux2a is end tb_mux2a; architecture test of tb_mux2a is signal s_a: std_logic; signal s_b: std_logic; signal s_ctrl: std_logic; signal s_z: std_logic; component mux2a1 port(a: in std_logic; b: in std_logic; ctrl: in std_logic; z: out std_logic); end component; begin uut: mux2a1 port map (a => s_a, b=> s_b, ctrl => s_ctrl, z => s_z); process begin wait for 10 ns; s_a...