Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

Controlador electrónico de velocidad PID usando CPLD (página 2)




Enviado por Cesar



Partes: 1, 2, 3, 4

Fig. 3.21: Diagrama de un motor de DC
controlado por armadura.

Monografias.com

Suponiendo que todas las condiciones iniciales son cero,
y tomando las transformadas de Laplace de las ecuaciones 3 17,
18,19 y 20, se obtiene:

Monografias.com

Fig. 3.22: Diagrama de bloques obtenido
por las ecuaciones 3.21, 22, 23, y 24.

El servomotor DC controlado por armadura
es, un sistema retroalimentado. El efecto de la fuerza
contra-electromotriz se ve que es una retroalimentación de
la señal proporcional a la velocidad del motor. Esta
fuerza contra-electromotriz incremente el amortiguamiento
efectivo del sistema.

La función de transferencia para este servomotor
de DC se puede obtener:

Monografias.com

Fig. 3.23: Diagrama de bloques
simplificado.

3.6.3 Sensor de velocidad,
tacómetro

La velocidad, como variable en los procesos
industriales se refiere normalmente a la medición de las
revoluciones de algún eje giratorio, es decir, la
velocidad angular y de esta se derivan los métodos de
medición de velocidad lineal.

Estas dos formas de medición
implican la posibilidad de realizarlas mediante métodos
mecánicos como eléctricos y
electrónicos.

En la siguiente tabla se puede apreciar los
tipos de velocidad así como sus unidades y el tipo de
instrumento empleado.

Tabla 3.03: Medición de
velocidad.

Tipo de velocidad

Unidades de
medición

Tipo de instrumento

Lineal

m/s

Velocímetro

Angular

r.p.m. o rad/s

Tacómetro

Por frecuencia

ciclo/s.

Frecuencimetro

Tacómetros

El tacómetro consiste en un
transductor que transforma la velocidad de rotación en una
señal eléctrica que se transmite a un indicador.
Esta proporción a la velocidad, el transductor produce ya
sea:

-Una señal análoga que puede
emplearse para indicación analógica.

-Pulsos que pueden ser digitales cuando se
cuentan en términos de revoluciones por unidad de
tiempo.

Efectos del sensor en el comportamiento
del sistema

Como las características
dinámicoas y estáticas del sensor o elemento de
medición afectan la indicación del valor efectivo
de la variable de salida, el sensor juega un papel importante en
la determinación del comportamiento global del sistema de
control. El sensor suele determinar la función de
transferencia en la retroalimentación. Si las constantes
de tiempo del sensor son insignificantes en comparación
con las constantes de tiempo de los demás componentes del
sistema de control, la función de transferencia del sensor
se convierte en una constante.

Monografias.com

Fig. 3.24: Diagrama de controladores con
tipo de sensores.

CAPÍTULO IV

Dispositivos
lógicos programables complejos y
el lenguaje de
programación de hardware VHDL

4.1 Nociones fundamentales

Los chips discretos SSI y MSI, poco a poco se van
sustituyendo con los LSI, los cuales pueden programarse para
realizar las funciones. Un dispositivo lógico programable
es un chip LSI que contiene una estructura de circuito "regular",
pero que permite al diseñador adecuarlo para una
aplicación específica.

Cuando un PLD típica deja la fábrica de
IC, aún no está listo para una función
específica, sino que debe ser programado por el usuario
para que realice la función requerida en una
aplicación particular. La estructura del circuito
"regular" en un PLD por regla general es un arreglo rectangular
de celdas idénticas que pueden programarse en forma
individual.

Para un área de chip dada, el potencial de
funcionalidad que puede obtenerse con tal estructura es
más grande que el de una colección aleatoria de
compuertas lógica. De hecho, en cada punto del desarrollo
de la tecnología de IC, los chips con la mayor
funcionalidad por unidad de área han sido los chips de
memoria, que contienen arreglos rectangulares de celdas de
memoria.

Los diseños que usan PLD por lo común son
más pequeños y rápidos que sus equivalentes
SSI/MSI y, a menudo también cuestan menos. Los PLD, por
regla general simplifican la tarea del diseñador. Un PLD
equivalente a un circuito más grande SSI/MSI puede
especificarse, a menudo, con un programa simple, el cuál
puede modificarse fácilmente para encontrar error o
mejorar su funcionalidad.

Los diseñadores lógicos
tienen una gama muy amplia de CI disponibles con numerosas
funciones lógicas y arreglos de circuitos sobre el mismo
CI. Además, estos CI son ofrecidos por varios fabricantes
y con un costo razonablemente bajo. Por estas razones, los
diseñadores han interconectado CI estándares para
construir una variedad casi sin fin de circuitos y sistemas
diferentes, y continuarán haciéndolo en el
futuro.

4.2. PLD complejas: CPLD

También conocidos como: EPLD (Erasable PLD) y MAX
(Multiple Array matriX, Altera) Estas estructuras extienden el
concepto de de PLD a un nivel de integración superior;
esto es, se dispone de mayor número de puertas y de
entradas/salidas en un circuito programable (con lo que se
disminuye el tamaño del diseño, el consumo y el
precio).

En vez de hacer estos circuitos con mayor número
de términos producto por macrocelda, o de mayor
número de entradas/salidas, cada CPLD contiene bloques
lógicos, cada uno de ellos similar a una estructura PAL o
GAL. Estos bloques lógicos se comunican entre sí
por medio de interconexiones programables, con lo que se
optimizan los recursos incorporados en el chip.

4.2.1 Interconexiones programables

Las interconexiones programables, conducen las
señales de los dispositivos de entrada/salida (I/O) hacia
los bloques lógicos. Cada uno de estos bloques tiene un
número predeterminado de entradas.

La mayoría de los CPLDs utilizan una de las
siguientes estrategias para la implementación de la
interconexión programable:

Interconexión basada en estructura
matricial.

Interconexión basada en multiplexores.

4.2.2 Bloques lógicos

Un bloque lógico equivale a una pequeña
estructura PAL. Dispone de una matriz que implementa
términos producto y macroceldas. Las celdas de I/O son a
veces consideradas parte de un bloque lógico.

El tamaño de un bloque lógico es una
medida de su capacidad (cuanta lógica se puede
implementar) y se expresa, habitualmente en términos del
número de macroceldas, el número de entradas y el
número de términos producto, así de
cómo su distribución.

4.2.3 Matriz de términos producto y su
distribución

Además del tamaño de la matriz (importante
par identificar el número de términos producto
promedio por macrocleda), es interesante conocer la
distribución por macroceldas.

La familia MAX está organizada de forma que cada
macrocelda tiene cuatro términos producto fijos por
macrocelda. Además dispone de una serie de términos
producto (expander product terms) que se pueden asociar a una o
varias macroceldas. Si este término se utiliza por una
única macrocelda se denomina "product-term steering",
mientras que si se puede utilizar por varias a la vez se denomina
"product-term sharing".

Versiones más evolucionadas de este concepto se
encuentran en las familia MACH de Advanced Micro Devices o en la
familia 7000 de Altera.

4.2.4 Macroceldas

Como en las PLD más sencillas, las CPLD incluyen
macroceldas en las que se dispone de biestables y señales
de control de polaridad. Además se aumenta la flexibilidad
de las mismas.

Por ejemplo muchas CPLDs ofrecen la posibilidad de
configurar los biestables como tipo D o T, para mejorar el
proceso de implementación. Además los CPLDs suelen
disponer de macroceldas de I/O (esto es, asociada con una
entrada/salida) y macroceldas con salidas sólo a la matriz
programble (buried macrocell).

También se puede seleccionar la señal de
reloj de la macrocelda, o configurar el biestable como T, JK o
RS. La salida de la macrocelda también se puede configurar
como puramente combinacional o a través del biestable.
Esta salida puede ser realimentada a la matriz programable, tanto
a nivel local como a nivel global.

Otras macroceldas con una función especializada
son las macroceldas de entrada, que son utilizadas para dotar al
dispositivo de unas líneas adicionales de entrada, que
pueden tener funciones tales como señales de reloj,
entradas de la matriz programable, etc.

4.2.5 Celdas de I/O

Son la parte que establece una conexión entre las
macroceldas y las patillas del Circuito Integrado.

4.2.6 Otras características de las
CPLD

Además de los recursos lógicos, mecanismos
de rutado, esquemas de distribución de términos
productos y modelos de retardos temporales, existen otras
características propias de los mismos.

Programabilidad en el sistema (in system
programmability o ISP)

Es la capacidad de programar el dispositivo mientras se
encuentra en la placa de circuito impreso en el que opera. De
esta forma se reduce significativamente el coste de
fabricación, ya que el dispositivo se manipula menos en
fábrica, no es necesario llevar un inventario complejo,
etc.

Re-programabilidad en el sistema (in system
reprogrammability o ISR)

Es la capacidad de reprogramar el CPLD mientras se
encuentra en la placa de circuito impreso. Se puede utilizar para
el prototipado, cargar actualizaciones o incluso alterar la
función del dispositivo mientras se encuentra en
operación.

Boundary Scan

Las especificaciones del grupo JTAG (Joint Test Action
Group), que se han convertido en la norma IEEE 1149.1, definen un
método para comprobar la funcionalidad de un dispositivo y
las conexiones a otros circuitos integrados. Desplazando datos a
través de las celdas "boundary scan", se pueden comprobar
las conexiones con otros dispositivos y se pueden aplicar
vectores de test a la lógica interna.

JTAG es una metodología que se puede utilizar
para comprobar y asegurar la calidad o para depurar
código. Para limitar el número de vectores de test
necesarios, JTAG también especifica un modo BIST (built-in
self-test): Un dispositivo en este modo genera un conjunto de
vectores de test pseudo-aleatorio como vectores de
estímulo, compara las salidas con los resultados esperados
e informa de los posibles errores.

4.2.7 Fabricantes de CPLD

Son las siguientes empresas de desarrollo
electrónico:

Altera Xilinx Cypress

Lattice Philips

4.3 Características técnicas de la
familia MAX 7000 de Altera

La familia MAX 7000 de alta densidad, es un PLD de alta
performanse, basado en la segunda generación de la
arquitectura MAX de Altera. Fabricado con tecnología de
avanzada CMOS, la EEPROM basado en la familia MAX 7000 provee de
600 a 5000 entradas utilizables, ISP, pin a pin de retraso
tan rápido de 5 ns. y velocidad de contador en 175.4
MHz.

Los dispositivos MAX 7000E, que incluyen los
dispositivos EPM 7128E, EPM 7160E, 7192E, y 7256E, tienen
características magníficas como: relojes globales
adicionales, adicionales controles de habilitación de
salida, grandes recursos de interconexión, y recursos de
entradas rápidos.

En dispositivos ISP MAX 7000, dispositivos
llamados MAX 7000S, que incluye los dispositivos EPM 7032S, EPM
7064S, EPM 7128S, EPM 7160S, EPM 7192S, y EPM 7256S. Los
dispositivos MAX 7000S tienen las grandes características
de los dispositivos MAX 7000E tan bien como la circuitería
JTAG BST en dispositivos con 128 o más macroceldas, ISP, y
una opción de salida drenador-abierto.

4.3.1 Características del MAX
7000

Tiene alta performance, el dispositivo lógico
programable está basado en EEPROM, basado en la
arquitectura de segunda generación de MAX.

El sistema programador en 5V. (ISP) completamente
construido por norma IEEE Std. 1149.1 del JTAG (Joint Test Action
Group).

La norma JTAG es compatible en los MAX 7000S que cuentan
con 128 o más macroceldas.

La familia completa de EPLD con densidades
lógicas que van desde 600 a 5000 puertas
usables.

La frecuencia del reloj es 175.4 MHz y retardo
lógico de pin a pin lógico de 5 ns (incluyendo
interconexión).

Cuenta con la opción de salida drenador-abierto
en dispositivos MAX 7000S.

Incluye macroceldas programables, flipflop, "clear"
individual, reloj preseteable y reloj habilitador de
control.

La distribución producto-termino expandible es
configurable, permitiendo más de 32
producto-término por macrocelda.

Disponible desde 44 a 208 pines en chips de con
encapsulados plásticos (PLCC), arreglo de pines-grid
cerámico (PGA), empaque llano cuadrado plástico
(PQFP), empaque llano cuadrado alimentado (RQFP) y empaque llano
cuadrado fino de 1 mm. (TQFP).

Contiene un bit de seguridad programable para la
protección de diseños.

Operación de 3.3 a 5 V.:

La operación de interfase i/o multivolt(, es una
cualidad de los dispositivos con interfase de 3.3 a 5V. (La
operación Multivolt( i/o no es permitida en chips de 44
pines).

Tiene pines compatibles con bajo-voltaje en dispositivos
MAX 7000A Y 7000B.

Características generales de los MAX 7000E y MAX
7000S.

Habilita seis pines o salidas para señales de
guías-lógicas.

Tiene 2 señales de reloj global, con opciones
inversas.

Realza los recursos para la interconexión y para
improvisadas fugas.

Rápidas entradas para sistemas de tiempo
provistas por una trayectoria dedicada, desde pines i/o a
registros de macroceldas.

Salidas programables con control rate/slow.

Soporta diseño por software y ruteado
automático, provisto por el sistema de desarrollo de
Altera para Windows-PC y SunSPARC station, y estaciones HP 9000
Serie 700/800.

Adicionalmente para el diseño y mantenimiento se
tiene, la simulación provista por los archivos EDIF 2.0 y
3.0, librerías de módulos parametrizados (LPM),
Verilog HDL, VHDL, y otros interfaces como las populares
herramientas EDA.

Mantenimiento Programable.

Unidad Programadora Maestra Altera (MPU) y
programación de hardware de otros fabricantes, para todos
MAX 7000.

El cable de descarga serial BitBlaster, el cable de
descarga paralelo ByteBlasterMV y ByteBlasterII, y el bus serial
serial/universal (USB) MasterBlaster cable de descarga para el
programa del MAX 7000S.

Tabla 4.1: Características del MAX
7000.

Monografias.com

Tabla 4.2: Características del MAX
7000S.

Monografias.com

Tabla 4.3: Uso máximo de pines I/O
del MAX 7000.

Monografias.com

4.3.2 Descripción
Funcional

La arquitectura MAX 7000 incluye los
siguientes elementos:

Bloque de arreglo lógico

Macrocelda

Términos de productos
expandibles

Arreglo de interconexión
programable

Bloques de control
entrada/salida

Monografias.com

Fig. 4.1: Diagrama de bloques del
dispositivo MAX 7000E & MAX 7000S.

Bloques de arreglo lógico

La arquitectura del dispositivo MAX 7000 está
basado en: el ruteado de alta performance, flexibilidad,
módulos de arreglo lógico llamados bloques de
arreglo lógico (Logic Array Blocks, LAB). Los bloques de
arreglo lógico consisten en 16 arreglos de macroceldas.
Los múltiples bloques de arreglo lógico son
ruteados junto a la vía del arreglo de
interconexión programable (Programmable Interconnect
Array, PIA), como un bus global que es alimentado por todas las
entradas dedicadas, pines entrada/salida y
macroceldas.

Macroceldas

Las macroceldas del MAX 7000 puede ser individualmente
configurada para operaciones lógicas secuenciales o
combinacionales. Las macroceldas consisten de tres bloques
funcionales: el arreglo lógico, la matriz seleccionable
término producto, y el registro programable.

Monografias.com

Fig. 4.2: Macrocelda para dispositivos
MAX 7000E & MAX 7000S.

Términos producto expandible

Aunque muchas funciones lógicas pueden ser
implementadas con los 5 productos términos disponibles en
cada macrocelda, la más compleja función
lógica requiere adicionales términos productos.
Otras macroceldas puede ser usados para energizar los recursos
lógicos requeridos; la arquitectura MAX 7000 permite los
términos productos expandibles compartidos y
términos expandibles paralelos que provee términos
productos adicionales directamente a cualquier macrocelda en el
mismo LAB.

Esas ayudas de términos expandibles aseguran que
la lógica es sintetizada con los pocos recursos
lógicos posibles a obtener la más rápida
velocidad posible.

Términos expandibles
compartidos

Cada LAB tiene 16 terminos expandibles compartidos que
pueden ser visto como un almacén disponible de simples
productos términos (uno desde cada macrocelda) con salidas
invertidas que son retroalimentadas en el arreglo lógico.
Cada termino expandible compartido puede ser usado y compartido
por cualquiera de todas las macroceldas en el LAB que construye
la función lógica compleja. Un pequeño
retraso (tSEXP) es provocado cuando los expandibles compartidos
son usados.

Monografias.com

Fig. 4.3: Términos expandibles
compartidos.

Expandibles paralelos

Los paralelos expandibles no son usados como
términos productos que pueden ser asignados a macroceldas
vecinas, para implementación rápida de funciones
lógicas complejas. Los paralelos expandibles permiten que
más de 20 términos productos energicen directamente
a la macrocelda lógica OR, con cinco términos
productos proveídos por la macrocelda y 15 expandibles
paralelos proveído por células vecinas en el
LAB.

Monografias.com

Fig. 4.4: Términos expandibles
paralelos.

Arreglo de Interconexión Programable
(PIA)

La lógica recorre entre los LAB por el arreglo de
interconexión programable. Este bus global es una ruta
programable que conecta cualquier fuente de señal a
cualquier destino en el dispositivo. Todos los pines del MAX
7000, pines entrada/salida, y salidas de las macroceldas
energizan el PIA, hace que la señal disponible recorra en
su totalidad del dispositivo completo. Solo las señales
necesarias por cada LAB son recorrido dentro del LAB.

Monografias.com

Fig. 4.5: Ruteado del PIA.

Bloques de control entrada/salida

El bloque de control entrada/salida permite que cada pin
entrada/salida es configurado individualmente para entrada,
salida, o operación bi-direccinal, Todos los pines de
entrada/salida tienen una memoria tri-estado, aquello controla
individualmente cada una de las salidas, lo que permite recorrido
de señales o conexión directa a la tierra o al
Vcc.

Monografias.com

Fig. 4.6: Bloque de control I/O de los
dispositivos MAX 7000.

4.3.3 Condiciones de
operación

Tabla 4.4: Lista de valores máximos
absolutos de los dispositivos MAX 7000 en 5 V.

Monografias.com

Tabla 4.5: Condiciones de
operación recomendada para un dispositivo MAX 7000 a 5
V.

Monografias.com

Tabla 4.6: Condiciones de
operación DC para dispositivos MAX 7000 en 5 V.

Monografias.com

Tabla 4.7: Capacitancia para dispositivos
MAX 7000 a 5 V.: MAX 7000S

Monografias.com

4.3.4 Modelado de tiempos

Los tiempos del dispositivos MAX 7000 puede ser
analizado con el software de Altera, con una variedad de
simuladores EDA estándar-industrial y analizadores de
tiempos, o con el modelado de tiempos. Los dispositivos MAX 7000
tienen retardos internos fijos.

Monografias.com

Fig. 4.07: Modelamiento de tiempos en
dispositivos MAX 7000.

Las características de tiempos para cualquier
ruta de señal pueden ser derivadas desde el modelamiento
de tiempos y parámetros de un dispositivo particular. Los
parámetros de tiempos externos, las cuáles
representan los retardos de pin a pin, pueden ser calculados como
la suma de parámetros internos.

En la Fig. 4.08, se muestran las siguientes figuras:
modo combinacional, modo reloj global, modo reloj de arreglo. Se
muestra la relación de tiempos internos de los
parámetros de retardo externo e interno. Donde tR y tF
< 3 ns. Las entradas conducen para una señal
lógica alta en 3 V. y para una señal lógica
baja en 0 V. Todas las características de tiempos son
medidos en 1.5 V.

Monografias.com

Fig. 4.08.a: Modelo
combinacional.

Monografias.com

Fig. 4.08.b: Modo de reloj
global.

Monografias.com

Fig. 4.08.c: Modelo reloj de
arreglo.

Las tablas 4.08 y 4.09, muestran al MAX
7000S EPM7128S muestran las condiciones en operación
AC.

Tabla 4.08: Parámetros de tiempos
externo del EPM 7128S.

Monografias.comMonografias.com

Tabla 4.09(1): Parámetros de tiempos
interno del EPM 7128S.

Monografias.comMonografias.comMonografias.com

Grados de Velocidad.

Los dispositivos MAX usan los grados de
velocidad que indica el retraso en nanosegundo (ns.) a
través de una macrocelda en el dispositivo. Por ejemplo,
un dispositivo MAX con un grado de velocidad -10 tiene un retrado
de 10 ns. a través de una macrocelda. Los dispositivos con
número bajo grado de velocidad, corren más
rápido que un dispositivo con un número alto grado
de velocidad.

4.3.5 Consumo de energía.

La fuente de energía (P) vs. la
frecuencia (fMAX en MHz) para los dispositivos MAX 7000 es
calculado con la siguiente ecuación:

Monografias.com

Tabla IV.10: Disipación de
potencia DC.

Monografias.com

Tabla IV.11: Valores VCCIO &
VO.

Monografias.com

A, B, C: Constantes para el MAX 7000S EPM7128S
es:

A=0.93

B=0.40

C=0.040

Se muestra la figura típica: corriente de
alimentación versus frecuencia, para los dispositivos MAX
7000S EPM 7128S:

Monografias.com

Fig.4.09: Icc Vs. Frecuencia para los
dispositivos MAX 7000S – EPM 7128S.

4.3.6 Pines del dispositivo MAX 7000 –
EPM7128S

El dispositivo MAX 7000-EPM 7128S con encapsulado PLCC
de 84 pines se muestra en la siguiente figura:

Monografias.com

Fig. 4.10: Pines del MAX 7000S EPM
7128S.

4.4 Lenguaje de Programación de Hardware para
Dispositivos Lógicos Programables – VHDL.

4.4.1 Generalidades de herramientas
CAD-EDA.

CAD (diseño asistido por ordenador, Computer
Aided Design) significa proceso de diseño que emplea
sotisficadas técnicas gráficas de ordenador,
apoyadas en paquetes de software para ayuda en los problemas
analíticos, de desarrollo, de coste y ergonómicos
asociados con el trabajo de diseño.

El CAD es un término asociado al dibujo como
parte principal del proceso de diseño, sin embargo, dado
que el diseño incluye otras fase, el término CAD se
emplea tanto para el dibujo, o el diseño gráfico,
como para el resto de herramientas que ayudan al diseño
(por ejemplo, la comprobación de funcionamiento,
análisis de costes, etc.)

El impacto de las herramientas de CAD sobre el proceso
de diseño de circuitos electrónicos y sistemas
procesadores es fundamental. No sólo por la adición
de interfaces gráficas para facilitar la
descripción de esquemas, sino por la inclusión de
herramientas, como los simuladores que facilitan el proceso de
diseño y la conclusión con éxito de los
proyectos.

EDA (Electronic Design Automation) es el nombre que se
le da a todas las herramientas (tanto hardware como software) que
sirven de ayuda en el diseño de sistemas
electrónicos. Dentro del EDA, las herramientas de CAD
juegan un importante papel. Sin embargo, no sólo el
software es importante; computadoras cada día más
veloces, elementos de entrada de diseño cada vez
más sofisticados, etc., son también
características que ayudan a facilitar el diseño de
circuitos electrónicos.

El diseño hardware tiene un problema fundamental,
que no existe, por ejemplo, en la producción del software.
Este problema es el alto coste del ciclo
diseño-prototipación-testeo-vuelta a empezar, ya
que el coste del prototipo suele ser, en general, bastante,
elevado. Se impone la necesidad de reducir este ciclo de
diseño para no incluir la fase de prototipación
más que al final del proceso, evitando así la
repetición de varios prototipos que es lo que encarece el
ciclo.

Para ello se introduce la fase de simulación y de
comprobación de circuitos utilizando herramientas de CAD,
de forma que no es necesario realizarlo físicamente un
prototipo para comprobar el funcionamiento del circuito,
economizando así el ciclo de diseño. Este ciclo de
diseño hardware se muestra en detalle en la
figura.

Monografias.com

Fig. 4.11: Flujo de diseño para
sistemas electrónicos y digitales.

En el ciclo de diseño hardware las herramientas
de CAD están presentes en todos los pasos. En primer lugar
en la fase de descripción de la idea, que será un
esquema eléctrico, un diagrama de bloques, etc. En segundo
lugar en la fase de simulación y comprobación de
circuitos, donde diferentes herramientas permiten realizar
simulación por eventos, funcional, digital o
eléctrica de un circuito atendiendo al nivel de
simulación requerido.

Por último existen las herramientas de CAD
orientadas a la fabricación. En el caso de diseño
hardware estas herramientas sirven para la realización de
PCBs (Printed Circuit Boards o placas de circuito impreso), y
también para la realización de ASICs o Circuitos
Integrados de Aplicación Específica (Application
Specific Integrated Circuits). Estas herramientas permiten la
realización de microchips, así como la
realización y programación de dispositivos
programables.

Herramientas CAD para el diseño
hardware:

Lenguaje de descripción de
circuitos.

Son lenguajes mediante los cuales es posible describir
un circuito eléctrico o digital. La descripción
puede ser estructural, donde se muestra la arquitectura del
diseño, o bien de comportamiento, donde se describe el
comportamiento del circuito en vez de los elementos de los que
está compuesto.

Captura de esquemas.

Es la forma clásica de describir un diseño
electrónico y la más extendida, ya que era la
única usada antes de la aparición de las
herramientas de CAD. La descripción está basada en
un diagrama donde se muestran los diferentes componentes de un
circuito y sus interconexiones.

Grafos y diagramas de flujo.

Es posible describir un circuito, o sistema, mediante
diagramas de flujo, máquinas de estados, etc. En este caso
sería una descripción gráfica pero, al
contrario que en la captura de esquemas, la descripción
sería comportamental en vez de una descripción de
componentes.

Simulación de
sistemas.

Estas herramientas se usan sobre todo para la
simulación global de sistemas. Los componentes de la
simulación son elementos de alto nivel como discos duros,
buses de comunicaciones, etc. Se aplica la teoría de colas
para la simulación.

Simulación funcional.

Bajando al nivel de circuitos digitales se puede
realizar una simulación funcional. Este tipo de
simulación comprueba el funcionamiento de circuitos
digitales de forma funcional, es decir, a partir del
comportamiento lógico de sus elementos (sin tener en
cuenta problemas eléctricos como retrasos, etc.) se genera
el comportamiento del circuito frente a unos estímulos
dados.

Simulación digital.

Esta simulación, también exclusiva de los
circuitos digitales, es como la anterior con la diferencia de que
se tienen en cuenta retrasos en la propagación de las
señales digitales. Es una simulación muy cercana al
comportamiento real del circuito y prácticamente garantiza
el funcionamiento correcto del circuito a realizar.

Simulación
eléctrica.

Es la simulación de más bajo nivel donde
las respuestas se elaboran a nivel del transistor. Sirven tanto
para circuitos analógicos como digitales y su respuesta es
prácticamente idéntica a la realidad.

Realización de PCBs.

Con estas herramientas es posible realizar el trazado de
pistas para la posterior fabricación de una placa de
circuito impreso.

Realización de circuitos
integrados.

Son herramientas de CAD que sirven para el diseño
de circuitos integrados. Las capacidades gráficas de estas
herramientas permiten la realización de las diferentes
máscaras que intervienen en la realización de
circuitos integrados.

Realización de dispositivos
programables.

Con estas herramientas se facilita la
programaxción de este tipo de dispositivos, desde las
simples PAL, PLD y FPGA.

4.4.2 El lenguaje de programación de un
PLD.

Un PLD se programa al especificar un patrón de
diodos o fusibles. Sin embargo, a pocos diseñadores les
gusta cortar los fusibles en forma directa y ni siquiera en modo
indirecto con un archivo de texto hexadecimal. En su lugar, la
mayoría de los diseñadores usan un lenguaje de
programación PLD para especificar simbólicamente
las funciones lógicas.

Un lenguaje de programación PLD está
respaldado por un procesador de lenguaje PLD, que
simplemente se llamará compilador. La tarea del
compilador es traducir un archivo de texto escrito en el lenguaje
en un patrón de fusibles para el PLD
físico.

Aún cuando la mayoría de los PLD pueden
programarse físicamente sólo con expresiones de
suma de productos, otros lenguajes de programación
permiten que las ecuaciones PLD se escriban casi en cualquier
formato.

El compilador manipula algebraicamente y minimiza las
ecuaciones para ajuste, si es posible dentro de la estructura PLD
disponible. Los compiladores más avanzados para PLD
secuenciales permiten que las máquinas de estados se
definan en un lenguaje de alto nivel y seleccionan en forma
automática un PLD apropiado, hacen la asignación de
estado y desarrollan las ecuaciones lógicas.

En cuánto las PLD y sus versiones más
complejas (CPLD) y FPGAs (Field Programmable Gate Array) se
utilizan para integrar gran cantidad de lógica en un
único C.I. Frente a los diseños ASIC (Application
Specific Integrated Circuit) los productos basados en PLD ofrecen
al diseñador una mayor flexibilidad, menor tiempo de
desarrollo, y en una primera aproximación son apropiados
para bajos volúmenes de producción.

En cuanto a las herramientas EDA, tanto gráficas
(ej. Viewlogic) como textuales (ABEL o VHDL). Se opta por el
lenguaje VHDL como lenguaje de descripción hardware por
los siguientes motivos:

– Aunque otros lenguajes (ej. ABEL) resultan más
intuitivos, y de hecho se encuentran optimizados para el
diseño con estructuras programables, el lenguaje VHDL
también se utiliza (y se considera un estándar) en
el diseño de circuitos integrados de aplicación
especifica (ASIC) por lo que el mismo esfuerzo de aprendizaje
sirve para los dos ámbitos.

– Consideramos que, una vez aprendido el lenguaje VHDL,
resulta muy fácil

utilizar otros lenguajes como ABEL.

– VHDL se puede entender como un lenguaje de alto nivel
que permite describir circuitos complejos. Permite la
creación de librerías, en las que se definen
componentes que pueden ser utilizados repetidamente.

– El hecho de ser un estándar (norma IEEE 1076)
permite la portabilidad de código entre diferentes
plataformas de desarrollo.

– Facilita el paso de la implementación de un
diseño en PLD hacia la implementación en
ASIC.

4.5 Programación en lenguaje
VHDL.

VHDL es el lenguaje de descripción de hardware de
circuitos integrados de muy alta velocidad. VHDL es un lenguaje
de descripción y modelado diseñado para describir,
en una forma en que el programador y la máquina pueda leer
y entender la funcionalidad y la organización de sistemas
hardware digitales, placas de circuitos y componentes.

4.5.1 Introducción al VHDL.

VHDL es un lenguaje con una sintaxis amplia y flexible
que permite el modelado estructural, en flujo de datos y de
comportamiento hardware. VHDL permite le modelado preciso, en
distintos estilos, del comportamiento de un sistema digital
conocido y el desarrollo de modelos de
simulación.

Las ventajas del uso de VHDL para la descripción
hardware son:

– Permite diseñar, modelar y comprobar un sistema
desde un alto nivel de abstracción bajando hasta el nivel
de definición estructural de puertas.

– Circuitos descritos utilizando VHDL, siguiendo unas
guías para síntesis, pueden ser utilizados por
diversas herramientas de síntesis para crear e implementar
circuitos.

– Los módulos creados en VHDL pueden utilizarse
en diferentes diseño, lo que permite la
reutilización del código.

– Al estar basado en el estándar IEEE Std.
1076-1987, IEEE Std 1076-1993, se usa este lenguaje para
minimizar errores de comunicación y problemas de
compatibilidad.

– VHDL permite diseño top-down, esto es describir
(modelar) el comportamiento de los bloques de alto nivel,
analizarlos (simularlos) y refinar la funcionalidad en alto nivel
requerida antes de llegar a niveles más bajos de
abstracción de la implementación del
diseño.

Monografias.com

Fig. 4.12: Metodología de
diseño top-down.

– Modularidad: VHDL permite dividir o
descomponer un diseño hardware y su descripción
VHDL en unidades más pequeñas.

Existen dos formas de describir un circuito:

– Se describe un circuito indicando los diferentes
componentes que lo forman y su interconexión, así
se tiene especificado un circuito y como funciona. Las
herramientas utilizadas para ello son la captura de esquemas y la
descripción Netlist.

– El netlist o lista de conexiones, es la primera forma
de describir un circuito mediante un lenguaje, y consiste en dar
una lista de componentes, sus interconexiones y las entradas y
salidas.

– Se describe un circuito indicando lo que hace o
cómo funciona, es decir, describiendo su
comportamiento

VHDL permite los dos tipos de descripciones:

Estructura: VHDL puede ser usado como un
lenguaje de Netlist normal y corriente donde se especifican por
un lado los componentes del sistema y por otro lado sus
interconexiones.

Comportamiento: VHDL también se puede
utilizar para la descripción comportamental o funcional de
un circuito. Esto es lo que distingue de un lenguaje de Netlist.
Esto es útil en simulación, ya que permite simular
un sistema sin conocer su estructura interna. Así este
tipo de descripción se está volviendo cada
día más importante porque las actuales herramientas
de síntesis permiten la creación automática
de circuitos a partir de una descripción de su
funcionamiento.

La descripción de circuitos según su
comportamiento se divide, dependiendo del nivel de
abstracción y del modo en que se ejecutan las
instrucciones. Estás son:

– Descripción algorítmica.

– Descripción flujo de datos.

– Descripción estructural.

Para ilustrarlos se propone el siguiente ejemplo de
diseño: Describir en VHDL un circuito que multiplexe dos
líneas de entrada (a y b) de un bit, a una sol
línea (salida) también de un bit; la señal
selec sirve para seleccionar la línea a (selec="0") o b
(selec="1").

Monografias.com

Fig. 4.13: Esquema del ejemplo de
diseño en VHDL.

En primer lugar, sea el tipo de descripción que
sea, hay que definir el símbolo o entidad del
circuito. En efecto, lo primero es definir las entradas y salidas
del circuito, es decir, la caja negra quelo define. Se le llama
entidad porque en la sintaxis de VHDL esta parte se declara con
la palabra clave ENTITY .

Esta definición de entidad, que suele ser la
primera parte de toda descripción VHDL, se
expone:

ENTITY mux IS

PORT (a: IN bit;

b: IN bit;

selec: IN bit;

salida: OUT bit);

END mux;

Está parte del lenguaje indica que la entidad
mux (nombre dado al circuito) tiene tres entradas de
tipo bit y una salida también del tipo
bit. El tipo bit simplemente indica una
línea que puede tomar los valores "0" o "1".

La entidad de un circuito es única. Sin
embargo puede tener varias arquitecturas. Cada bloque de
arquitectura, que es donde se describe el circuito, puede ser una
representación diferente del mismo circuito, por ejemplo
la descripción estructural y otra comportamental, ambas
son diferentes pero son el mismo circuito.

Descripción
algorítmica

Se muestra la descripción comportamental del
multiplexo (ejemplo de diseño).

ARCHITECTURE comportamental OF mux
IS

BEGIN

PROCESS (a,b,selec)

BEGIN

IF (selec:="0") THEN

salida<=a;

ELSE

salida<=b;

END IF;

END PROCESS;

END comportamental;

Está descripción comportamental
algorítmica sigue una estructura parecida a los lenguajes
de programación convencionales. Lo que se está
indicando es si la señal selec es cero, entonces
la salida es la entrada a, y si selec es uno, entonces
la salida es la entrada b.

Descripción flujo de datos.

VHDL posee la forma de describir circuitos, permite
paralelización de instrucciones, encontrándose muy
cerca de una descripción estructural, es una
descripción funcional. Se muestra dos ejemplos:

Ejemplo 1:

ARCHITECTURE flujo1 OF mux
IS

SIGNAL nosel , ax , bx: bit;

BEGIN

nosel<=NOT selec;

ax<=a AND nosel;

bx<=b AND selec;

salida<=ax OR bx;

END flujo1;

Hay varias instrucciones todas ellas concurrentes, es
decir se ejecutan cada vez que cambia alguna de las
señales que intervienen en la asignación. Este
ejemplo 1 es casi una descripción estructural, ya que de
alguna manera se están describiendo las señales
(cables) y los componentes que la definen; aunque no es
estructural, ya que se trata de asignaciones a señales y
no una lista de componentes y conexiones.

Ejemplo 2.

ARCHITECTURE flujo2 OF mux
IS

BEGIN

salida<=a WHEN selec:="0"
ELSE

b;

END flujo2;

Es una descripción de flujo de datos, aunque
basta una única instrucción de asignación
para definir el circuito.

Descripción estructural.

Aunque no es la característica más
interesante del VHDL, también permite ser usado como
Netlist o lenguaje de descripción de estructura. En este
caso esta estructura también estaría indicada
dentro de un bloque de arquitectura, aunque la sintaxis interna
es completamente diferente:

ARCHITECTURE estructura OF mux
IS

SIGNAL ax,bx,nosel:bit;

BEGIN

u0: ENTITY inv PORT MAP (e=>selec,
y=>nosel);

u1: ENTITY and2 PORTMAP
(e1=>a,e2>=nosel,y=>ax);

u2: ENTITY and2 PORTMAP
(b,selec,bx);

u3: ENTITY or2 PORTMAP
(e1=>ax,e2=>bx,y=>salida);

END estructura;

En el cuerpo de la arquitectura se hace lo que en un
netlist normal, se coloca los componentes y sus interconexiones.
Para los componentes se utilizarán entidades que
estarán definidas en alguna biblioteca, y para la
conexiones se usarán señales que se
declararán al principio de la arquitectura.

Al igual que un netlist, las señales o conexiones
tienen un nombre. Las líneas de conexión del
circuito se declara como SIGNAL en el cuerpo de la
arquitectura y delante del BEGIN. Se identifica cada
componente, que es la replicación, asignando a cada
componente concreto un símbolo y/o nombre, después
del nombre viene la entidad correspondiente al componente.
Después se realiza las conexiones poniendo cada
señal en su lugar correspondiente con PORT MAP.

Las dos primeras descripciones se ajustan al
VHDL´87 y VHDL´93 y el último al
VHDL´93. En VHDL´87, no se permite la referencia
directa a la entidad, por lo que se hace necesaria la
definición de un componente y luego el enlace, en un
bloque de configuración, del componente con la entidad que
se quiera. Esto es muy extenso, y se pretende mostrar las
posibilidades del VHDL, como lenguaje estructural, se ha
preferido utilizar esta última forma que además es
más moderna y actual.

VHDL´87 y VHDL´93

VHDL es efectivamente un lenguaje estándar y
existe dos versiones. El primer VHDL estándar fue creado
en 1987: VHDL´87, está fue estandarizada por la IEEE
y su número de registro fue el 1076: IEEE
Std.1076-1987.

Está primera versión mostró algunas
carencias, especialmente en lo relacionado con la síntesis
de circuitos. En 1993 apareció la segunda versión
VHDL´93 y es la versión IEEE Std. 1076-1993. Ambas
especificaciones son bastantes parecidas y sólo tienen
algunas diferencias, excepto en la declaración y uso de
los ficheros.

En la siguiente lista se enumeran la mayoría de
las incorporaciones realizadas al VHDL´93 frente a la
versión del 87.

– Se dio consistencia a la delimitación de varias
estructuras: entidades, arquitecturas, configuraciones, paquetes,
componentes, procedimientos, funciones, procesos, senencias de
generación, sentencias condicionales.

– Referencia directa de entidades y
configuración, así es innecesario el uso de los
componentes.

– Se añade la posibilidad de abrir y cerrar
ficheros.

– Es posible el uso de variables compartidas.

– Se definen nuevos atributos como "image y
path_name´.

– Sentencia de informe report para escribir
mensajes.

– Nuevos operadores que incluyen todos los de
rotación y desplazamiento, además del
XNOR.

– Generalización de las formas Octal y
Hexadecimal, que sólo se podían usar con el tipo
bit_vector, y que ahora también sirven para el
tipo std_logic_vector.

– Los puertos en modo entrada (IN) se pueden
conectar a constantes en el PORT MAP.

– Se añada la posibilidad REJECT para
las asignaciones a señal con retraso inercial.

– Se admite la posibilidad de posponer la
ejecución de procesos al final del ciclo de
simulación, son los procesos
POSTPONED.

– Las funciones se pueden declarar como puras o
impuras.

– Se pueden realizar declaraciones dentro de las
sentencias de referencia.

– A cualquier elemento sintáctico se le puede
poner un alias.

– Se añaden los grupos para permitir el paso de
información entre herramientas.

– Se permiten etiquetas para las sentencias en
serie.

– Los identificadores pueden contener casi cualquier
carácter imprimible.

– Los ficheros se usan y declaran de forma
diferente.

4.5.2 Elementos sintácticos del
VHDL.

Algunos de los elementos sintácticos son los
siguientes:

Comentarios

Cualquier línea que empiezan por dos guiones
"—".

Símbolos especiales

Además de las palabras reservadas, existen
caracteres especiales: + – / * ( ) . , : ; & " " < > =
# ** => := /= >= <= <> —

Identificadores

Es lo que se usa para dar nombre a los diferentes
objetos del lenguaje como variables, señales, nombres de
rutina, etc.

Números

Cualquier número se considera que se encuentra en
base 10. Se admite la notación científica
convencional para números en coma flotante. Es posible
números en otras bases utilizando el símbolo del
sostenido "#". Ejemplo: 2#11000100#.

Caracteres

Es cualquier letra o carácter entre comillas
simples: "1", "t".

Cadenas

Son un conjunto de caracteres englobados por comillas
dobles: "esto es una cadena".

Cadena de bits

Los tipo bit y bit_vector son en realidad de
tipo carácter y matriz de caracteres respectivamente. En
VHDL se tiene una forma de definir números con estos
tipos, y es mediante una cadena de bits. Dependiendo de la base
en que se especifique el número se puede poner un prefijo
B (binario), O (octal), X (hexadecimal). Ejem.:
B"11101001".

Palabras reservadas

Son las instrucciones, órdenes y elementos que
permiten definir sentencias. No se deben utilizar como
identificadores. Estos son:

Monografias.com

Operadores aritméticos:

Exponencial (**)

Sirve para elevar un número a una potencia: 4**2
es 42 .

Valor Absoluto (ABS)

Devuelve el valor absoluto de su argumento que puede ser
de cualquier tipo numérico..

Multiplicación (*)

Multiplica dos números de tipo numérico,
los tipos bit o bit_vector no son
numéricos.

División (/)

Divide dos números de tipo
numérico.

Operadores de desplazamiento

Existen en el VHDL´93.

SLL, SRL (desplazamiento lógico a izquierda y
a derecha)

Desplaza un vector un número de bits a izquierda
(SLL) o derecha (SRL) rellenando con ceros los huecos
libres.

SLA, SRA (desplazamiento aritmético a
izquierda y derecha).

La diferencia con el anterior es que este desplazamiento
conserva el signo, es decir, conserva el valor que tuviera el bit
más significativo del vector.

ROL, ROR (rotación a izquierda y a
derecha)

Es como el de desplazamiento, pero los huecos que se
forman son ocupados por los bits que van saliendo.

Operadores relacionales

Devuelven siempre un valor de tipo booleano
(trae o false): Los tipos con los que pueden
operar dependen de la operación:

Igualdad (= o :=, /=)

El primero devuelve true si los operandos son
iguales y false en caso contrario. El segundo indica
desigualdad, así que funciona justo al revés. Los
operandos pueden ser de cualquier tipo con la condición de
que ambos sean del mismo tipo.

Menor y mayor (<, <=,>
,>=)

Tienen el significado habitual. La diferencia con los
anteriores es que los tipos de datos que pueden manejar son
siempre de tipo escalar o matrices de una sola dimensión
de tipos discretos.

Operadores lógicos

Son NOT, AND, NAND, OR, NOR, XOR y en el VHDL´93
se añade el XNOR. El funcionamiento es el habitual para
este tipo de operadores. Actúan sobre los tipos
bit, bit_vector y bolean. En caso de
realizarse estas operaciones sobre un vector, la operación
se realiza bit a bit, incluyendo la operación NOT que nada
tienen que ver con el signo.

Tipos de datos:

VHDL tiene dos grupos de tipos de datos: escalares y
compuestos.

Tipo escalares

Son tipos simples que contienen algún tipo de
magnitud. Los tipos de escalares y predefinidos en VHDL
son:

Enteros

Son datos cuyo contenido constituye un valor
numérico entero. La forma en que se definen estos datos es
mediante la palabra clave RANGE, es decir, no se dice que un dato
es de tipo entero, sino que está comprendido en cierto
intervalo especificando los límites de dicho intervalo con
valores enteros.

Ejemplos:

TYPE byte IS RANGE 0 TO
255;

TYPE index IS RANGE 7 DOWNTO
1;

TYPE integer IS RANGE -2147483648
TO 2147483647;

Reales

Conocidos también como coma flotante, son los
tipos que definen un número real. Al igual que los enteros
se definen mediante la palabra clave RANGE, con la diferencia de
que los límites son números reales.

Ejemplos:

TYPE nivel IS RANGE 0.0 TO
5.0;

TYPE real IS RANGE -1.0E38 TO
1.0E.38;

Físicos

Se trata de datos que se corresponden con magnitudes
físicas, tienen un valor y unidades.

TYPE longitud IS RANGE 0 TO
1.0e9

UNITS

um;

mm=1000 um;

m=1000 mm;

inch=25.4 mm;

END UNITS;

El tipo físico predefinido en VHDL es el time.
Este tipo se utiliza para indicar retrasos y tiene todos los
submúltiplos, desde fs (femtosegundos) hasta hr
(horas).

Cualquier dato físico se escribe siempre con su
valor seguido de la unidad.

Enumerados

Son datos que pueden tomar cualquier valor especificado
en un conjunto finito o lista. Este conjunto se indica mediante
una lista encerrada entre paréntesis de elementos
separados por comas.

Ejemplos:

TYPE nivel_logico IS
(nose,alto,bajo,z);

TYPE bit IS ("0","1");

VHDL permite la definición de subtipos que son
restricciones o subconjuntos de tipos existentes. Sea los
ejemplos de subtipo obtenido a partir de la restricción de
un tipo escalar a un rango.

SUBTYPE raro IS integer RANGE 4
TO 7;

SUBTYPE digitos IS carácter
RANGE "0" TO "9";

SUBTYPE natural IS integer RANGE 0
TO entero_mas_alto;

SUBTYPE positivo IS integer RANGE 1
TO entero_mas_alto;

La ventaja de utilizar un subtipo es que las mismas
operaciones que servían para el tipo también sirven
para el subtipo.

Tipo Compuestos

Son tipos de datos que están compuestos por tipos
escalares.

Matrices

Es una colección de elementos del mismo tipe a
los que se accede mediante un índice. Los hay
monodimensionales (un índice) o multidimensionales (varios
índices). Los matrices VHDL son enmarcadas en un rango, o
el índice puede ser libre teniendo la matriz una
dimensión teórica infinita.

Ejemplos:

TYPE word IS ARRAY (31 DOWNTO 0)
OF bit;

TYPE transformada IS ARRAY (1 TO 4,
1 TO 4) OF real;

TYPE positivo IS ARRAY (byte RANGE
0 TO 127) OF integer;

A los elementos de una matriz se accede mediante el
índice. Así dato (3) es el elemento 3 del vector
dato. De la misma manera se puede acceder a un rango:

datobyte<=datoword(2 TO 9)

Sea ejemplo de subtipos de datos que restingen el rango
de una matriz:

SYBTYPE id IS swing (1 TO
20);

SUBTYPE word IS BIT_VECTOR (31
DOWNTO 0);

Atributos

Los elementos en VHDL, como señales, variables,
etc., pueden tener información adicional llamada
atributos. Estos atributos están asociados a estos
elementos del lenguaje y se manejan en VHDL mediante:
".

Suponiendo que t es un tipo enumerado, entero, flotante,
o físico, se tiene los siguientes atributos más
usados en VHDL:

– T"left: límite izquierdo del tipo t.

– T"right: límite derecho del tipo t.

– T"low: límite inferior del tipo t.

– T"high: límite superior del tipo t.

Por ejemplo, t"left indica el atributo ´left de t
(valor escalar), este atributo indica el límite izquierdo
del rango.

Suponiendo que s es una señal, se pueden utilizar
los siguientes atributos, de los más usados:

– S"event: devuelve true si se ha producido un cambio en
la señal s.

– S"stable (tiempo): Devuelve true si la señal
estuvo estable durante el último periodo
tiempo.

El atributo "event es especialmente útil en la
definición de circuitos secuénciales para detectar
el flaco de subida o bajada de la señal de
reloj.

Declaración de constantes, variables y
señales

Hay tres tipos de elementos en VHDL: las variables, las
señales, y las constantes.

Constantes

Es un elemento que inicializa a un determinado valor que
no puede ser cambiado una vez inicializado, si no que se conserva
para siempre. Ejemplos:

CONSTANT e: real :=2.71828;

CONSTANT ratraso: time := 10 ns.

Variables

Se diferencia de la constante en que su valor puede ser
alterado en cualquier instante. A las variables también se
les puede asignar un valor inicial. Ejemplos:

VARIABLE aux: bit_vector (31 DOWNTO
0);

Señales

Las señales se declaran igual que las constantes
y variables con la diferencia de que las señales pueden
ser normal, register y bus. Si en la declaración no se
especifica nada, se entiende que la señal es de tipo
normal; para que sea de tipo bus o register se debe declarar
explícitamente con las palabras claves: BUS o
REGISTER.

Una señal no es lo mismo que una variable. La
señal no es exactamente un objeto del lenguaje que guarda
un valor, si no guarda un valor o varios, y hacerlo visible en el
momento adecuado. Esto quiere decir, la señal tiene dos
partes, una donde se escribe y que almacena el valor, y otra que
se lee y que no tiene por qué coincidir con lo que se
acaba de escribir.

Al igual que en variables y constantes, a las
señales también se les puede dar un valor inicial
si se quiere. Ejemplo:

SIGNAL selec: bit := "0";

Comparación entre constantes, señales
y variables

– Las variables sólo tienen sentido dentro de un
bloque (PROCESS) o un subprograma, es decir, sólo tienen
sentido en entornos de programación donde las sentencias
son ejecutadas en serie.

– Las señales pueden ser declaradas
únicamente en las arquitecturas, paquetes (PACKAGE), o en
los bloques concurrentes (BLOCK).

– Las constantes son declaradas en los mismos sitios que
las variables y señales.

– Las variables son elementos abstractos del lenguaje,
lo que significa que no tienen por qué tener una
concordancia física real inmediata.

– Las señales poseen un significado físico
inmediato, y es el de representar conexiones reales en el
circuito

Declaración de entidad

La entidad es la parte del programa que define el
símbolo. Es decir, define las entradas y salidas del
circuito. Además, la entidad es la estructura que permite
realizar diseños jerárquicos en VHDL, ya que un
diseño jerárquico es generalmente una
colección de módulos interconectados entre
sí. En VHDL estos módulos se definen mediante la
palabre clave ENTITY.

La forma general de declaración de entidad
es:

ENTITY nombre IS

[GENERIC (lista de parámetros);
]

[PORT (lista de puertos); ]

[declaraciones]

[BEGIN

sentencias]

END [ENTITY] [nombre];

Las sentencias GENERIC y PORT son las que
más significado tienen a pesar de ser
opcionales.

La instrucción GENERIC sirve para definir
y declarar propiedades o constantes del módulo que
está siendo declarado en la entidad. Las constantes
declaradas aquí tienen el mismo significado que las
constantes declaradas como parámetros en las funciones y
procedimientos que se verán más
adelante.

Es decir a la entidad se le puede pasar como
parámetros las constantes definidas en GENERIC, si
se pasan valores entonces la constante tomará el valor que
se le pasa, y si no se le pasa ningún valor., la constante
tomará el valor por defecto que se le hubiera asignado en
GENERIC, si es que se le asignó uno.

La instrucción PORT, también
opcional como el resto de partes de la entidad, se definen las
entradas y salidas del módulo que está siendo
definido. Esta forma de declarar estas entradas y salidas ya se
ha visto, y simplemente consiste en un nombre, seguido por el
modo de conexión, y seguido por el tipo de datos de la
línea. Los dos modos de conexiones son IN, para indicar
entrada, y OUT para indicar salida.

La diferencia entre IN y OUT es
importante: las señales de entrada se pueden leer pero
no puede asignárseles ningún valor, es
decir, no se puede cambiar su valor en el programa, y vienen a
ser como constantes. Las señales de salida pueden cambiar
y se les pueden asignar valores, pero no pueden leerse,
es decir, no pueden ser usadas como argumentos en la
asignación de cualquier elemento del VHDL. Si no se
especifica el tipo de puerto se supone el tipo IN por
defecto.

La parte de declaraciones es opcional, como todo lo que
va dentro de la entidad, y sirve para realizar algunas
declaraciones de constantes, etc. A continuación le sigue
un bloque BEGIN, también opcional, donde se pueden
incluir sentencias. El tipo de sentencias que se pueden utilizar
en esta parte son muy restringidas y se limitan a sentencias de
indicación de errores o comprobación de
algo.

Ejemplo:

ENTITY rom IS

GENERIC (tamano, ancho: positive);

PORT (enable : IN bit;

address : IN bit_vector (tamano-1 DOWNTO
0);

data: OUT bit_vector (ancho-1 DOWNTO
0));

END rom;

Declaración de arquitectura

En la arquitectura es donde se define el funcionamiento
del módulo definido en la entidad. Una arquitectura
siempre está referida a una entidad concreta, por lo que
no tiene sentido hacer declaraciones de arquitectura sin
especificar la entidad. Una misma entidad puede tener diferentes
arquitecturas.

La declaración de la arquitectura se realiza con
la palabra reservada ARCHITECTURE, y su sintaxis completa
es:

ARCHITECTURE nombre OF nombre_entidad
IS

[declaraciones]

BEGIN

[sentencias concurrentes]

END [ARCHITECTURE] [nombre]

Antes de definir la funcionalidad en el bloque
BEGIN..END hay una parte declarativa donde se definen los
subprogramas (funciones, procedimientos, etc.), declaraciones de
tipo, declaraciones de constantes, declaraciones de
señales, declaraciones de alías, declaraciones de
componentes, etc. Es importantes destacar que uno de los pocos
sitios donde se pueden declarar señales es dentro de la
parte declarativa de una arquitectura.

A continuación, después del BEGIN, se
encuentran todas las instrucciones que definen el comportamiento,
estructura, y funcionalidad del circuito. Hay que destacar que
dentro de la arquitectura las instrucciones son de dos tipos: o
concurrentes, o de referencia de componentes, que en realidad
también es una construcción concurrente. En el caso
de definir estructura las instrucciones serán de
referencia, es decir, de colocación de componentes y las
conexiones entre ellos.

4.5.3 Descripción de sentencias comportamental
algorítmica.

VHDL permite una programación de
descripción algorítmica o en serie,

Bloque de ejecución serie:
PROCESS

La programación serie se define dentro de bloques
indicados con la palabra reservada PROCESS. En un mismo programa
puede haber múltiples bloques PROCESS. En el caso de que
ocurra, cada uno de ellos equivale a una instrucción
concurrente. Es decir, internamente a los PROCESS la
ejecución de las instrucciones es serie, pero entre los
propios bloques PROCESS, que pueden convivir con otras
instrucciones concurrentes, la ejecución es
concurrente.

La forma en que se declara un bloque PROCESS es la
siguiente:

[id_proc];

[POSTPONES] PROCESS [(lista_sensible)]
[IS]

declaraciones

BEGIN

Instrucciones_serie

END [POSTPONED] PROCESS
[id_proc];

El id_proc es simplemente una etiqueta opcional que
sirve para ponerle nombre a los diferentes procesos de una
descripción.

La (lista sensible) es también opcional y
contiene una lista de señales separadas por comas y
encerradas entre paréntesis.

La ejecución PROCESS se activa cuando se produce
un evento, o cambio, en alguna de las señales de la lista
sensible. En el caso de no existir una lista sensible, la
ejecución se controla mediante el uso de sentencias WAIT
dentro del PROCESS.

La parte de declaración es parecida a la de otras
estructuras, de forma que se opueden definir aquí
variables, tipos, subprogramas, atributos, etc., pero en
ningún caso señales. Este es el único lugar,
aparte de en los subprogramas, donde se pueden definir las
variables, donde no se puede hacer en estructuras como entidades,
bloques, arquitecturas o paquetes.

Entre el BEGIN .. END vienen todas las instrucciones
serie que , como se verá, presentan sus propios elementos
sintácticos, siendo la asignación simple el
único elemento común con la ejecución
concurrente.

Sentencia de espera: WAIT.

La ejecución de un bloque PROCESS, si no se
indica nada más, se realiza de forma continuada como si de
un bucle se tratara. Es decir, se ejecutan todas las
instrucciones y se vuelve a empezar. Por lo tanto, debe existir
un mecanismo que permita detener la ejecución del bloque
serie.

Una de las formas de detener la ejecución es
mediante la inclusión de la lista sensible. La
inclusión de esta lista equivale a la adición de
una sentencia de espera al final del proceso, para que detenga la
ejecución del PROCESS hasta que cambie alguna de las
señales de la lista sensible.

Aunque la utilización de la lista sensible es
suficiente para la mayoría de procesos en un programa,
existe una posibilidad más compleja de detener la
ejecución del bloque serie resultando la lista sensible un
caso particular de esta operación. La forma
genérica de detener la ejecución en un proceso se
realiza mediante la palabra reservada WAIT que detiene la
ejecución hasta que se cumple una condición o
evento especificado en la propia sentencia. La sintaxis es como
sigue:

[id_wait]

WAIT [ON lista_sensible] [UNTIL
condición] [FOR tiempo_límite]

Los tres elementos que se ven en la instrucción
de espera indican las condiciones bajo las cuales se
reanudará la ejecución del bloque.

La lista_sensible es simplemente una lista de
señales separadas por comas.

La condición es una condición que
cuando se cumple permite que siga la ejecución.

El tiempo_límite indica un tiempo
durante el cual la ejecución está detenida, cuando
ese tiempo se acaba sigue la ejecución.

Estas tres posibilidades, es decir, la de la lista
sensible, la condición y el tiempo límite, son
opcionales, y pueden especificarse una, dos o las tres en una
misma sentencia WAIT. Cualquiera que ocurra primero
permitirá que se continú8e con la ejecución
del proceso.

Se aprecia claramente que la lista sensible del bloque
PROCESS es completamente equivalente a poner la sentencia WAIT
ON
lista_sensible; al final del bloque
PROCESS.

Ejemplos de uso de la sentencia WAIT:

WAIT ON pulso;

WAIT UNTIL contador=7;

WAIT FORM 1ns;

WAIT ON interrupcion FOR 25 ns;

WAIT ON clk,sensor UNTIL contador=3
FOR 100 ns;

Ejemplo donde una lista sensible es equivalente a la
sentencia WAIT.

–con lista sensible

p1: PROCESS (b,a)

BEGIN

a<=b+a+2;

END PROCESS p1;

–con WAIT

p1: PROCESS

BEGIN

a<=b+a+2;

WAIT ON a,b;

END PROCESS p1;

Sentencia condicional:
IF….THEN…..ELSE.

Es la estructura típica para realizar una
acción u otra según el resultado de una
expresión booleana, siendo equivalente en significado a
estructuras del mismo tipo en otros lenguajes. La forma general
es:

[id_if:]

IF condición THEN

Sentencias

{ELSIF condición THEN

sentencias}

{ELSE

sentencias}

END_IF [id_if];

Es importante resaltar que esta estructura tiene la
posibilidad de anidar IFS consecutivos mediante la palabra ELSIF,
de esta manera se evita tener que poner al final de cada nuevo IF
un END IF, ganando el programa en legibilidad.

Tanto el ELSE como el ELSIF son opcionales, pero
convienen asegurarse de sihay que poner ELSE al final o no, y
sobre todo, saber por qué. El no hacerlo así va a
tener impacto sobre el tipo de hardware que se está
describiendo; si por ejemplo no se pone ELSE, el hardware
correspondiente será secuencial y necesitará
registros.

Sentencia de selección : CASE

Es la estructura típica que permite ejecutar unas
sentencias u otras dependiendo del resultado de una
expresión. Su forma sintáctica es la
siguiente:

[id_case:]

CASE expresion IS

WHEN caso => sentencias;

{WHEN caso => sentencias;}

[WHEN OTHERS => sentencias;]

END CASE [id_case];

Bucles: FOR y WHILE LOOPS

En VHDL existen las dos posibilidades típicas
para bucles, es decir, los de tipo WHILE y FOR. La parte
repetitiva del bucle siempre viene especificada por la palabra
reservada LOOP . . END LOOP, y será la parte anterior del
bucle lo que indique si es de tipo for o while. La
sintaxis general es:

[id_bucle]

[esquema_iterativo] LOOP

sentencias;

END LOOP [id_bucle];

El esquema_iterativo indica si es un WHILE o FOR. Es
opcional, por lo que se puede definir un bucle sin más de
manera que las sentencias en ese bucle se repiten para
siempre.

La construcción para el bucle FOR es:

[id_for: ]

FOR identificador IN rango

LOOP

Sentencias;

END LOOP [id_for];

El bucle se repite para cada valor que toma el
identificador en el rango especificado. Esto quiere decir que el
tipo del identificador debe ser discreto: entero o un
enumerado.

La construcción para el bucle WHILE
es:

[id_while:]

WHILE condición

LOOP

sentencias;

END LOOP [id_while];

El bucle en la instrucción WHILE se repite
mientras la condición sea cierta, si no lo es deja de
repetirse.

Interrupción en bucles: NEXT y
EXIT

Junto a las instrucciones de bucles, se dan dos
más que permiten interrumpir el flujo normal de
ejecución. Estas sentencias son NEXT y EXIT. La primera
permite detener la ejecución de la iteración actual
y pasar a la siguiente.

La segunda detiene la ejecución en ese instante y
sale del bucle. En el caso de tener varios bucles anidados, la
salida se realiza del bucle donde se encuentre la
instrucción o bien del bucle indicado por la etiqueta
después de la instrucción, si es que se especifica.
Estas instrucciones aceptan opcionalmente una condición,
de manera que si se cumple la condición se interrumpe el
lazo, y si no, no.

La sintaxis general para la interrupción del
bucle NEXT es:

[id_next:]

NEXT [id_bucle] [WHEN
condición];

La sintaxis general para la interrupción del
bucle EXIT es:

[id_exit:]

EXIT [id_bucle] [WHEN
condición];

4.5.4 Definición de subprogramas, paquetes y
bibliotecas

En descripciones complejas de un programa se hace
necesaria una organización que permita al diseñador
trabajar con grandes cantidades de información, al
organizar esta información, utilizando funciones y
procedimientos llamados: subprogamas, se hace más legible
la descripción.

Se puede agrupar también los subprogramas,
definiciones de tipos, bloques, etc., a un nivel más
elevado en estructuras por encima de la propia
descripción; estos elementos son los que formarían
a los paquetes, que junto al anterior y otros elementos de
configuración, etc. Formarían las
bibliotecas.

Subprogramas

Igual que en los lenguajes de programación
estándar, en VHDL se puede estructurar mediante el uso de
subprogramas. Un subprograma no es más que una
función o procedimiento que contiene una porción de
código.

Las funciones y procedimientos en VHDL son estructuras
muy parecidas entre sí aunque existen algunas diferencias.
Estas diferencias se especifican a
continuación:

Una función siempre devuelve un valor, mientras
que un procedimiento sólo puede devolver valores a
través de los parámetros que se le
pasen.

Los argumentos de una función son siempre de
entrada, por lo que sólo se pueden leer dentro del a
función. En el procedimiento pueden ser de entrada, de
salida o de entrada y salida, por lo que pueden sufrir
modificaciones.

Una función no tiene efectos colaterales, pero un
procedimiento sí, es decir, puede provocar cambios en
objetos externos a él debido a que se pueden cambiar las
señales aunque no se hubieran especificado en el
argumento. Es decir, en los procedimientos se permite realizar
asignaciones sobre señales declaradas en la arquitectura
y, por tanto, externas al procedimiento.

Las funciones, como devuelven un valor, se usan en
expresiones, mientras que los procedimientos se llaman con una
sentencia secuencial o concurrente.

La función debe contener la palabra reservada
RETURN seguida de una expresión puesto que siempre
devuelve un valor, mientras que en el procedimiento no es
necesario.

Una función jamás puede tener la
instrucción WAIT, mientras que un procedimiento
sí.

Declaración de procedimientos y
funciones

Las declaraciones de procedimientos y funciones se
realizan en las partes declarativas de las arquitecturas,
bloques, paquetes, etc. Las declaraciones de una estructura y
otra son muy parecidas. A continuación se muestra la
definición de un procedimiento:

PROCEDURE nombre [ (parámetros) ]
IS

[ declaraciones ]

BEGIN

[ sentencias_serie ]

END [ PROCEDURE ] [nombre ] ;

La declaración de funciones es muy similar, con
la diferencia de que hay que indicar el tipo del valor que
devuelve:

[pure (impure]

FUNCTION nombre [ (parámetros) ]
RETURN
tipo IS

[declaraciones]

BEGIN

[sentencias serie] –debe incluir al menos un
RETURN

END [ FUNCTION ] [ nombre ];

La lista de parámetros, tanto en la
función como en el procedimiento, es opcional. Si no hay
parámetros tampoco es necesario usar los
paréntesis. Está lista es el conjunto de
parámetros que se la pasan al subprograma, y se declaran
de forma muy parecida a como se declaraban los puertos en una
entidad.

Dependiendo de si se trata de funciones o
procedimientos, los parámetros pueden ser en:

Funciones

– Sólo es válido el modo IN, por lo que no
es necesario especificarlo.

– El parámetro puede ser CONSTANT o SINGAL. El
valor por defecto es CONSTAN, si se desea SIGNAL hay que ponerlo
explícitamente.

Procedimientos

– Por defecto el modo es IN, pero el modo OUT e INOUT
son también válidos.

– Por defecto la clase es CONSTANT si el modo es IN o
VARIABLE en el resto de casos. La clase SIGNAL hay que declararla
explícitamente.

Las declaraciones dentro de una función
o procedimiento pueden incluir las mismas que incluiría un
PROCESS, ya que se trata también de ejecución
serie. Todo lo que se declara en esta parte sólo es
visible en el cuerpo de la función.

En una función, y siempre con carácter
opcional e informativo, existe la posibilidad declararla como
PURE o IMPURE. Una función pura es una
función que devuelve siempre el mismo valor para unos
parámetros de entrada dados. Una función es impura
si para unos mismos parámetros puede devolver valores
diferentes.

Normalmente las funciones impuras lo son porque dependen
de alguna variable o señal global, Poner PURE o IMPURE en
la declaración de la función no hace a esa
función pura o impura, es sólo un
comentario.

Llamadas a subprogramas

La forma de invocar un subprograma consiste solamente en
indicar el nombre seguido por los argumentos entre
paréntesis, si los tiene. A las funciones sólo se
las puede invocar comparte de una expresión, mientras que
los procedimientos se llaman como si fueran una sentencia,
secuencial o concurrente.

Bibliotecas, Paquetes y Unidades

Las unidades son el tipo de estructuras conformado por
las entidades y las arquitecturas, la entidad sirve para definir
el interfase de un módulo o sistema, mientras la
arquitectura describía el comportamiento del
circuito.

Los elementos que componen una biblioteca se llaman
unidades. A las unidades de tipo declarativo, que son la entidad,
paquete y configuración, se las conoce como unidades
primarias
. Al resto de las unidades, que son de tipo
ejecutivo, es decir, a las arquitecturas y cuerpos de los
paquetes, se las llama unidades secundarias.

Una unidad secundaria tiene siempre asociada una unidad
primaria, por lo que las primarias deben ser evaluadas en primer
lugar, ésta es la razón por la que también
se suelen poner al principio de una descripción las
unidades primarias, a excepción de las configuraciones que
hacen referencia también a las arquitecturas.

Monografias.com

Fig. 4.14: Las bibliotecas y las unidades
que la componen.

En cualquier sistema VHDL existen dos bibliotecas que
son invocadas por defecto. Las bibliotecas son work y
std, la biblioteca work contiene las unidades
de diseño que se están compilando, la biblioteca
std contiene dos paquetes, el standard y
textio El paquete standar dentro de esta
biblioteca contiene todas las definiciones de tipos y constantes.
El paquete textio contiene tipos y funciones para el
acceso a ficheros de texto.

Junto a estas bibliotecas, esta otra biblioteca que es
prácticamente estándar, la biblioteca ieee y
contiene algunos tipos y funciones que completan los que vienen
incorporados por defecto. Dentro de esta biblioteca hay
inicialmente un paquete, el std_logic_1164, que contienen la
definición de tipos y funciones para trabajar con un
sistema de nueve niveles lógicos que incluyen los de tipo
bit con sus fuerzas correspondientes, así como los de
desconocido, alta impedancia, etc.

El nombre de este tipo es el std_ulogic. Otro paquete es
el std_logic_1164_ext, este paquete es como el anterior pero
incorpora operaciones aritméticas y
relacionales.

Paquetes: PACKAGE Y PACKAGE BODY

Un paquete es una colección de declaraciones de
tipo constantes, subprogramas, etc., normalmente con la
intención de implementar algún servicio en
particular o aislar un grupo de elementos relacionados. De esta
manera se pueden hacer visibles las interfaces de algunos
elementos como funciones o procedimientos quedando ocultas las
descripciones de estos elementos.

Los paquetes están separados en dos partes, una
es la parte de declaraciones y la otra es la de cuerpo. La parte
de cuerpo, donde se encuentran por ejemplo algunas definiciones
de funciones y procedimientos, puede ser omitida si no hay
ninguno de estos elementos.

La declaración del paquete es:

–declaración de paquete

PACKAGE nombre IS

declaraciones

END [PACKAGE] [nombre];

La declaración del cuerpo es:

–declaración del cuerpo

PACKAGE BODY nombre IS

Declaraciones

subprogramas, etc.

END [ PACKAGE BODY ] [ nombre
];

4.5.5 VHDL para síntesis

La síntesis de un circuito, a partir de una
descripción VHDL, consiste en reducir el nivel de
abstracción de la descripción del circuito hasta
convertirlo en una definición puramente estructural cuyos
componentes son los elementos de una determinada biblioteca. Al
final del proceso de síntesis se debe obtener un circuito
que funcionalmente se comporte igual que la descripción
que de él se ha hecho.

Partes: 1, 2, 3, 4
 Página anterior Volver al principio del trabajoPágina siguiente 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter