0% encontró este documento útil (0 votos)
209 vistas79 páginas

VHDL Maxinez

VHDL
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
209 vistas79 páginas

VHDL Maxinez

VHDL
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

VHDL

El arte de programar
sistemas digitales

David G. Maxinez
Jessica Alcalá Jara

Instituto Tecnológico y de Estudios Superiores de Monterrey


Campus Estado de México

PRIMERA EDICIÓN
MÉXICO, 2002

COMPAÑÍA EDITORIA L CONTINENTAL

Contenido
Acerca de los autores ix Prólogo xi

1. Estado actual de la lógica programable 1 1.1 Dispositivos lógicos programables (PLD) 2 1.2
Dispositivos lógicos programables de alto nivel de integración 13 1.3 Ambiente de desarrollo
de la lógica programable 18 1.4 Campos de aplicación de la lógica programable 23 1.5 La
lógica programable y los lenguajes de descripción en hardware (HDL) . 25 1.6 Compañías de
soporte en hardware y software 28 Ejercicios 33

2. VHDL: su organización y arquitectura 37 2.1 Unidades básicas de diseño 37 2.2 Entidad 38


2.3 Declaración de entidades 40 2.4 Diseño de entidades utilizando vectores 42 2.5
Arquitecturas (architecture) 46 Ejercicios 56

3. Diseño lógico combinacional mediante VHDL 61 3.1 Programación de estructuras básicas


mediante declaraciones concurrentes . 61 3.2 Programación de estructuras básicas mediante
declaraciones secuenciales . 69 Ejercicios 89
VI Contenido

4. Diseño lógico secuencial con VHDL 93 4-1 Diseño lógico secuencial 93 4.2 Flip-Flops 94
4.3 Registros 98 4.4 Contadores 101 4-5 Diseño de sistemas secuenciales síncronos 105
Ejercicios 113

5. Integración de entidades en VHDL 123 5.1 Esquema básico de integración de entidades


123 5.2 Integración de entidades básicas 128 Ejercicios 147

6. Diseño de controladores digitales mediante cartas ASM y VHDL 153 6.1 El algoritmo de
la máquina de estado (ASM) 154 6.2 Estructura de una carta ASM 156 6.3 Cartas ASM en
comparación con las máquinas de estado 159 6.4 Diseño de controladores mediante cartas
ASM 162 6.5 Diseño de cartas ASM mediante VHDL 166 Ejercicios 180

7. Diseño jerárquico en VHDL 197 7.1 Metodología de diseño de estructuras jerárquicas 198
7.2 Análisis del problema y descomposición en bloques individuales de la
estructura global 200
7.3 Diseño y programación de componentes o unidades del circuito 201 7.4 Creación de un
paquete de componentes 206 7.5 Diseño del programa de alto nivel (Top Level) 207 7.6
Creación de una librería en Warp 208 Ejercicios 225
8. Sistemas embebidos en VHDL 229 8.1 Sistemas embebidos 229 8.2 Diseño de un
microprocesador 237 8.3 Diseño jerárquico 261 Ejercicios 268

9. Redes neuronales artificiales y VHDL 273 9.1 ¿Qué es una red neuronal artificial? 275 9.2
Aprendizaje en las neuronas artificiales 279 9.3 Aprendizaje por error mínimo 291 9.4
Redes asociativas 294 Ejercicios 308
Contenido VÜ

Apéndices

A. Herramientas de soporte para la programación en VHDL 311 B. Instalación del Software

Warp 331 C. Identificadores, tipos y atributos 333 D. Hojas técnicas del CPLD CY7C372Í 343

E. Palabras reservadas en VHDL 347 F. Operadores definidos en VHDL según su orden de

precedencia 349 Indice analítico 351

Acerca de los autores

David González Maxinez realizó sus estudios de licenciatura en la Universi dad


Nacional Autónoma de México, en la carrera de Ingeniero Mecánico Electricista
con especialidad en el área de comunicaciones y electrónica. Pos teriormente
obtuvo el grado de maestro en ingeniería con "especialidad en electrónica" dentro
de la división de estudios de posgrado de la Facultad de Ingeniería de la UNAM.
Dentro del Instituto Tecnológico y de Estudios Superiores de Monterrey (ITESM),
Campus Estado de México, cursó el Diplomado en Habilidades Docentes y
posteriormente realizó el Diplomado en Microelectrónica en el ITESM, Campus
Querétaro. Realizó sus estudios de Doctorado en el área de microelectrónica dentro
de la Universidad Au tónoma Metropolitana en convenio con la Universidad de
TEXAS A&M en los Estados Unidos, desarrollando como tema de tesis doctoral:
"El diseño de un microcontrolador NEUROFUZZY", el cual fue considerado de
vanguar dia en el ámbito de investigación nacional. Actualmente es
profesor/investi gador del Instituto Tecnológico y de Estudios Superiores de
Monterrey, Campus Estado de México, así como de la Universidad Nacional
Autónoma de México en el área de sistemas digitales. Combina esta actividad con
el de sarrollo de prototipos electrónicos aplicables a diversas áreas, mediante la in
tegración en dispositivos lógicos programables.
Jessica Alcalá jara estudió Ingeniería en Computación en la Universidad
Nacional Autónoma de México y es experta en el área de programación de
sistemas digitales utilizando lenguajes de alto nivel. Dentro del ITESM, ha
publicado el libro "Programación en VHDL". Actualmente es profesora/in
vestigadora de la Universidad Nacional Autónoma de México, Campus Ara gón,
donde imparte las cátedras de organización de computadoras y micro
computadoras.

Los autores han participado juntos en congresos nacionales e internacio nales


en el área de lógica programable, sistemas difusos y microelectrónica.

Prólogo

Hoy en día, en nuestro ambiente familiar o de trabajo nos encontramos ro deados de


sistemas electrónicos muy sofisticados. Teléfonos celulares, com putadoras
personales, televisores portátiles, equipos de sonido, dispositivos de comunicaciones
y estaciones de juego interactivo, entre otros, no son más que algunos ejemplos del
desarrollo tecnológico que ha cambiado nuestro es tilo de vida haciéndolo cada vez
más confortable. Todos estos sistemas tie nen algo en común: su tamaño, de
dimensiones tan pequeñas que resulta in creíble pensar que sean igual o más
potentes que los sistemas mucho más grandes que existieron hace algunos años.
Estos avances son posibles gracias al desarrollo de la microelectrónica, la cual ha
permitido la miniaturización de los componentes para obtener así mayores
beneficios de los chips (circuitos integrados) y para ampliar las po sibilidades de
aplicación.
La evolución en el desarrollo de los circuitos integrados se ha venido per feccionando
a través de los años. Primero, se desarrollaron los circuitos de ba ja escala de
integración (SSI o Small Scale Integration), después los de mediana escala de
integración (MSI o Médium Scale Integration) y posterior mente los de muy alta
escala de integración (VLSI o Very Large Scale Integra tion) hasta llegar a los circuitos
integrados de propósito específico (ASIC).
Actualmente, la gente encargada del desarrollo de nueva tecnología perfecciona
el diseño de los circuitos integrados orientados a una aplica ción y/o solución
específica: los ASIC, logrando dispositivos muy potentes y que ocupan un mínimo
de espacio. La optimización en el diseño de estos chips tiene dos tendencias en su
conceptualización.
" " Prólogo

La primera tendencia es la técnica de full custom design (Diseño total


mente a la medida), la cual consiste en desarrollar un circuito para una apli
cación específica mediante la integración de transistor por transistor. En su
fabricación se siguen los pasos tradicionales de diseño: preparación de la oblea
o base, el crecimiento epitaxial, la difusión de impurezas, la implantación de
iones, la oxidación, la fotolitografía, la metalización y la limpieza química. La
segunda tendencia en el diseño de los ASIC proviene de una inno vadora
propuesta, que sugiere la utilización de celdas programables preesta blecidas e
insertadas dentro de un circuito integrado. Con base en esta idea surgió la
familia de dispositivos lógicos programables (los PLD), cuyo nivel de
densidad de integración ha venido evolucionando a través del tiempo.
Iniciaron con los PAL (Arreglos Lógicos programables) hasta llegar al uso de
los CPLD (Dispositivos Lógicos Programables Complejos) y los FPGA (Arre
glos de Compuertas Programables en Campo), los cuales dada su conectivi
dad interna sobre cada una de sus celdas han hecho posible el desarrollo de
circuitos integrados de aplicación específica de una forma mucho más fácil y
económica, para beneficio de los ingenieros encargados de integrar sistemas.
El contenido de este libro se encuentra orientado hacia este tipo de diseño.
Nuestro objetivo es brindar al lector la oportunidad de comprender, manejar
y aplicar el lenguaje de programación más poderoso para este tipo de
aplicaciones: VHDL.
El lenguaje de descripción en hardware VHDL es considerado como la
máxima herramienta de diseño por las industrias y universidades de todo el
mundo, pues proporciona a los usuarios muchas ventajas en la planeación y
diseño de los sistemas electrónicos digitales.
Esta obra ha sido preparada especialmente para aquellos estudiantes e in
genieros que desean introducirse en el manejo de este lenguaje de programa
ción. El libro se encuentra redactado de una manera muy clara y accesible
para guiar al lector paso por paso en los primeros cuatro capítulos. Para aque
llas personas que ya tengan conocimientos sobre el tema, hemos incorporado
una serie de libros recomendados con mayor profundidad y complejidad.
Uno de los objetivos del libro es proporcionar al estudiante y al ingeniero
electrónico o de computación una forma fácil y práctica de integrar aplicacio
nes digitales utilizando el lenguaje de descripción en hardware VHDL. Tam
bién esperamos motivar al lector para que comience el desarrollo e integración
de sistemas electrónicos a través este lenguaje, con la visión y oportunidad de
crecer como microempresario en el desarrollo de sistemas miniaturizados, los
cuales pueden ser fácilmente comercializados, y generar así fuentes de empleo
en beneficio de la sociedad.
Este libro es recomendable para un curso introductorio de VHDL, tanto a
nivel técnico como a nivel universitario dado que para interpretar y entender
los ejercicios sobre los que se realiza nuestra explicación sólo se requiere como
antecedente un curso básico de diseño lógico que involucre el conocimientos
Prólogo Xii i

de los temas de compuertas lógicas, minimización de funciones booleanas, cir


cuitos combinacionales y circuitos secuenciales.
Para nosotros es importante que los conocimientos que se adquieran en la
lectura de este libro puedan ser trasladados de manera inmediata hacia la
práctica o aplicación. Por ello, hemos incluido algunos datos de orientación
para que el lector sepa cómo conseguir las herramientas de diseño y dónde
conseguir de manera oportuna los circuitos PLD para integrar sus aplicacio
nes (véase el Apéndice A). También hemos incluido demostraciones del pro
grama WARP en el CD que acompaña al libro.

Organización del libro

En resumen, esta obra está estructurada en nueve capítulos y cinco apéndi ces.
En el capítulo uno se describe de forma cualitativa el estado actual de la lógica
programable: sus antecedentes, ventajas, desventajas y perspectivas, además
proporciona la información referente a las compañías que brindan el soporte
tanto en software como hardware. Este capítulo es completamente informativo
y su finalidad consiste en familiarizar y adentrar al lector en es ta área de
desarrollo.
En el capítulo dos (VHDL: su organización y arquitectura) se presenta la
estructura básica del lenguaje de descripción en hardware VHDL y se anali zan
los módulos básicos de diseño: sus palabras reservadas, los tipos de datos, así
como el manejo de las diferentes arquitecturas o estilos de diseño empleados en
el desarrollo de un programa.
En el capítulo tres (Diseño lógico combinacional mediante VHDL) se des cribe la
forma de emplear declaraciones concurrentes y secuenciales dentro de un
programa mediante la solución de circuitos combinacionales indivi duales tales
como los multiplexores, los decodificadores, los codificadores y sumadores,
entre otros. Es importante resaltar que en este capítulo y en los subsecuentes no
se presenta la solución óptima para un problema dado. Por el contrario, cada
problema se aborda de diferente manera con el único fin de presentar al lector
el uso cada vez mayor de nuevas palabras reservadas por VHDL en el
entendido que la mejor solución de un problema se da por sí solo y llega
cuando el lector conoce más y más formas de programar.
En el capítulo cuatro (Diseño lógico secuencial con VHDL) se realiza una
síntesis de diseño de los principales circuitos secuenciales: flip-flop, registros de
corrimiento, contadores, manejo de diagramas de estado etcétera. Todos ellos
se analizan por separado haciendo énfasis en las instrucciones encargadas de
sincronizar los eventos que se desarrollan en estas entidades de diseño.
El capítulo cinco (Integración de entidades en VHDL) detalla la forma en que
se unen diferentes bloques lógicos, es decir, se describe cómo se integran
dentro de una sola entidad varios circuitos, sean combinacionales y/o se-
Prólogo

cuenciales, manejados en su programación de manera individual o a través


exclusivamente de la relación entrada/-salida.
En el capítulo seis (Diseño de controladores digitales mediante cartas ASM y
VHDL) se describe la programación de algoritmos digitales (controladores),
mostrando al lector la forma de como brindar soluciones a un problema dado a
través del desarrollo y conceptualización de un algoritmo, cuya descripción se
realiza a través de la carta ASM. En este capítulo el lector echa mano de todos
los conocimientos adquiridos en los capítulos previos, sorprendiéndose de la fa
cilidad con la cual se programan sistemas digitales complejos.
En el capítulo siete (Diseño jerárquico en VHDL) se presenta la forma de
jerarquizar o dividir un problema en pequeños subsistemas que pueden ana
lizarse y simularse de manera independiente para posteriormente entrelazar los
mediante un programa de alto nivel denominado Top Level. Esta forma de
programación es muy utilizada en VHDL ya que permite crear nuevas li brerías
de trabajo, que el diseñador puede almacenar para posteriormente in cluir en
nuevos desarrollos.
En el capítulo ocho (Sistemas embebidos en VHDL) se incluye la parte teó rica
de los sistemas embebidos así como su ciclo de desarrollo mediante el di seño de
un microprocesador, describiendo en detalle cada uno de sus módulos y la
forma de programarlos mediante el diseño jerárquico o Top Level.
En el capítulo nueve dejamos el contexto de programación básica y abor
damos la investigación realizada sobre la programación en VHDL de las re des
neuronales artificiales. Esto tiene por objetivo bindar al lector una breve
introducción a un nuevo campo de desarrollo e investigación, debido a que
actualmente es posible desarrollar sistemas inteligentes a nivel de hardware e
integrarlos en un circuito integrado, ya sea un CPLD o un FPGA.
Finalmente, los apéndices del libro se encuentran estructurados de la
siguiente manera: en el apéndice A (Herramientas de soporte para la progra mación
en VHDL) se describe el uso del software WarpR4 de Cypress Semi conductor,
utilizado en la simulación de todos los ejercicios y problemas de este libro,
además se incluyen los datos del distribuidor del software y de los circuitos
integrados. El apéndice B contiene la información sobre cómo ins talar el
software en las diferentes plataformas tecnológicas. El apéndice C proporciona
los principales identificadores, tipos y atributos que se manejan en VHDL, así
como la sintaxis utilizada en cada declaración. En el apéndi ce D presentamos los
datos técnicos del circuito CPLD CY372I-66JC de Cy press Semiconductor, en el
cual fueron grabados los diseños presentados en este libro. En el apéndice E
incluye una lista de palabras reservadas por VHDL con el fin de que el lector
pueda identificarlas fácilmente y, por últi mo, en el apéndice F se incluye una
lista de operadores definidos en VHDL según su orden de precedencia.
Prólogo ^^

Reconocimientos

Quisiéramos agradecerle a todos nuestros estudiantes tanto del Instituto


Tecnológico y de Estudios Superiores de Monterrey, Campus Estado de Mé
xico, como de la Universidad Nacional Autónoma de México, Campus Ara
gón, por su valiosa colaboración en la simulación e implementación de to dos y
cada uno de los ejercicios y problemas encontrados en este libro. En especial a
Alejandra Abad Rodríguez, por su incomparable ayuda en esa etapa. De igual
manera, deseamos agradecerle al Dr. Luis Niño de Rivera por sus comentarios
y sugerencias como revisor técnico, al M. en C. Jorge Ramí rez Landa, profesor
del ITESM-CEM, y a la Ing. Ivette Cruz Felipe de la UNAM por su valiosa
participación académica en el desarrollo de este libro. Finalmente, un
agradecimiento a nuestra editora, Elisa Pecina, y a todo su equipo de trabajo
siempre incansables en su afán de obtener ios mejores re sultados y a quienes
debemos la calidad de este trabajo.

David G. Maxinez
Jessica Alcalá Jara

Capítulo 1

Estado actual de la
lógica programable

Introducción

En la actualidad el nivel de integración alcanzado con el desarrollo de la


microelectrónica ha hecho posible desarrollar sistemas completos dentro de un
solo circuito integrado SOC (System On Chip), con lo cual se han mejo rado de
manera notoria características como velocidad, confiabilidad, consu mo de
potencia y sobre todo el área de diseño. Esta última característica nos ha
permitido observar día a día cómo los sistemas de uso industrial, militar y de
consumo han minimizado el tamaño de sus desarrollos; por ejemplo, los
teléfonos celulares, computadoras personales, calculadoras de bolsillo, agen
das electrónicas, relojes digitales, sistemas de audio, sistemas de telecomuni
caciones, etc., no son más que aplicaciones típicas que muestran la evolución
de los circuitos integrados también conocidos como chips.
El proceso de miniaturización de los sistemas electrónicos comenzó con la
interconexión de elementos discretos como resistencias, capacitores, resis tores,
bobinas, etc., todos colocados en un chasis reducido y una escasa separación
entre ellos. Posteriormente se diseñaron y construyeron los pri meros circuitos
impresos —aún vigentes—, que relacionan e interconectan los elementos
mencionados a través de cintas delgadas de cobre adheridas a un soporte
aislante (por lo general baquelita) que permite el montaje de es tos elementos
[1].
Más tarde, el desarrollo del transistor de difusión planar, construido du rante
1947 y 1948, permitió en 1960 la fabricación del primer circuito inte grado
monolítico. Este integra cientos de transistores, resistencias, diodos y
capacitores, todos fabricados sobre una pastilla de silicio. Como es del cono
cimiento general, el término monolítico se deriva de las raíces griegas
2 VHDL: El arte de programar sistemas digitales

"mono" y "lithos" que significan uno y piedra, respectivamente; por tanto,


dentro de la tecnología de los circuitos integrados un circuito monolítico es tá
construido sobre una piedra única o cristal de silicio que contiene tanto
elementos activos (transistores, diodos), como elementos pasivos (resisten cias,
capacitores), y las conexiones entre ellos [1].
La fabricación de los circuitos monolíticos se basa en los principios de
materiales, procesos y diseño que constituyen la tecnología altamente desa
rrollada de los transistores y diodos individuales. Dicha fabricación incluye la
preparación de la oblea o base, el crecimiento epitaxial, la difusión de impu
rezas, la implantación de iones, la oxidación, la fotolitografía, la metalización y
la limpieza química [ 1 ].
La integración de sistemas se ha ido superando a medida que surgen nue vas
tecnologías de fabricación. Esto ha permitido obtener componentes estándares
de mayor complejidad y que brindan mayores beneficios. Sin em bargo, el
desarrollo de nuevos productos requiere bastante tiempo, por lo cual sólo se
emplea cuando se necesita un alto volumen de producción.
Una forma más rápida y directa de integrar aplicaciones es mediante la
lógica programable, la cual permite independizar el proceso de fabricación del
proceso de diseño fuera de la fábrica de semiconductores. Esta idea fue
desarrollada por Hon y Sequin [2] y Conway y Mead [3] a finales de los años
sesenta.
1.1 Dispositivos lógicos programables (PLD)

Los dispositivos lógicos programables (o PLD, por sus siglas en inglés) favore
cen la integración de aplicaciones y desarrollos lógicos mediante el empaque
tamiento de soluciones en un circuito integrado. El resultado es la reducción de
espacio físico dentro de la aplicación; es decir, se trata de dispositivos fa bricados
y revisados que se pueden personalizar desde el exterior mediante diversas
técnicas de programación. El diseño se basa en bibliotecas y mecanis mos
específicos de mapeado de funciones, mientras que su implementación tan sólo
requiere una fase de programación del dispositivo que el diseñador suele
realizar en unos segundos [4].
En la actualidad, el diseño de ASIC (circuitos integrados desarrollados para
aplicaciones específicas) domina las tendencias en el desarrollo de apli caciones a
nivel de microelectrónica. Este diseño presenta varias opciones de desarrollo,
como se observa en la tabla 1.1. A nivel de ASIC los desarrollos
full y semi custom ofrecen grandes ventajas en sistemas que emplean circuitos
diseñados para una aplicación en particular. Sin embargo, su diseño ahora sólo
es adecuado en aplicaciones que requieren un alto volumen de produc ción; por
ejemplo, sistemas de telefonía celular, computadoras portátiles, cá maras de
video, etcétera.
Estado actual de la lógica programable 3

Los FPGA (arreglos de compuertas programables en campo) y CPLD


(dispositivos lógicos programables complejos) ofrecen las mismas ventajas de un
ASIC, sólo que a un menor costo; es decir, el costo por desarrollar un ASIC es
mucho más alto que el que precisaría un FPGA o un CPLD, con la ventaja de que
ambos son circuitos reprogramables, en los cuales es posible modificar o borrar
una función programada sin alterar el funcionamiento del circuito [4].

Categoría Características

Diseño totalmente a la • Total libertad de diseño, pero el desarrollo requiere todas las media
(Full-Custom) etapas del proceso de fabricación: preparación de la oblea o ba se, crecimiento
epitaxial, difusión de impurezas, implantación
de iones, oxidación, fotolitografía, metalización y limpieza quí
mica [1].

Los riesgos y costos son muy elevados; sólo se justifican ante


grandes volúmenes o proyectos con restricciones (área, veloci
dad, consumo de potencia, etcétera) [4].

Matrices de puertas • Existe una estructura regular de dispositivos básicos (transisto


predifundidas (Semi- res) prefabricada que se puede personalizar mediante un cone custom/gate
arrays) xionado específico que sólo necesita las últimas etapas del proce so tecnológico.

• El diseño está limitado a las posibilidades de la estructura prefa


bricada y se realiza con base en una biblioteca de celdas preca
racterizadas para cada familia de dispositivos [4].

Celdas estándares pre- • No se trabaja con alguna estructura fija prefabricada en particu
caracterizadas (Semi- lar, pero sí con bibliotecas de celdas y módulos precaracterizados
custom/standard cells) y específicos para cada tecnología.

• Libertad de diseño (en función de las facilidades de la bibliote


ca); pero el desarrollo exige un proceso de fabricación completo
[4].

Lógica programable • Se trata de dispositivos fabricados y revisados que se pueden per- (FPGA,
CPLD). sonalizar desde el exterior mediante diversas técnicas de progra mación.

• El diseño se basa en bibliotecas y mecanismos específicos de ma


peado de funciones, mientras que su implementación tan sólo re
quiere una fase de programación del dispositivo, que por lo gene
ral realiza el diseñador en unos pocos segundos[4].

Tabla 1.1 Tecnologías de fabricación de circuitos integrados.


4 VHDL: El arte de programar sistemas digitales

En la actualidad existe una gran variedad de dispositivos lógicos progra


mables, los cuales se usan para reemplazar circuitos SSI (pequeña escala de
integración), MSI (mediana escala de integración) e incluso circuitos VLSI (muy
alta escala de integración), ya que ahorran espacio y reducen de mane ra
significativa el número y el costo de los diseños. Estos dispositivos, llama dos
PLD (tabla 1.2), se clasifican por su arquitectura —la forma funcional en que se
encuentran ordenados los elementos internos que proporcionan al dispositivo
sus características.

Dispositivo Descripción

PROM Programmable Read-Only Memory: memoria programable de sólo


lectura

PLA Programmable Logic Array: arreglo lógico programable

PAL Programmable Array Logic: lógica de arreglos programables

GAL Generic Logic Array: arreglo lógico genérico

CPLD Complex PLD: dispositivo lógico programable complejo


FPGA Field
Program Gate Array: arreglos de compuertas pro
grammes en campo

Tabla 1.2 Dispositivos lógicos programables.

1.1.1 Estructura interna de un PLD

Los dispositivos PROM, PLA, PAL y GAL están formados por arreglos o ma
trices que pueden ser fijos o programables, mientras que los CPLD y FPGA se
encuentran estructurados mediante bloques lógicos configurables y celdas
lógicas de alta densidad, respectivamente.
La arquitectura básica de un PLD está formada por un arreglo de com
puertas AND y OR conectadas a las entradas y salidas del dispositivo. La fi
nalidad de cada una de ellas se describe a continuación.

a) Arreglo AND. Está formado por varias compuertas AND interconecta das a
través de alambres, los cuales cuentan con un fusible en cada pun to de
intersección [Fig. 1.1a)]. En esencia, la programación del arreglo
Estado actual de la lógica programable 5

consiste en fundir o apagar los fusibles para eliminar las variables que no
serán utilizadas [Fig. 1.1b)]. Obsérvese cómo en cada entrada a las com
puertas AND queda intacto el fusible que conecta la variable selecciona da con
la entrada a la compuerta. En este caso, una vez que los fusibles se funden no
pueden volver a programarse.
Figura 1.1 Arreglos AND: a) no programado y b) programado.
6 VHDL: El arte de programar sistemas digitales

b) Arreglo OR. Está formado por un conjunto de compuertas OR conecta das a un


arreglo programable, el cual contiene un fusible en cada punto de intersección.
Este tipo de arreglo es similar al de compuertas AND ex plicado en el punto
anterior, ya que de igual manera se programa fundien do los fusibles para
eliminar las variables no utilizadas. En la figura 1.2 se observa el arreglo OR
programado y sin programar.
Figura 1.2 Estructura básica de PLD.

De acuerdo con lo anterior, observemos en la tabla 1.3 la estructura de los


dispositivos lógicos programables básicos.
Estado actual de la lógica programable 7

Dispositivo Esquema básico

La
memoria programable de sólo
lectura (PROM) está formada
por un arreglo no programable de
compuertas AND conectadas
como decodificador y un arreglo
programable OR.

El arreglo lógico programable


(PLA) es un PLD formado por
un arreglo AND y un arreglo
OR, ambos programables.

El arreglo lógico programable


(PAL) se encuentra formado
por los arreglos AND programable
y OR fijo con lógica de salida.

Tabla 1.3 Dispositivos lógicos programables.

• La PROM no se utiliza como un dispositivo lógico, sino como una memo ria
direccionable, debido a las limitaciones que presenta con las compuer tas
AND fijas.
• En esencia, el PLA se desarrolló para superar las limitaciones de la me moria
PROM. Este dispositivo se llama también FPLA (arreglo lógico programable
en campo), ya que es el usuario y no el fabricante quien lo programa.
• El PAL se desarrolló para superar algunas limitaciones del PLA, como
retardos provocados por la implementación de fusibles adicionales, que
resultan de la utilización de dos arreglos programables y de la compleji dad
del circuito. Un ejemplo típico de estos dispositivos es la familia PAL16R8, la
cual fue desarrollada por la compañía AMD (Advanced Mi cro Devices) e
incluye los dispositivos PAL16R4, PAL16R6, PAL16L8, PAL16R8, dispositivos
programables por el usuario para reemplazar circuitos combinacionales y
secuenciales SSI y MSI en un circuito.

En la figura 1.3 se muestra la arquitectura interna del PAL16L8. Como se


puede observar, esta arquitectura está formada básicamente por circuitos
combinacionales (compuertas AND, OR, buffers tri-estado e inversores), los
cuales permiten la realización de funciones lógicas booleanas de la forma su
ma de productos (SOP). Cada término producto específico se programa en el
arreglo AND, mientras que en el arreglo OR se realiza la suma lógica de los
términos que se enviarán a las salidas del dispositivo.
8 VHDL: El arte de programar sistemas digitales
(6, 9, 11, 13, 15, 17, 19, 21)

Figura 1.3 Arquitectura interna del PAL16L8.


Estado actual de la lógica programable 9
1.1.2 Arreglo Lógico Genérico (GAL)

El arreglo lógico genérico (GAL) es similar al PAL, ya que se forma con arre glos
AND programable y OR fijo, con una salida lógica programable. Las dos
principales diferencias entre los dispositivos GAL y PAL radican en que el
primero es reprogramable y contiene configuraciones de salida programables.
Los dispositivos GAL se pueden programar una y otra vez, ya que usan la
tecnología E2 CMOS (Ellectrically Erasable CMOS: CMOS borrable eléctri
camente), en lugar de tecnología bipolar y fusibles (Fig. 1.4).

Figura 1.4 Diagrama de bloques del arreglo GAL.

Programación de un arreglo GAL

A diferencia de un PAL, el GAL está formado por celdas programables, las


cuales se pueden reprogramar las veces que sea necesario. Como se observa en
la figura 1.5, cada fila se conecta a una entrada de la compuerta AND y cada
columna a una variable de entrada y sus complementos. Cuando se programa
una celda, ésta se activa mediante la aplicación de cualquier com
binación de las variables de entrada o sus complementos a la compuerta AND.
Esto permite la implementación de cualquier función (producto de términos)
requerida.
10 VHDL: El arte de programar sistemas digitales
Figura 1.5 Programación del dispositivo GAL.

Arquitectura de un dispositivo GA L

Con el fin de esquematizar una arquitectura GAL, se toma como ejemplo el


dispositivo GAL22V10 [Fig. 1.6a)]. Este circuito cuenta con 22 líneas de en trada y
sus complementos, lo que da un total de 44 líneas de entrada a cada compuerta
AND (estas entradas se encuentran representadas por las líneas verticales en el
diagrama). La intersección que forman las líneas de entrada con los términos
producto (líneas horizontales), representa cada una de las celdas que se pueden
programar para conectar una variable de entrada (o su complemento) a una línea
de término producto [Fig. 1.6b)], donde es posible apreciar la forma de obtener la
suma de productos.
Estado actual de la lógica programable 11

Macro b cell
Macro-
> cell

Macro
cell

Macro
cell

Macro
cell

Macro
cell

Macro-
, cell

Macro
k cell

Macro-
. cell

riMacro-
'"fr cell

Figura 1.6a Arquitectura del GAL22V10.


12 VHDL: El arte de programar sistemas digitales
Figura 1.6b Realización de una suma de productos dentro de un GAL.

Macroceldas lógicas de salida. Una macrocelda lógica de salida (u OLMC, de


output logic macrocell) está formada por circuitos lógicos que se pueden
programar como lógica combinacional o secuencial [5]. Las configuracio nes
combinacionales se implementan por medio de programación, mientras que en las
secuenciales la salida resulta de un flip-flop. En la figura 1.7 se ob serva la
arquitectura de una macrocelda del dispositivo GAL22V10, la cual de manera
general está formada por un flip-flop y dos multiplexores.

Figura 1.7 Arquitectura de una macrocelda OLMC 22VIO.

Puede haber de ocho a dieciséis entradas de las compuertas AND en la


compuerta OR. Esto indica las operaciones producto que pueden efectuarse en
cada macrocelda. El área punteada está formada por dos multiplexores y
Estado actual de la lógica programable 13
un flip-flop; el multiplexor 1 de 4 conecta una de sus cuatro líneas de entra da al
buffer triestado de salida, en función de las líneas de selección SO y SI. Por otro
lado, el multiplexor de 1 de 2 conecta por medio del buffer la salida del flip-flop o
la salida del buffer triestado al arreglo AND; esto se determi na por medio de S1.
Cada una de las líneas de selección se programa mediante un grupo de celdas
especiales que se encuentran en el arreglo AND.

1.2 Dispositivos lógicos programables de alto nivel de integración

Los PLD de alto nivel de integración se crearon con el objeto de integrar ma yor
cantidad de dispositivos en un circuito (sistema en un chip SOC). Se caracterizan
por la reducción de espacio y costo, además de ofrecer una me jora sustancial en el
diseño de sistemas complejos, dado que incrementan la velocidad y las
frecuencias de operación. Además, brindan a los diseñadores la oportunidad de
enviar productos al mercado con más rapidez y les permi ten realizar cambios en
el diseño sin afectar la lógica, agregando periféricos de entrada/salida sin
consumir una gran cantidad de tiempo, dado que los circuitos son reprogramables
en el campo de trabajo.

1.2.1 Dispositivos lógicos programables complejos (CPLD)

Un circuito CPLD consiste en un arreglo de múltiples PLD agrupados como


bloques en un chip. En algunas ocasiones estos dispositivos también se cono cen
como EPLD (Enhanced PLD: PLD mejorado), Super PAL, Mega PAL,
[6j etc. Se califican como de alto nivel de integración, ya que tienen una gran
capacidad equivalente a unos 50 PLD sencillos.
En su estructura básica, cada CPLD contiene múltiples bloques lógicos
(similares al GAL22V10) conectados por medio de señales canalizadas des de la
interconexión programable (PI). Esta unidad PI se encarga de inter conectar los
bloques lógicos y los bloques de entrada/salida del dispositivo sobre las redes
apropiadas (Fig. 1.8).
14 VHDL: El arte de programar sistemas digitales
Figura 1.8 Arquitectura básica de un CPLD.

Los bloques lógicos, también conocidos como celdas generadoras de fun


ciones, están formados por un arreglo de productos de términos que imple menta
los productos efectuados en las compuertas AND, un esquema de distribución de
términos que permite crear las sumas de los productos pro venientes del arreglo
AND y por macroceldas similares a las incorporadas en la GAL22V10 (Fig. 1.9).
En ocasiones las celdas de entrada/salida se consi deran parte del bloque lógico,
aunque la mayoría de los fabricantes coincide en que son externas. Cabe
mencionar que el tamaño de los bloques lógicos es importante, ya que determina
cuánta lógica se puede implementar dentro del CPLD; esto es, fija la capacidad
del dispositivo.

Figura 1.9 Bloque lógico programable.


Estado actual de la lógica programable 15
a) Arreglos de productos de términos. Es la parte del CPLD que identifica el
porcentaje de términos implementados por cada macrocelda y el núme ro
máximo de productos de términos por bloque lógico. Esto es similar al arreglo
de compuertas AND programable de un dispositivo GAL22V10.
b) Esquema de distribución de términos. Es el mecanismo utilizado para
distribuir los productos de términos a las macroceldas; esto se realiza me diante
el arreglo programable de compuertas OR de un PLD. Los diferen tes fabricantes
de CPLD implementan la distribución de productos de términos con diferentes
esquemas. Mientras algunos como la GAL22V10 usan un esquema de
distribución variable (los cuales pueden variar en 8,10,12,14 o 16 productos por
macrocelda), los CPLD como la familia MAX de Altera Corporation y Cypress
Semiconductor, distribuyen cua tro productos de términos por macrocelda,
además de utilizar "productos de términos expandidos", que se asignan a una o
varias macroceldas.
c) Macroceldas. Una macrocelda de un CPLD está configurada interna mente por
flip-flops y un control de polaridad que habilita cada afirma ción o negación
de una expresión. Los CPLD suelen tener macroceldas de entrada/salida, de
entrada y ocultas, mientras que los PLD sólo tienen macroceldas de
entrada/salida.

La cantidad de macroceldas que contiene un CPLD es importante, debi do a


que cada uno de los bloques lógicos que conforman el dispositivo se expresan en
términos del número de macroceldas que contiene. Por lo gene ral, cada bloque
lógico puede tener de cuatro a sesenta macroceldas; ahora bien, mientras mayor
sea la cantidad, mayor será la complejidad de las fun ciones que se pueden
implementar.

1.2.2 Arreglos de compuertas programables en campo (FPGA)

Los dispositivos FPGA se basan en lo que se conoce como arreglos de coni'


puertas, los cuales consisten en la parte de la arquitectura que contiene tres
elementos configurabies: bloques lógicos configurables (CLB), bloques de
entrada y de salida (IOB) y canales de comunicación [7]. A diferencia de los
CPLD, la densidad de los FPGA se establece en cantidades equivalen
tes a cierto número de compuertas.
Por adentro, un FPGA está formado por arreglos de bloques lógicos con
figurables (CLB), que se comunican entre ellos y con las terminales de en
trada/salida (E/S) por medio de alambrados llamados canales de comunica'
ción. Cada FPGA contiene una matriz de bloques lógicos idénticos, por lo
general de forma cuadrada, conectados por medio de líneas metálicas que corren
vertical y horizontalmente entre cada bloque (Fig. 1.10).
16 VHDL: El arte de programar sistemas digitales
E/S

Figura 1.10 Arquitectura


básica de un FPGA.

Bloques
Lógicos
Canales
Verticales

Canales
Horizontales

Bloques de

En la figura 1.11 se puede observar una arquitectura FPGA de la familia


XC4000 de la compañía Xilinx. Este circuito muestra a detalle la configura ción
interna de cada uno de los componentes principales que conforman es te
dispositivo.
Interconexión Xilinx.
programable Bloques de
entrada / salida

Bloques lógicos
Arquitectura FPGA

Figura 1.11 Arquitectura del FPGA XC4000 de

Los bloques lógicos (llamados también celdas generadoras de funciones)


están configurados para procesar cualquier aplicación lógica. Estos bloques
Estado actual de la lógica programable 17

tienen la característica de ser funcionalmente completos; es decir, permiten la


implementación de cualquier función booleana representada en la forma de
suma de productos. El diseño lógico se implementa mediante bloques co nocidos
como generadores de funciones o LUT (Look Up Table: tabla de búsqueda), los
cuales permiten almacenar la lógica requerida, ya que cuen tan con una pequeña
memoria interna —por lo general de 16 bits— [6J. Cuando se aplica alguna
combinación en las entradas de la LUT, el circuito la traduce en una dirección de
memoria y envía fuera del bloque el dato almacenado en esa dirección. En la
figura 1.12 se observan los tres LUT que contiene esta arquitectura, los cuales se
encuentran etiquetados con las letras G, F y H.
Figura 1.12 Arquitectura de un bloque lógico configurable FPGA.
En un dispositivo FPGA, los CLB están ordenados en arreglos de matri ces
programables (Programmable Switch Matrix o PSM), la matriz se encar ga de
dirigir las salidas de un bloque a otro. Las terminales de entrada y sali da del
FPGA pueden estar conectadas directamente al PSM o CLB, o se
pueden conectar por medio de vías o canales de comunicación. En algunas
ocasiones se pueden confundir los dispositivos de FPGA y CPLD, ya que ambos
utilizan bloques lógicos en su fabricación. La diferencia entre ellos radica en el
número de flip-flops utilizados, mientras la arquitectu ra del FPGA es rica en
registros. La CPLD mantiene una baja densidad. En la tabla 1.4 se presentan
algunas otras diferencias entre una y otra arquitectura.
18 VHDL: El arte de programar sistemas digitales

Características CPLD FPGA

Arquitectura • Similar a un PLD • Similar a los arreglos de



Más combinacional compuertas


Más registros + RAM

Densidad • Baja a media • Media a alta

Funcionalidad • Trabajan a frecuencias • Depende de la aplicación


superiores a 200 Mhz (arriba de los 135Mhz)

Aplicaciones • Contadores rápidos • Excelentes en aplicaciones



Máquinas de estado para arquitecturas de

Lógica combinacional computadoras


Procesadores Digitales de
Señales (DSP)


Diseños con registros

Tabla 1.4 Diferencias entre dispositivos lógicos programables complejos (CPLD) y los arreglos de
compuertas programables en campo (FPGA).

1.3 Ambiente de desarrollo de la lógica programable

Una de las grandes ventajas al diseñar sistemas digitales mediante dispositi vos
lógicos programables radica en el bajo costo de los recursos requeridos para el
desarrollo de estas aplicaciones. De manera general, el soporte bási co se encuentra
formado por una computadora personal, un grabador de dis positivos lógicos
programables y el software de aplicación que soporta las diferentes familias de
circuitos integrados PLD (Fig. 1.13).

Figura 1.13 Herramientas necesarias en la programación de PLD.


Estado actual de la lógica programable 19

En la actualidad, diversos programas CAD (diseño asistido por computa


dora), como PALASM, OPAL, PLR ABEL, CUPL, entre otros, se encuen tran
disponibles para la programación de dispositivos lógicos (tabla 1.5).

Compilador lógico

PALASM (PAL Assembler: ensamblador


de PAL) OPAL (Optimal PAL language: lenguaje
de optimización para arreglos programa
bles)
Desarrollado por National Semiconductors Se
aplica en dispositivos PAL y GAL Formato
para usar lenguaje de máquinas de esta do,
ecuaciones booleanas de distintos niveles, ta
blas de verdad, o cualquier combinación entre
ellas.
Disponible en versión estudiantil y profesional
PLPL (Programable Logic Programming (OPAL Jr y OPAL Pro)
Language: lenguaje de programación de Genera ecuaciones de diseño partiendo de una
lógica programable) tabla de verdad

Creado por AMD


Introduce el concepto de jerarquías en sus
diseños Formatos múltiples (ecuaciones
ABEL (Advanced Boolean Expression booleanas, tablas de verdad, diagramas de
Language: lenguaje avanzado de expresio estado y las combinacio nes entre éstos)
nes booleanas) Aplicaciones en dispositivos PAL y GAL

Creado por Data I/O Corporation


Programa cualquier tipo de PLD (Versión 5.0)
Proporciona tres diferentes formatos de
entrada: ecuaciones booleanas, tablas de
CUPL (Compiler Universal verdad y diagra mas de estados.
Programmable Logic: compilador Es catalogado como un lenguaje avanzado
universal de lógica programable) HDL (lenguaje de descripción en hardware)
Características
Creado por AMD para desarrollo de diseños
Creado por la compañía Advanced Micro complejos
Devi ces (AMD) Presenta una total independencia del
Desarrollado únicamente para aplicaciones con dispositivo Programa cualquier tipo de PLD
dispositivos PAL Facilita la generación de descripciones lógicas
Acepta el formato de ecuaciones booleanas de alto nivel
Utiliza cualquier editor que grabe en formato Al igual que ABEL, también es catalogado
ASCII como HDL

Tabla 1.5 Descripción de compiladores lógicos para PLD.


20 VHDL: El arte de programar sistemas digitales

Estos programas —conocidos también como compiladores lógicos— tienen


una función en común: procesar y sintetizar el diseño lógico que se va a introducir
en un PLD mediante un método específico (ecuaciones boolea nas, diagramas de
estado, tablas de verdad) [5].

Método tradicional de diseño con lógica programable

La manera tradicional de diseñar con lógica programable, parte de la repre


sentación esquemática del circuito que se requiere realizar y luego define la
solución del sistema por el método adecuado (ecuaciones booleanas, tablas de
verdad, diagramas de estado, etc.). Por ejemplo, en la figura 1.14 se obser va un
diagrama que representa a un circuito construido con compuertas lógicas AND y
OR. En este caso se eligió el método de ecuaciones boolea nas para representar su
funcionamiento, aunque se pudo usar también una tabla de verdad.

Figura 1.14 Obtención de las ecuaciones booleanas.

Como se puede observar, las ecuaciones que rigen el comportamiento del


sistema se encuentran derivadas en función de las salidas fl y f2 del circuito. Una
vez que se obtienen estas ecuaciones, el siguiente paso es introducir en la
computadora el archivo fuente o de entrada; es decir, el programa que con
tiene los datos que permitirán al compilador sintetizar la lógica requerida.
Típicamente se introduce alguna información preliminar que indique datos como
el nombre del diseñador, la empresa, techa, nombre del diseño, etc. Luego se
especifica el tipo de dispositivo PLD que se va a utilizar, la numera
ción de los pines de entrada y salida, y las variables del diseño. Por último, se
define la función lógica en forma de ecuaciones booleanas o cualquier forma to que
acepte el compilador.
Bstado actual de la lógica programable 21

En la figura 1.15 se observa la pantalla principal del programa PALASM, en el


cual se compilará el diseño de la figura 1.14 con el fin de ejemplificar la metodología
que se debe seguir.
Figura 1.15 Pantalla principal de PALASM.

La forma de introducir el diseño se muestra en el listado 1. Nótese que las


palabras reservadas por el compilador se representan con letras negritas.

TITLE EJEMPLO
PATTERN [Link]
REVISION 1.0
AUTHOR JESSICA COMPANY UNAM Encabezado
DATE 00-00-00 CHIP XX PAL16 L 8 Declaración de pines de entrada/salida
20
; 1 2 3 4 5 6 7 8 9 10 NC NC NC re c
NC A B C NC NC GND

; 1112 13 14 15 16 17 18 19

NC
NC
F1
F2
NC
NC
NC NC NC 1

EQUATIONS

Ecuaciones del circuito

Simulación (condiciones e/s)


Listado 1.1 Archivo Fuente compilado en formato PALASM.
22 VHDL: El arte de programar sistemas digitales

El siguiente paso consiste en la compilación del diseño, el cual radica bá


sicamente en localizar los errores de sintaxis1 o de otro tipo, cometidos durante la
introducción de los datos en el archivo fuente. El compilador pro cesa y traduce el
archivo fuente y minimiza las ecuaciones. En este paso, el diseño se ha simulado
utilizando un conjunto de entradas y sus correspon dientes valores de salida
conocidos como vectores de prueba. Durante este proceso se comprueba que el
diseño funcione correctamente antes de intro ducirlo al PLD. Si se detecta algún
error en la simulación, se depura el dise ño para corregir este defecto.
Una vez que el diseño no tiene errores, el compilador genera un archivo
conocido como JEDEC (Joint Electronic Device Engineering Council)2 o mapa de
fusibles. Este archivo indica al grabador cuáles fusibles fundir y cuáles activar,
para que luego se grabe el PLD (de acuerdo con el mapa de fusibles) en un
grabador típico (Fig. 1.16).

Figura 1.16 Implementación final del diseño en un PLD.

Como se puede observar, ciertos PLD (PROM, PAL, GAL) se programan


empleando un grabador de dispositivos lógicos. Algunos otros PLD, como los
CPLD y FPGA, presentan la característica de ser programables dentro del sistema
(ISR In-System Programmable); es decir, no hay que introducirlos al grabador, ya
que por medio de elementos auxiliares se pueden programar dentro de la tarjeta
de circuito integrado.
Como se aprecia, el método de diseño con lógica programable reduce de
manera considerable el tiempo de diseño y permite al diseñador mayor control de
los errores que se pudieran presentar, ya que la corrección se reali za en el
software y no en el diseño físico.

1 2
La sintaxis se refiere al formato establecido y la-simbología utilizada para describir una categoría de funciones.
Los archivos JEDEC están estabilizados para todos los compiladores lógicos existentes.
Estado actual de la lógica programable 23

1.4 Campos de aplicación de la lógica programable

La lógica programable es una herramienta de diseño muy poderosa, que se


aplica en el mundo industrial y en proyectos universitarios en todo el mun do. En
la actualidad se usan desde los PLD más sencillos (como el GAL, PAL, PLA)
como reemplazos de circuitos LSI y MSI, hasta los potentes CPLD y FPGA, que
tienen aplicaciones en áreas como telecomunicaciones, computación, redes,
medicina, procesamiento digital de señales, multiproce samiento de datos,
microondas, sistemas digitales, telefonía celular, filtros digitales programables,
entre otros.
En general, los CPLD son recomendables en aplicaciones donde se requie ren
muchos ciclos de sumas de productos, ya que pueden introducirse en el dis
positivo para ejecutarse al mismo tiempo, lo que conduce a pocos retrasos. En la
actualidad, los CPLD son muy utilizados a nivel industrial, ya que resulta fácil
convertir diseños compuestos por múltiples PLD sencillos en un circuito CPLD.
Por otro lado, los FPGA son recomendables en aplicaciones secuencia Ies que
no suponen grandes cantidades de términos producto. Por ejemplo, los FPGA
desarrollados por la compañía ATMEL ofrecen alta velocidad en cómputo
intensivo, aplicaciones en procesadores digitales de señales (DSP) y en otras
fases del diseño lógico, debido a la gran cantidad de registros con los que
cuentan sus dispositivos (de 1024 a 6400). Esto los hace ideales para su uso en
dichas áreas.

Desarrollos recientes

Existen desarrollos realizados por diversas compañías cuyo funcionamiento se


basa en un PLD; por ejemplo, la figura 1.17 ilustra una tarjeta basada en un
FPGA de la familia XC4000 de Xilinx Corporation. Este desarrollo permite el
procesamiento de datos en paralelo a alta velocidad, lo que reduce los proble
mas de procesamiento de datos intensivo3.
Figura 1.17 Sistema basado en un FPGA.

' Fuente de información: [Link]


2 4 VHDL : El arte de programar sistemas digitales

En la figura 1.18 se muestra otra aplicación realizada en un dispositivo CPLD


de la familia FlexlOK de Altera Corporation (nivel de integración de 7000
compuertas). La función de esta tarjeta es permitir diversas aplicacio nes en
tiempo real, como el filtrado digital y muchas otras propias del cam po del
procesamiento digital de señales4.

Figura 1.18 Ejemplo de un diseño lógico programable completo.

Como ya se mencionó, el campo de la lógica programable se ha extendido en la


industria en los últimos años, ya que compañías de nivel internacional in tegran o
desarrollan lógica programable en sus diseños (vea la tabla 1.6).

Compañía Productos desarrollados con lógica programable

Andraka Consulting Group


[Link]

Comit's Services
Code Logic [Link]

[Link]
New Horizonts GU
Boton Line
[Link] [Link]
html nicaciones, proyectos espaciales.

Design Service Segments Redes: aplicaciones en protocolos TCP/IP


[Link] Multimedia: Compresión de Audio/Video
Procesadores digitales de señales (DSP) Aplicaciones en tiempo real
Comunicaciones digitales
Procesadores de audio y video Digitalizadores, Cámaras de Video (120Mbytes/sec)
Video en tiempo real
Lógica configurable Puertos paralelos de comunicaciones para PC
Control embebido
Diseño de microprocesadores complejos
Modems de alta velocidad Dispositivos para telecomunicaciones, DSP
Audio, video, adquisición de datos y procesamiento de Aplicaciones en diseños para control industrial
señales en general
Aplicaciones militares: Criptografía, seguridad en comu

Tabla 1.6 Compañías que incorporan lógica programable en sus diseños. 4

Fuente de información: [Link]

Estado actual de la lógica programable 25

1.5 La lógica programable y los lenguajes de descripción


en hardware (HDL)

Como consecuencia de la creciente necesidad de integrar un mayor número de


dispositivos en un solo circuito integrado, se desarrollaron nuevas herra mientas
de diseño que auxilian al ingeniero a integrar sistemas de mayor complejidad.
Esto permitió que en la década de los cincuenta aparecieran los lenguajes de
descripción en hardware (HDL) como una opción de diseño pa ra el desarrollo
de sistemas electrónicos elaborados. Estos lenguajes alcanza ron mayor
desarrollo durante los años setenta, lapso en que se desarrollaron varios de
ellos como IDL de IBM, TI-HDL de Texas Instruments, ZEUS de General
Electric, etc., todos orientados al área industrial, así como los len guajes en el
ámbito universitario (AHPL, DDL, CDL, ISPS, etc.) [8]. Los primeros no estaban
disponibles fuera de la empresa que los manejaba, mien tras que los segundos
carecían de soporte y mantenimiento adecuados que permitieran su utilización
industrial. El desarrollo continuó y en la década de los ochenta surgieron
lenguajes como VHDL, Verilog, ABEL 5.0, AHDL, etc., considerados lenguajes
de descripción en hardware porque permitieron abordar un problema lógico a
nivel funcional (descripción de un problema sólo conociendo las entradas y
salidas), lo cual facilita la evaluación de solu ciones alternativas antes de iniciar
un diseño detallado.
Una de las principales características de estos lenguajes radica en su ca
pacidad para describir en distintos niveles de abstracción (funcional, trans
ferencia de registros RTL y lógico o nivel de compuertas) cierto diseño. Los
niveles de abstracción se emplean para clasificar modelos HDL según el gra do
de detalle y precisión de sus descripciones [4].
Los niveles de abstracción descritos desde el punto de vista de simula ción
y síntesis del circuito pueden definirse como sigue:
• Algorítmico: se refiere a la relación funcional entre las entradas y sa lidas
del circuito o sistema, sin hacer referencia a la realización final.
• Transferencia de registros (RT): Consiste en la partición del sistema en
bloques funcionales sin considerar a detalle la realización final de
cada bloque.
• Lógico o de compuertas: el circuito se expresa en términos de ecua ciones
lógicas o de compuertas.

1.5.1 VHDL, lenguaje de descripción en hardware

En la actualidad, el lenguaje de descripción en hardware más utilizado a ni vel


industrial es VHDL5 (Hardware Description Language), que apareció en

5
Fuente de información: [Link]
26 VHDL: El arte de programar sistemas digitales

la década de los ochenta como un lenguaje estándar, capaz de soportar el proceso


de diseño de sistemas electrónicos complejos, con propiedades para reducir el
tiempo de diseño y los recursos tecnológicos requeridos. El Depar tamento de
Defensa de Estados Unidos creó el lenguaje VHDL como parte del programa
"Very High Speed Integrated Circuits" (VHSIC), a partir del cual se detectó la
necesidad de contar con un medio estándar de comunica ción y la documentación
para analizar la gran cantidad de datos asociados para el diseño de dispositivos
de escala y complejidad deseados [9]; es decir, VHSIC debe entenderse como la
rapidez en el diseño de circuitos integrados.
Después de varias versiones revisadas por el gobierno de los Estados Uni
dos, industrias y universidades, el IEEE (Instituto de Ingenieros Eléctricos y
Electrónicos) publicó en diciembre de 1987 el estándar IEEEstd 1076-1987. Un año
más tarde, surgió la necesidad de describir en VHDL todos los ASIC creados por
el Departamento de Defensa, por lo que en 199.3 se adoptó el es tándar adicional
de VHDL IEEE1164.
Hoy en día VHDL se considera como un estándar para la descripción,
modelado y síntesis de circuitos digitales y sistemas complejos. Este lenguaje
presenta diversas características que lo hacen uno de los HDL más utilizados en
la actualidad.

1.5.2 Ventajas del desarrollo de circuitos integrados con VHDL

A continuación se exponen algunas de las ventajas que representan los cir cuitos
integrados con VHDL:

• Notación formal. Los circuitos integrados VHDL cuentan con una notación
que permite su uso en cualquier diseño electrónico.
• Disponibilidad pública. VHDL es un estándar no sometido a paten te o
marca registrada alguna, por lo que cualquier empresa o institu
ción puede utilizarla sin restricciones. Además, dado que el IEEE lo
mantiene y documenta, existe la garantía de estabilidad y soporte.
• Independencia tecnológica de diseño. VHDL se diseñó para sopor tar
diversas tecnologías de diseño (PLD, FPGA, ASIC, etc.) con dis
tinta funcionalidad (circuitos combinacionales, secuenciales, síncro
nos y asincronos), a fin de satisfacer las distintas necesidades de
diseño.
• Independencia de la tecnología y proceso de fabricación. VHDL se creó
para que fuera independiente de la tecnología y del proceso de fa
bricación del circuito o del sistema electrónico. El lenguaje funciona
de igual manera en circuitos diseñados con tecnología MOS, bipola
res, BICMOS, etc., sin necesidad de incluir en el diseño información
Estado actual de la lógica programable 27

concreta de la tecnología utilizada o de sus características (retardos,


consumos, temperatura, etc.), aunque esto puede hacerse de mane
ra opcional.

• Capacidad descriptiva en distintos niveles de abstracción. El proce so de


diseño consta de varios niveles de detalle, desde la especificación
hasta la implementación final (niveles de abstracción). VHDL ofrece la
ventaja de poder diseñar en cualquiera de estos niveles y combinarlos,
con lo cual se genera lo que se conoce como simulación multinivel.
• Uso como formato de intercambio de información. VHDL permite el
intercambio de información a lo largo de todas las etapas del proce
so de diseño, con lo cual favorece el trabajo en equipo.
• Independencia de los proveedores. Debido a que VHDL es un len guaje
estándar, permite que las descripciones o modelos generados en
un sitio sean accesibles desde cualquier otro, sean cuales sean las he
rramientas de diseño utilizadas.
• Reutilización del código. El uso de VHDL como lenguaje estándar permite
reutilizar los códigos en diversos diseños, sin importar que ha
yan sido generados para una tecnología (CMOS, bipolar, etc.) e imple
mentación (FPGA, ASIC, etc.) en particular.
• Facilitación de la participación en proyectos internacionales. En la
actualidad VHDL constituye el lenguaje estándar de referencia a ni
vel internacional. Impulsado en sus inicios por el Departamento de
Defensa de Estados Unidos, cualquier programa lanzado por alguna
de las dependencias oficiales de ese país vuelve obligatorio su uso pa
ra el modelado de los sistemas y la documentación del proceso de
diseño [111. Este hecho ha motivado que diversas empresas y univer
sidades adopten a VHDL como su lenguaje de diseño.

En Europa la situación es similar, ya que en nuestros días la mayoría de las


grandes empresas del ramo lo ha definido como el lenguaje de referencia en
todas las tareas de diseño, modelado, documentación y mantenimiento de los
sistemas electrónicos. De hecho, el número de usuarios de VHDL en Eu
ropa es mayor que en Estados Unidos, debido en gran parte a que resulta el
lenguaje más común en la mayoría de los consorcios.

1.5.3 Desventajas del desarrollo de circuitos integrados con VHDL

Como se puede observar, VHDL presenta grandes ventajas; sin embargo, es


necesario mencionar también algunas desventajas que muchos diseñadores
consideran importantes:
28 VHDL: El arte de programar sistemas digitales

• En algunas ocasiones, el uso de una herramienta provista por alguna


compañía en especial tiene características adicionales al lenguaje, con
lo que se pierde tin poco la libertad de diseño. Como método alternati
vo, se pretende que entre diseñadores que utilizan distintas herramien
tas exista una compatibilidad en sus diseños, sin que esto requiera un
esfuerzo importante en la traducción del código.
• Debido a que VHDL es un lenguaje diseñado por un comité, presen ta una
alta complejidad, ya que se debe dar gusto a las diversas opinio
nes de los miembros de éste, por lo que resulta un lenguaje difícil de
aprender para un novato.

1.5.4 VHDL en la actualidad

La actividad que se ha generado en torno a VHDL es muy intensa. En mu chos


países como España se han creado grupos de trabajo alrededor de dicho lenguaje
y se realizan periódicamente conferencias, reuniones, etc., donde se presentan
trabajos tanto en Estados Unidos (en el VIUF, VHDL Internatio nal User's Forum)
como en Europa (VHDL Forum for CAD in Europe), así como en el congreso
EuroVHDL celebrado desde 1992[ 10 ].
La participación europea en el esfuerzo de estandarizar el lenguaje se canaliza
a través del proyecto ESPRIT, encabezado por SIEMENS-NIXDORF. En el
proyecto participan prácticamente todas las grandes compañías euro peas del
sector electrónico, como ANACAD, ICL, PHILLIPS, TGI y THOM SON-CSF,
además de diversas universidades y centros de investigación. Otras empresas
dedicadas a la microelectrónica se han ido adaptando poco a poco al lenguaje.
Incluso en Japón está teniendo una gran aceptación, no obstante que cuentan con
un lenguaje estándar propio llamado UDL/I.
El proceso de estandarización del VHDL no se detuvo con la primera ver sión
del lenguaje (VHDL'87), sino que ha continuado con la nueva versión (VHDL'93)
y constantes actualizaciones, mejoras y metodologías de uso. En tre estas adiciones
o actualizaciones se encuentra una muy importante: la ex' tensión analógica
(1076.1), que permite la utilización de un lenguaje único en todas las tareas de
especificación, simulación y síntesis de sistemas electró nicos digitales, analógicos
o mixtos.

1.6 Compañías de soporte en hardware y software

Existen diversas compañías internacionales que fabrican o distribuyen dispo


sitivos lógicos programables. Algunas ofrecen productos con características
generales y otras introducen innovaciones a sus dispositivos. A continuación se
mencionan algunas de las más importantes.
Estado actual de la lógica programable 29

Altera Corporation
Altera es una de las compañías más importantes de producción de dispositi vos
lógicos programables y también es la que más familias ofrece, ya que tiene en el
mercado ocho familias: APEX™20K, FLEX®10K, FLEX 8000, FLEX 6000, MAX®
9000, MAX7000, MAX5000, y Classic™. La capacidad de integración en cada familia
varía desde 300 hasta 1 000 000 de compuer tas utilizables por dispositivo, además
de que todas tienen la capacidad de in tegrar sistemas complejos.
Las características generales más significativas de los dispositivos Altera son
las siguientes:

• Frecuencia de operación del circuito superior a los 175 Mhz y retardos pin a
pin de menos de 5 ns.
• La implementación de bloques de arreglos integrados (EAB), que se usan para
realizar circuitos que incluyan funciones aritméticas como multiplicadores,
ALU, y secuenciadores. También se aplican en micro-. procesadores,
microcontroladores y funciones complejas con DSP (procesadores digitales de
señales) [12].
• La programación en sistema (ISP), que permite programar los disposi tivos
montados en la tarjeta (Fig. 1.19).

En la figura 1.19a observamos la programación en sistema; es decir, no hay que


retirar el circuito de la tarjeta para programarlo. En la figura 1.19b se muestra lo
contrario: en este caso el tipo de programación es similar a la grabación cotidiana
que realizamos, debido a que se debe colocar y quitar el dispositivo todas las veces
que se quiera programar.

a) b)

Figura 1.19 a) Programación en sistema, b) Programación en montaje.

• Más de cuarenta tipos y tamaños de encapsulados, incluyendo el TQFP (thin


quad fíat pack), el cual es un dispositivo delgado, de for ma cuadrangular y
plano, que permite ahorrar un espacio considera ble en la tarjeta.
• Operación multivoltaje, entre los 5 y 3.3 volts, para máximo funcio namiento y
2.5 V en sistemas híbridos.
30 VHDL: El arte de programar sistemas digitales

• Potentes herramientas de software como MAX + PLUS II, que soporta todas
las familias de dispositivos de Altera, así como el software están
dar compatible con VHDL.

Cypress semiconductor
La compañía Cypress Semiconductor ofrece una amplia variedad de disposi tivos
lógicos programables complejos (CPLD), que se encuentran en las familias
Ultra37000™ y FLASH370i™. Cada una de estas familias ofrece la reprogramación
en sistema (ISR), la cual permite reprogramar los dispositi vos las veces que se
quiera dentro de la tarjeta.
Todos los dispositivos de ambas familias trabajan con voltajes de operación de 5 o
de 3.3 V y en su interior contienen desde 32 hasta 128 macroceldas. En lo que
respecta a software de soporte, Cypress ofrece su poderoso pro
grama Warp, el cual se basa en VHDL. Este programa permite simular de manera
gráfica el circuito programado, generando un archivo de mapa de fu sibles (jedec)
que puede ser programado directamente en cualquier PLD, CPLD o FPGA de
Cypress o de otra compañía que sea compatible.

Clear logic
La compañía Clear Logic introdujo en noviembre de 1998 los dispositivos ló gicos
procesados por láser (LPDL), tecnología que provee reemplazos de los
dispositivos de la Compañía Altera, pero a un costo y tamaño menores. La
tecnología LPLD puede disponer de arriba de un millón de transistores para
construir alrededor de 512 macroceldas. Sustituye al dispositivo MAX 7512A de
Altera y reduce el tamaño más de 60% respecto al chip original. Las primeras
familias introducidas por Clear Logic son CL7000 y CL7000E, las cuales tienden a
crecer en un futuro.

Motorola
Motorola, empresa líder en comunicaciones y sistemas electrónicos, ofre ce
también dispositivos FPGA y FPAA (Field Programmable Array Ana log: campos
programables de arreglos analógicos). Los FPAA son los primeros campos
programables para aplicaciones analógicas, utilizados en las áreas de transporte,
redes, computación y telecomunicaciones.

Xilinx
Xilinx es una de las compañías líder en soluciones de lógica programable, in
cluyendo circuitos integrados avanzados, herramientas en software para di seño,
funciones predefinidas y soporte de ingeniería. Xilinx fue la compañía que
inventó los FPGA y en la actualidad sus dispositivos ocupan más de la mitad del
mercado mundial de los dispositivos lógicos programables.
Estado actual de la lógica programable 31

Los dispositivos de Xilinx reducen de manera significativa el tiempo re


querido para desarrollar aplicaciones en las áreas de computación, telecomu
nicaciones, redes, control industrial, instrumentación, aplicaciones militares y
para el consumo general.
Las familias de CPLD XC9500 y XC9500XL proveen una larga variedad de
dispositivos programables con características que van desde los 5 a 3.3 volts de
operación, 36 a 288 macroceldas, 34 a 192 terminales de entrada y salida, y
programación en sistema.
Los dispositivos de las familias XC4000 y XC1700 de FPGA manejan vol tajes
de operación entre los 5 y 3.3 V, una capacidad de integración arriba de las 40 000
compuertas y programación en sistema.
En lo que se refiere a software, Xilinx desarrolló una importante
herramienta llamada Foundation Series, que soporta diseños estándares basados
en ABEL-HDL y en VHDL. Esta herramienta se ofrece en versión estudiantil y
profesional.
De manera general, existe una amplia y variada gama de dispositivos ló
gicos programables disponibles en el mercado. La elección de uno u otro de
pende de los recursos con que cuenta el diseñador y los requerimientos del
diseño. En la tabla 1.7 se muestran de forma simplificada algunas de las com
pañías que ofrecen soluciones de lógica programable, mientras que en la figura
1.20 se presentan sus productos.
Futuro de la lógica programable

Debido al auge actual de la lógica programable, no es difícil suponer que se


pretende mejorar a futuro las herramientas existentes con el fin de ex tender su
campo de aplicación a más áreas. Algunas compañías buscan mejorar la
funcionalidad e integración de sus circuitos a fin de competir con el mercado de
los ASIC. Esto mejoraría el costo por volumen, el ciclo de diseño y se disminuiría
el voltaje de consumo.
Otra característica que se pretende mejorar es la reprogramación de los
circuitos, debido a que su implementación requiere muchos recursos físicos y
tecnológicos. Por esta razón se busca cambiar las metodologías de diseño para
incluir sistemas reprogramables por completo.
Algunos desarrollos cuentan con memoria RAM o microprocesadores
integrados en la tarjeta de programación. La tendencia de algunos fabrican tes es
integrar estos recursos en un circuito.
32 VHDL: El arte de programar sistemas digitales

Compañía Productos de hardware Herramientas software


CL7000S
MAX + PLUS II: Soporta VHDL, Verilog y
Altera FPGA: Familias APEX 20K, FLEX 10K, entrada esquemática.
FLEX 6000, MAX 9000, MAX
7000, MAX 5000 y CLASSIC

Chip Express LPGA (Laser Program Gate QulCk Place&route: Diseños en base a vectores
Array): CX3000, CX2000 y de prueba (CTV , ChipExpress Test Vector) y
QYH500 VHDL

Clear Logic LPLD (Laser-processed Logic Desarrollos basados en herramientas de Altera.


Device): CL7000, CL7000E,

Cypress FPAA (Field Programmable WARP: Soporta VHDL, Verilog


Semiconductors Motorola Analog Array): MPAA020 y esquemáticos.

Easy Analog: herramienta de


FPGA: Familias MACH4 y diseño interactiva exclusiva
MACH5A para diseño con FPAA.
Vantis
PLD: GAL22V10
CPLD: Ultra.37000, FLASH370Í PAsic (Asic Programable) y la MACHXL: VHDL y Verilog
FPGAs Familia XC400 y XC1700

Quick Logic familia QL de FPGA.

Tabla 1.7 Compañías de Soporte de lógica


programable.
CPLD: Familia XC9500 y Quick Works: herramienta de soporte para
Xilinx XC9500XL VHDL, Verilog y cap tura esquemática.
VHDL y esquemáticos.
Xilinx Foundation Series: soporta ABEL-HDL,

Figura 1.20 Dispositivos lógicos programables.


Estado actual de la lógica programable
33

Ejercicios
1.1 ¿Qué significa monolítico?
1.2 ¿Cuál es el significado de las siglas ASIC?
1.3 ¿Cuáles son las categorías de tecnologías de fabricación de CI?
1.4 Describa en qué consiste el diseño Full Custom.
1.5 Mencione las características más relevantes del diseño Full Custom. 1.6
¿Cuál es el significado de las siglas PLD?
1.7 ¿Qué tienen en común los dispositivos PROM, PLA, PAL, GAL y los CPLD y
FPGA?
1.8 ¿Qué es OLMC?
1.9 ¿Cuál es el significado de las siglas CPLD y FPGA?
1.10 Describa cómo se encuentra estructurado un CPLD.
1.11 Describa la estructura de un FPGA en términos generales.
1.12 ¿Qué es un compilador lógico?
1.13 ¿Cuál es el significado de las siglas VHDL?
1.14 ¿Qué significado tienen las siglas VHSIC?
1.15 Describa tres ventajas de la programación en VHDL.
1.16 ¿Cuáles son las compañías más importantes en la fabricación de
dispositivos lógicos programables?
34 VHDL: El arte de programar sistemas digitales

Bibliografía
Maxinez David G., Alcalá Jessica: Diseño de Sistemas Embebidos a través del Lenguaje
de Descripción en Hardware VHDL. XIX Congreso Internacional Académico de
Ingeniería Electrónica. México, 1997.
Kloos C., Cerny E.: Hardware Description Language and their aplications. Spe
cification, modelling, verification and synthesis of microelectronic systems. Chap
man&Hall, 1997.
IEEE: The IEEE standard VHDL Language Reference Manual. IEEE-Std-1076-
1987,1988.
Advanced Micro Devices: Programmable Logic Handbook/Data book. Advan ced
Micro Devices, 1986.
Zainalabedin Navabi: Analysis and Modeling of Digital Systems. McGraw-Hill, 1988.
Altera Corporation: User Configurable Logic Data Book. Altera Corp., 1988. Altera
Corporation: The Maximalist Handbook. Altera Corp., 1990.
Ismail M., Fiez T.: Analog VLSI. McGraw-Hill, 1994.
Hayes John E: Computer Architecture and Organization. McGraw-Hill, 1979.
Wakerly J. F.: Digital Desing Principles and practices. Prentice Hall, 1990. Skahill
Kevin.: VHDL for programmable logic. Addison Wesley, 1996.
Cypress Corporation: [Link]
Xilinx Corporation: [Link]
Organización Mundial de VHDL: [Link]
Campos de lógica programable: [Link]

Referencias

[1] Maxinez G. David: Amplificación de Señales. ITESM-CEM, 1993.


[21 Hon R. W. y Sequin C.H.: A guide to LSI implentation. Xerox Parc, 1980.
[31 Mead C. y Conway L.: Introduction to VLSI Systems. Addison Wesley, VLSI
series 1980.
[4] Teres LI., Torroja Y., Olcoz S., Villar E.: VHDL Lenguaje Estándar de Di seño
Electrónico. McGraw-Hill, 1998.
[5] Floyd T. L.: Fundamentos de Sistemas Digitales. Prentice Hall, 1998. [6, 7] Van
den Bout Dave: The practical Xilinx Designer Lab Book. Prentice Hall, 1998.
[8] Instituto de Ingeniería Eléctrica y Electrónica, IEEE. Revista Computer. IEEE,
1977.
[9] Delgado C., Lecha E., Moré M., Terés Ll., Sánchez L.: Introducción a los lenguajes
VHDL, Verilogy UDL/Í. Novática No. 112, España, 1993.
Estado actual de la lógica programable
35

[9] Delgado C., Lecha E., Moré M., Terés LL, Sánchez L.: Introducción a los
lenguajes VHDL, Verilog y UDL/I. Novática No. 112, España, 1993. [10] Ecker W.:
The Design Cube. Euro VHDL Forum, 1995. [11] Novatica (varios autores):
!
Monografía sobre los lenguc es de diseño de hardware. Revista Novatica, núms.
112-113, nov-94 a leb-95. [12] Altera Corporation: [Link]

Capít 2
ulo

VHDL:
su organización
y arquitectura
Introducción

Tal como lo indican sus siglas, VHDL (Hardware Description Language) es un


lenguaje orientado a la descripción o modelado de sistemas digitales; es decir, se
trata de un lenguaje mediante el cual se puede describir, analizar y evaluar el
comportamiento de un sistema electrónico digital.
VHDL es un lenguaje poderoso que permite la integración de sistemas
digitales sencillos, elaborados o ambos en un dispositivo lógico programable, sea
de baja capacidad de integración como un GAL, o de mayor capacidad como los
CPLD y FPGA.

2.1 Unidades básicas de diseño

La estructura general de un programa en VHDL está formada por módulos o


unidades de diseño, cada uno de ellos compuesto por un conjunto de de
claraciones e instrucciones que definen, describen, estructuran, analizan y
evalúan el comportamiento de un sistema digital.
Existen cinco tipos de unidades de diseño en VHDL: declaración de en tidad
(entity declaration), arquitectura (architecture), configuración (con figuration),
declaración del paquete (package declaration) y cuerpo del paquete (package
body). En el desarrollo de programas en VHDL pueden utilizarse o no tres de los
cinco módulos, pero dos de ellos (entidad y arqui tectura) son indispensables en
la estructuración de un programa.
Las declaraciones de entidad, paquete y configuración se consideran uni
dades de diseño primarias, mientras que la arquitectura y el cuerpo del pa quete
son unidades de diseño secundarias porque dependen de una entidad primaria
que se debe analizar antes que ellas.
38 VHDL: El arte de programar sistemas digitales

2.2 Entidad

Una entidad (entity) es el bloque elemental de diseño en VHDL, Las entida' des
son todos los elementos electrónicos (sumadores, contadores, compuertas,
flip-flops, memorias, multiplexores, etc.) que forman de manera individual o en
conjunto un sistema digital. La entidad puede representarse de muy di
versas maneras; por ejemplo, la figura 2.1a) muestra la arquitectura de un su
mador completo a nivel de compuertas; ahora bien, esta entidad se puede
representar a nivel de sistema indicando tan sólo las entradas (Cin, A y B) y
salidas (SUMA y Cout) del circuito: figura 2.1b). De igual forma, la integra ción
de varios subsistemas (medio sumador) puede representarse mediante una
entidad [Fig. 2.1c)]. Los subsistemas pueden conectarse internamente en tre sí;
pero la entidad sigue identificando con claridad sus entradas y salidas
generales.

a)
b)
c)

Figura 2.1 a) Descripción a nivel de compuertas, b) Símbolo funcional de la entidad; c) Diagrama a bloques
representativo de la entidad.
VHDL: su organización y arquitectura 39

2.2.1 Puertos de entrada'salida

Cada una de las señales de entrada y salida en una entidad son referidas como
puerto, el cual es similar a una terminal (pin) de un símbolo esquemá tico. Todos
los puertos que son declarados deben tener un nombre, un mo do y un tipo de
dato. El nombre se utiliza como una forma de llamar al puer to; el modo permite
definir la dirección que tomará la información y el tipo define qué clase de
información se transmitirá por el puerto. Por ejemplo, respecto a los puertos de la
entidad que representan a un comparador de igualdad (Fig. 2.2), las variables a y
b denotan los puertos de entrada y la va riable c se refiere al puerto de salida.

Figura 2.2 Comparador de igualdad.

2.2.2 Modos

Como ya se mencionó, un modo permite definir la dirección en la cual el dato es


transferido a través de un puerto. Un modo puede tener uno de cuatro va lores: in
(entrada), out (salida), inout (entrada/salida) y buffer (Fig. 2.3).

• Modo in. Se refiere a las señales de entrada a la entidad. Este sólo es uni
direccional y nada más permite el flujo de datos hacia dentro de la entidad. •
Modo out. Indica las señales de salida de la entidad.
• Modo inout. Permite declarar a un puerto de forma bidireccional —es decir, de
entrada/salida—; además permite la retroalimentación de seña les dentro o
fuera de la entidad.
• Modo buffer. Permite hacer retroalimentaciones internas dentro de la entidad,
pero a diferencia del modo inout, el puerto declarado se com porta como una
terminal de salida.

Figura 2.3 Modos y el curso de sus señales.


VHDL: El arte de programar sistemas digitales
40

2.2.3 Tipos de datos

Los tipos son los valores (datos) que el diseñador establece para los puertos de
entrada y salida dentro de una entidad; se asignan de acuerdo con las ca
racterísticas de un diseño en particular. Algunos de los tipos más utilizados en
VHDL son:

• Bit, el cual tiene valores de 0 y 1 lógico.


• Boolean (booleano) que define valores de verdadero o falso en una ex
presión
• Bit_vector (vectores de bits) que representa un conjunto de bits para cada
variable de entrada o salida.
• Integer (entero) que representa un número entero.

Los anteriores son sólo algunos de los tipos que maneja VHDL, pero no son
los únicos.1

2.3 Declaración de entidades

Como se mencionó en la sección 2.1 (Unidades básicas de diseño), los módu los
elementales en el desarrollo de un programa dentro del lenguaje de descrip ción en
hardware (VHDL) son la entidad y la arquitectura.
La declaración de una entidad consiste en la descripción de las entradas y
salidas de un circuito de diseño identificado como entity (entidad); es decir, la
declaración señala las terminales o pines de entrada y salida con que cuenta la
entidad de diseño.
Por ejemplo, la forma de declarar la entidad correspondiente al circuito
sumador de la figura 2.1b) se muestra a continuación:

1 —Declaración de la entidad de un circuito sumador


entity sumador is
2
port (A, B, Cin: in bit;
3
SUMA, Cout: out bit);
4
end sumador;
5

Listado 2.1 Declaración de la entidad sumador de la figura 2.1b). 1 En el

apéndice A se listan los tipos de datos existentes en VHDL.

VHDL: su organización y arquitectura


41

Los números de las líneas (1, 2, 3, 4, 5) no son parte del código; se usan como
referencia para explicar alguna sección en particular. Las palabras en negritas están
reservadas para el lenguaje de programación VHDL; esto es, tienen un significado
especial para el programa; el diseñador asigna los otros términos.
Ahora comencemos a analizar el código línea por línea. Observemos que la
línea 1 inicia con dos guiones (--), los cuales indican que el texto que está a la
derecha es un comentario cuyo objetivo es documentar el programa, ya que el
compilador ignora todos los comentarios. En la línea 2 se inicia la declaración de la
entidad con la palabra reservada entity, seguida del identi* ficador o nombre de la
entidad (sumador) y la palabra reservada is. Los puer
tos de entrada y salida (port) se declaran en las líneas 3 y 4, respectivamente —en
este caso los puertos de entrada son A, B y Cin—, mientras que SU MA y Cout
representan los puertos de salida. El tipo de dato que cada puer to maneja es del
tipo bit, lo cual indica que sólo pueden manejarse valores de '0' y '1' lógicos. Por
último, en la línea 5 termina la declaración de entidad con la palabra reservada
end, seguida del nombre de la entidad (sumador).
Debemos notar que como cualquier lenguaje de programación, VHDL sigue
una sintaxis y una semántica dentro del código, mismas que hay que respetar. En
esta entidad conviene hacer notar el uso de punto y coma (;) al finalizar una
declaración y de dos puntos (:) al asignar nombres a las entra
das y salidas.

Ejempl o 2. 1 Declare la entidad del circuito lógico de la figura C2.1.

Figura E2.1

Solución

Como puede observarse, las entradas y salidas del circuito se encuentran de


limitadas por la línea punteada. En este caso, a3, b3, a2, b2,... aO, bO son las
entradas y F es la salida.
42 VHDL: El arte de programar sistemas digitales

La declaración de la entidad sería de la siguiente forma:

1 -- Declaración de la entidad
2 Entity circuito is
3 port( a3,b3,a2,b2,al,bl,aO, bO: in bit;
4 F: out bit);
5 end circuito;

Identificadores

Los identificadores son simplemente los nombres o etiquetas que se usan pa ra


referir variables, constantes, señales, procesos, etc. Pueden ser números, letras del
alfabeto y guiones bajos ( _ ) que separen caracteres y no tienen una restricción en
cuanto a su longitud. Todos los identificadores deben se guir ciertas
especificaciones o reglas para que se puedan compilar sin errores, mismas que
aparecen en la tabla 2.1.
Regla Incorrecto Correcto
Suma4 SUMA4
El primer caracter siempre es Un identificador no puede
S4_bits
una letra mayúscula o utilizar símbolos
minúscula. 4suma

Resta_4_ Clear_8
El segundo caracter no puede
ser un guión bajo S_4bits

Dos guiones juntos no son


permitidos Resta 4 Clear#8

Tabla 2.1 Especificaciones para la escritura de identificadores.

VHDL cuenta con una lista de palabras reservadas que no pueden fun cionar
como identificadores (vea el Apéndice B).

2.4 Diseño de entidades mediante vectores


La entidad sumador realizada en el circuito del listado 2.1, usa bits indivi duales,
los cuales sólo pueden representar dos valores lógicos (0 o 1). De ma nera general,
en la práctica se utilizan conjuntos (palabras) de varios bits; en VHDL las palabras
binarias se conocen como vectores de bits, los cuales se consideran un grupo y no
como bits individuales. Como ejemplo considéren se los vectores de 4 bits que se
muestran a continuación:

vector_A = [A3, A2, Al, AO]


vector_B = [B3, B2, Bl, BO]
vector_SUMA = [S3, S2, SI, SO]
VHDL: su organización y arquitectura
43

En la figura 2.4 se observa la entidad del sumador analizado antes, sólo que
ahora las entradas A, B y la salida SUMA incorporan vectores de 4 bits en sus
puertos. Obsérvese cómo la entrada Cin y la salida Cout son de un bit.

Figura 2.4 Entidad representada por vectores.


La manera de describir en VHDL una configuración que utilice vectores
consiste en la utilización de la sentencia bit_vector, mediante la cual se es
pecifican los componentes de cada uno de los vectores utilizados. La parte del
código que se usa para declarar un vector dentro de los puertos es el si guiente:

port (vector_A, vector_B: in bit_vector (3 downto 0);


vector_SUMA: out bit_vector (3 downto 0));

Esta declaración define los vectores (A, B y SUMA) con cuatro compo nentes
distribuidos en orden descendente por medio del comando:

3 downto 0 (3 hacia 0)

los cuales se agruparían de la siguiente manera.

vector_A(3) = A3 vector_B(3) = B3 vector_SUMA(3) = S3


vector_A(2) = A2 vector_B(2) = B2 vector_SUMA(2) = S2
vector_A(l) = Al vector_B(l) = B1 vector_SUMA(l) = SI
vector A(0) = A0 vector_B(0) = B0 vector SUMA(O) = SO

Una vez que se ha establecido el orden en que aparecerán los bits enun
ciados en cada vector, no se puede modificar, a menos que se utilice el co mando
to:

Oto 3 (0 hasta 3)

que indica el orden de aparición en sentido ascendente.


Ejemplo 2.2 Describa en VHDL la entidad del circuito sumador representado en la figu ra 2.4.
Observe cómo la entrada Cin (Carry in) y la salida Cout (Carry out) se expresan
de forma individual.
44 VHDL: El arte de programar sistemas digitales

Solución

entity sumador is
port (A,B: in bit_vector (3 downto 0);
Cin: in bit;
Cout: out bit;
SUMA: out bit_vector(3 downto 0));
end sumador;
Ejemplo 2.3 Declare la entidad del circuito lógico mostrado en la figura del ejemplo 2.1, mediante
vectores.

Solución

1 -Declaración de entidades mediante vectores


2 entity detector is
3 port (a,b: in bit_vector(3 downto 0);
4 F: out bit));
5 end detector;

2.4.1 Declaración de entidades mediante librerías y paquetes

Una parte importante en la programación con VHDL radica en el uso de li' brerías y
paquetes que permiten declarar y almacenar estructuras lógicas, seccionadas o
completas que facilitan el diseño.
Una librería o biblioteca es un lugar al que se tiene acceso para utilizar las
unidades de diseño predeterminadas por el fabricante de la herramienta (paquete) y
su función es agilizar el diseño. En VHDL se encuentran defini das dos librerías
llamadas ieee y work (Fig. 2.5). Como puede observarse, en la librería ieee se
encuentra el paquete std_logic_l 164, mientras que en la li brería work se hallan
numeric_std, std_arith y gatespkg.

Figura 2. 5 Contenido de las librerías ieee y work.


VHDL: su organización y arquitectura 45

En una librería también se permite almacenar el resultado de la compi


lación de un diseño, con el fin de utilizar en uno o varios programas. La li brería
work es el lugar establecido donde se almacenan los programas que el usuario
va generando. Esta librería se encuentra siempre presente en la compilación de
un diseño y los diseños se guardan en ella mientras no se especifique otra. La
carpeta otra mostrada en la figura 2.5 representa esta situación.
Un paquete es una unidad de diseño que permite desarrollar un pro
grama en VHDL de una manera ágil, debido a que contiene algoritmos
preestablecidos (sumadores, restadores, contadores, etc.) que ya tienen
optimizado su comportamiento. Por esta razón, el diseñador no necesita
caracterizar paso a paso una nueva unidad de diseño si ya se encuentra al
macenada en algún paquete —en cuyo caso basta con llamarla y especifi carla en
el programa—. Por lo tanto, un paquete no es más que una unidad de diseño
formada por declaraciones, programas, componentes y subprogra mas, que
incluyen los diversos tipos de datos (bit, booleano, std_logic), em pleados en la
programación en VHDL y que suelen formar parte de las herramientas en
software.
Por último, cuando en el diseño se utiliza algún paquete es necesario lla mar
a la librería que lo contiene. Para esto se utiliza la siguiente declaración:

library ieee;

Lo anterior permite el uso de todos los componentes incluidos en la li brería


ieee. En el caso de la librería de trabajo (work), su uso no requiere la
declaración library, dado que la carpeta work siempre está presente al desa
rrollar un diseño.

2.4.2 Paquetes

• El paquete std_logic_1164 (estándar lógico_1164) que se encuentra en la


librería ieee contiene todos los tipos de datos que suelen em
plearse en VHDL (std_logic_vector, std_logic, entre otros).

El acceso a la información contenida en un paquete es por medio de la


sentencia use, seguida del nombre de la librería y del paquete, respectiva mente:

use nombre_librería.nombre_paquete.all;

por ejemplo:

use ieee.std_logic_1164.all;
VHDL: El arte de programar sistemas digitales
46

En este caso ieee es la librería, std_logic_l 164 es el paquete y la palabra


reservada all indica que se pueden usar todos los componentes almacenados en
el paquete.

• El paquete numeric_std define funciones para realizar operaciones entre


diferentes tipos de datos (sobrecargado); además, los tipos pue
den representarse con signo o sin éste (vea el Apéndice A).
• El paquete numeric_bit define tipos de datos binarios con signo o sin éste.
• El paquete std_arith define funciones y operadores aritméticos, como igual
(=), mayor que (>), menor que (<), entre otros (vea el Apén
dice A).

En lo sucesivo, se usarán a menudo las librerías y paquetes de los progra


mas desarrollados en el texto.

Ejemplo 2.4 En la figura E2.4 se muestra el bloque representativo de un circuito multipli cador de 2
bits. La multiplicación de (XI, XO) y (Y1,Y0) producen la salida Z3, Z2, Zl, ZO.
Declare la entidad del circuito utilizando la librería ieee y el paquete std-
_logic_1164.all.

Figura E2. 4

ZO Solución
Z1
XO X1

Z2 YO Y1
Z3

1 library ieee;
2 use ieee.std_logic_1164.all;
3 entity multiplica is
4 port (X0,X1,YO,Yl: in std_logic;
6 Z3,Z2,Z1,Z0: out std_logici
7 end multiplica;

2.5 Arquitecturas
Una arquitectura (architecture) se define como la estructura que describe el
funcionamiento de una entidad, de tal forma que permita el desarrollo de los
procedimientos que se llevarán a cabo con el fin de que la entidad cumpla las
condiciones de funcionamiento deseadas.
VHDL: su organización y arquitectura
47

La gran ventaja que presenta VHDL para definir una arquitectura radi
ca en la manera en que pueden describirse los diseños; es decir, mediante el
algoritmo de programación empleado se puede describir desde el nivel de
compuertas hasta sistemas complejos.
De manera general, los estilos de programación utilizados en el diseño de
arquitecturas se clasifican como:

• Estilo funcional
• Estilo por flujo de datos
• Estilo estructural

El nombre asignado a estos estilos no es importante, ya que es tarea del


diseñador escribir el comportamiento de un circuito utilizando uno u otro es tilo
que a su juicio le sea el más acertado.

2.5.1 Descripción funcional

En la figura 2.6 se describe funcionalmente el circuito comparador. Se trata de


una descripción funcional porque expone la forma en que trabaja el sistema; es
decir, las descripciones consideran la relación que hay entre las entradas y las
salidas del circuito, sin importar cómo esté organizado en su interior. Para este
caso:

Figura 2.6 Descripción funcional de un comparador de igualdad de dos bits.

El código que representa el circuito de la figura 2.6 se muestra en el listado


2.2:
48 VHDL: El arte de programar sistemas digitales

1 -- Ejemplo de una descripción funcional


2 library ieee;
3 use ieee.std_logic_1164.all;
4 entity comp is
5 port (a,b: in bit_vector( 1 downto 0);
6 c: out bit);
7 end comp;
8 architecture funcional of comp is
9 begin
10 compara: process (a,b)
11 begin
12 if a = b then
13 c <='1';
14 else
15 c<='0';
16 end if;
17 end process compara;
18 end funcional;

Listado 2.2 Arquitectura funcional de un comparador de igualdad de 2 bits.

Nótese cómo la declaración de la entidad (entity) se describe en las líneas de la 1 a


la 7; el código ocupa de la línea 8 a la 18, donde se desarrolla el al goritmo
(architecture) que describe el funcionamiento del comparador. Para iniciar la
declaración de la arquitectura (línea 8), es necesario definir un nom bre arbitrario
con que se pueda identificar —en nuestro caso el nombre asig nado fue funcional—
además de incluir la entidad con que se relaciona (comp). En la línea 9 se puede
observar el inicio (begin) de la sección donde se comienzan a declarar los procesos
que rigen el comportamiento del sistema. La declaración del proceso (línea 10) se
utiliza para la definición de algoritmos y comienza con una etiqueta opcional (en
este caso compara), seguida de dos puntos (:), la palabra reservada process y une la
lista sensitiva (a y b), que ha ce referencia a las señales que determinan el
funcionamiento del proceso.
Al seguir el análisis, puede notarse que de la línea 12 a la 17 el proceso se
ejecuta mediante declaraciones secuenciales del tipo if-then'else (si-en tonces-si no).
Esto se interpreta como sigue (línea 12): si el valor de la señal a es igual al valor de
la señal b, entonces '1' se asigna a c, si no (else)se asig na un '0' (el símbolo < = se lee
como "se asigna a"). Una vez que se ha de finido el proceso, se termina con la
palabra reservada end process y de ma nera opcional el nombre del proceso
(compara); de forma similar se añade la etiqueta (funcional) al terminar la
arquitectura en la línea 18.
VHDL: su organización y arquitectura 49

Como se puede observar, la descripción funcional se basa principalmen te en


el uso de procesos y de declaraciones secuenciales, las cuales permiten modelar
la función con rapidez.

Ejemplo 2.5 Describa mediante declaraciones del tipo if-then-else el funcionamiento de la compuerta
OR mostrada en la figura E2.5 con base en la tabla de verdad.
f[
0 Solución
1 ab 00 01 1o 11
1
1

Figura E2.5

Como puede observarse, la declaración de la librería y el paquete se introdu cen


en las líneas 2 y 3, respectivamente. La declaración de la entidad se de fine entre
las líneas 4 a 7 inclusive. Por último, la arquitectura se describe en las líneas 8 a
17.

1 -- Declaración funcional
2 library ieee;
3 use ieee.std_logic_1164.all ;
4 entity com_or is
5 port( a,b: in std_logic;
6 fl: out std_logic);
7 end com_or;
8 architecture funcional of com_or is
9 begin
10 process (a,b) begin
11 if (a = '0' and b = '0') then
12 fl <= '0 ' ;
13 else
14 fl <= ' 1' ;
15 end i f;
16 end process;
17 end funcional;

2.5.2 Descripción por flujo de datos

La descripción por flujo datos indica la forma en que los datos se pueden
transferir de una señal a otra sin necesidad de declaraciones secuenciales
50 VHDL: El arte de programar sistemas digitales

(if-then-else). Este tipo de descripciones permite definir el flujo que tomarán los
datos entre módulos encargados de realizar operaciones. En este tipo de
descripción se pueden utilizar dos formatos: mediante instrucciones when else
(cuando-si no) o por medio de ecuaciones booleanas.

a) Descripción por flujo de datos mediante when-else

A continuación se muestra el código del comparador de igualdad de dos bits


descrito antes (Fig. 2.6) Nótese que la diferencia entre los listados 2.2 y 2.3 radica
en la eliminación del proceso y en la descripción sin declara ciones secuenciales
(if-then-else).

1 --Ejemplo de declaración de la entidad de un comparador


2 library ieee;
3 use ieee.std_logic_1164.all ;
4 entity comp is
5 port (a,b: in bit_vector (1 downto 0);
6 c: out bit);
end comp;
7
8 architecture f_datos of comp is
9 begin
10 c <= '1' when (a = b) else '0'; (asigna a C el valor
11 de 1 cuando a=b si no vale 0).
12 end f_datos;

Listado 2.3 Arquitectura por flujo de datos.

En VHDL se manejan dos tipos de declaraciones: secuenciales y concu


rrentes. Una declaración secuencial de la forma if-then-else se halla en el lis tado
2.2 dentro del proceso, donde su ejecución debe seguir un orden para evitar la
pérdida de la lógica descrita. En cambio, en una declaración concu rrente esto no
es necesario, ya que no importa el orden en que se ejecutan. Tal es el caso del
listado 2.3.

Ejemplo 2.6 Con base en la tabla de verdad y mediante la declaración when-else, descri ba el
funcionamiento de la siguiente compuerta AND.

a b fl
000
01o
1oo
111

Figura E2. 6
VHDL: su organización y arquitectura 51

Solución

1 --Algoritmo utilizando flujo de datos


2 library ieee;
3 use ieee.std_logic_1164.all;
4 entity com_and is
5 port( a,b: in std_logic;
6 f: out std_logic);
7 end com_and;
8 architecture compuerta of com_and is
9 begin
10 f <= '1' when (a - '1' and b = '1' ) else 11 '0' ;
12 end compuerta;

b) Descripción por flujo de datos mediante ecuaciones booleanas

Otra forma de describir el circuito comparador de dos bits es mediante la ob


tención de sus ecuaciones booleanas figura 2.7. En el listado 2.4 se observa este
desarrollo.

b)

Figura 2.7 a) Entidad del comparador de dos bits, b) Comparador de dos bits realizado con
compuertas.

El interior del circuito comparador de la figura 2.7a) puede representar se


por medio de compuertas básicas [Fig. 2.7b)] y este circuito puede descri birse
mediante la obtención de sus ecuaciones booleanas.
52 VHDL: El arte de programar sistemas digitales
1 -- Ejemplo de declaración de la entidad de un comparador
2 library ieee;
3 use ieee.std_logic_1164.all;
4 entity comp is
5 port ( a,b: in bit_vector (1 downto 0) ;
6 c: out bit) ;
7 end comp;
8 architecture booleana of comp is
9 begin
10 c <= (a(1) xnor b(l)
11 and a(0) xnor b(0)) ;
12 end booleana;

Listado 2.4 Arquitectura de forma de flujo de datos construido por medio de


ecuaciones booleanas.

La forma de flujo de datos en cualquiera de sus representaciones descri


be el camino que los datos siguen al ser transferidos de las operaciones efec tuadas
entre las entradas a y b a la señal de salida c.

Ejemplo 2,7 Describa mediante ecuaciones booleanas el circuito mostrado a continuación.

Figura E2.7

Solución

--Declaración mediante ecuaciones boolenas


library ieee;
use ieee.std_logic_1164.all;
entity ejemplo is
port ( a,b,c,d: in std_logic;
f: out std_logic);
end ejemplo;
architecture compuertas of ejemplo is
begin
f <= ((a or b) xnor (c and b) ) ;
end compuertas;
VHDL: su organización y arquitectura 53

2.5.3 Descripción estructural

Como su nombre indica, una descripción estructural basa su comportamien to en


modelos lógicos establecidos (compuertas, sumadores, contadores, etc.). Según
veremos más adelante, el usuario puede diseñar estas estructuras y guardarlas
para su uso posterior o tomarlas de los paquetes contenidos en las librerías de
diseño del software que se esté utilizando.
En la figura 2.8 se encuentra un esquema del circuito comparador de igual
dad de 2 bits, el cual está formado por compuertas ñor-exclusivas y una com
puerta AND.

Figura 2.8 Representación esquemática de un comparador de 2 bits.

En nuestro caso, cada compuerta (modelo lógico) se encuentra dentro del


paquete gatespkg,6 del cual se toman para estructurar el diseño. A su vez, este
tipo de arquitecturas estándares se conoce como componentes, que al
interconectarse por medio de señales internas (xO, xl) permiten proponer una
solución. En VHDL esta conectividad se conoce como netlist7 o listado de
componentes.
Para iniciar la programación de una entidad de manera estructural, es
necesario la descomposición lógica del diseño en pequeños submódulos (je
rarquizar), los cuales permiten analizar de manera práctica el circuito, ya que la
función de entrada/salida es conocida. En nuestro ejemplo se conoce la función
de salida de las dos compuertas xnor, por lo que al unirlas a la com puerta and, la
salida c es el resultado de la operación and efectuada en el in terior a través de las
señales xO y xl (Fig. 2.8).
Es importante resaltar que una jerarquía en VHDL se refiere al procedi miento de
dividir en bloques y no a que un bloque tenga mayor jerarquía (peso) que otro.
Esta forma de dividir el problema hace de la descripción estructural una forma
sencilla de programar. En el contexto del diseño lógico esto es obser vable
cuando se analiza por separado alguna sección de un sistema integral.

6
El paquete compuerta fue programado para este ejemplo. En el capítulo 8 se verá a detalle su desarrollo. 7 Un
netlist se refiere a la forma en como se encuentran conectados los componentes dentro de una estruc tura y las
señales que propicia esta interconexión.
54 VHDL: El arte de programar sistemas digitales

En el listado 2.5 se muestra el código del programa que representa al es


quema de la figura 2.8.

1 library ieee;
2 use ieee.std_logic_1164.all;
3 entity comp is port (
4 a,b: in bit_vector (0 to 1);
5 c: out bit);
6 end comp;
7 use [Link] ;
8 architecture estructural of comp is
9 signal x: bit_vector (0 to 1);
10 begin
11 U0: xnor2 port map (a(0), b ( 0 ) , x ( 0 )
12 Ul: xnor2 port map (a(l), b ( 1 ) , x (1)
13 U2 : and2 port map (x ( 0 ) , x(l) , c) ;

14 end estructural;

Listado 2.5 Descripción estructural de un comparador de igualdad de 2 bits.

En el código se puede ver que en la entidad nada más se describen las en


tradas y salidas del circuito (a, b y c), según se ha venido haciendo (líneas 3 a la 6).
Los componentes xnor y and no se declaran debido a que se encuen tran en el
paquete de compuertas (gatespkg), el cual a su vez está dentro de la librería de
trabajo (work), línea 7.
En la línea 8 se inicia la declaración de la arquitectura estructural. El
algoritmo propuesto (líneas 11 a 13) describe la estructura de la siguiente forma:
cada compuerta se maneja como un bloque lógico independiente (componente) del
diseño original, al cual se le asigna una variable tempo ral (U0, U1 y U2); la salida
de cada uno de estos bloques se maneja como una señal línea 9, signal x (xO y xl),
las cuales se declaran dentro de la arquitectura y no en la entidad, debido a que no
representan a una termi nal (pin) y sólo se utilizan para conectar bloques de manera
interna a la entidad.
Por último, podemos observar que la compuerta and recibe las dos se
ñales provenientes de x (xO y xl), ejecuta la operación y asigna el resultado a la
salida c del circuito.
VHDL: su organización y arquitectura 55

Ejemplo 2.8 Realice el programa correspondiente en VHDL para el circuito mostrado en la figura
E2.8. Utilice descripción estructural.

Figura E2.8

Solución

1 library ieee;
2 use ieee.std_logic_1164.all;
3 entity comp is
4 port( A,B,C : in std_logic;
5 F: out std_logic);
6 end comp;
7 use [Link];
8 architecture estructura of comp is
9 signal x: bit_vector (0 to 2);
10 begin
11 U0: and2 port map (B, C, x(0));
12 Ul: and2 port map (C, A, x(l));
13 U2: and2 port map (A, B, x(2));
14 U3: or3 port map (x(0), x(l), x(2), F);
15 end estructura;

Comparación entre los estilos de diseño

El estilo de diseño utilizado en la programación del circuito depende del dise


ñador y de la complejidad del proyecto. Por ejemplo, un diseño puede descri
birse por medio de ecuaciones booleanas, pero si es muy extenso quizá sea más
apropiado emplear estructuras jerárquicas para dividirlo; ahora bien, si se re
quiere diseñar un sistema cuyo funcionamiento dependa sólo de sus entradas y
salidas, es conveniente utilizar la descripción funcional, la cual presenta la
ventaja de requerir menos instrucciones y el diseñador no necesita un cono
cimiento previo de cada componente del circuito.
56 VHDL: El arte de programar sistemas digitales

Ejercicios

Unidades básicas de diseño

2.1 Describa los cinco tipos de unidades de diseño en VHDL.


2.2 Determine cuáles son las unidades de diseño necesarias para realizar un
programa en VHDL.
2.3 Mencione las unidades de diseño primarias y secundarias.

Declaración de entidades

2.4 Describa el significado de una entidad y cuál es su palabra reservada. 2.5 En la


siguiente declaración de entidad indique:

library ieee;
use ieee.std_logic_l [Link];
entity selección is port (
x: in std_logic_vector(0 to 3);
f: out std_logic);
end selección;

a) El nombre de la entidad
b) Los puertos de entrada
c) Los puertos de salida
d) El tipo de dato

2.6 Señale cuáles de los siguientes identificadores son correctos o inco rrectos,
colocando en las líneas de respuesta la letra 'C' o T, respec
tivamente.

Ilógico Desp_laza
con_trol N_ivel
Página architecture
Registro S_uma#
2Suma Res ta
2.7 Declare la entidad para la compuerta AND del ejercicio 2.7:

BC
VHDL: su organización y arquitectura 57

2.8 Declare la entidad para el siguiente circuito.

Demo

2.9 Declare la entidad para el circuito que se muestra en la figura. Uti lice
vectores.

C[2:0]

2.10 Declare la entidad para el siguiente circuito que utiliza vectores.

=>C[0:3]

2.11 Describa qué es una librería en VHDL.

2.12 Indique el significado de la siguiente expresión:


use ieee.std_logic_1164.all;

2.13 Declare la entidad del circuito multiplexor de 4:1 mostrado en la fi gura


del ejercicio 2.11 utilizando la librería: ieee.std_logic_l [Link];

EO
E1
E2
E3

SO S1

2.14 Declare la entidad del multiplexor de 4:1 mostrado en la figura del


ejercicio 2.11, si cada entrada esta formada por un vector de 4 bits.

2.15 Declare la entidad del multiplicador mostrado en el ejercicio 2.2


utilizando vectores y el paquete std_logic_l 164.
58 VHDL: El arte de programar sistemas digitales

Arquitecturas

2.16 Mediante un estilo funcional, programe en VHDL el funcionamiento de una


lámpara para código Morse que encienda la luz al presionar un
botón y la apague al soltarlo.

2.17 Con un estilo funcional, programe en VHDL el funcionamiento del motor de un


ventilador en que el motor gire en un sentido al presionar
el botón 'a' y en dirección contraria al oprimir el botón 'b\

2.18 Con un estilo por flujo de datos, programe en VHDL el funcionamiento de un


panel en una fábrica de empaquetamiento de arroz. Este panel
muestra el contenido de 2 silos (a, b) que tiene la fábrica para guardar
el arroz; un sensor detecta cuán llenos están, cuando se encuentran al
100% de su capacidad, envía un '1 lógico', y cuando tienen 25% o me
nos envía un '0 lógico'; si en uno de estos silos disminuye el contenido a
25% o menos, se prende una luz (c), si los dos sobrepasan ese límite se
enciende otra luz (d) y suena una alarma (e).

2.19 Mediante el estilo de programación por flujo de datos, programe en VHDL el


funcionamiento de un robot en una planta que espera a que
se llene una tarima con cuatro cajas antes de llevarla a la bodega de al
macenamiento; para saber si la tarima está llena cuenta con cuatro
sensores, cada uno apunta a sendas cajas; si hay una caja marca un
'1 lógico'; si falta, marca un '0 lógico'. Si falta alguna caja el robot no
se puede ir, cuando están las cuatro cajas el robot se lleva la tarima.
2.20 Con el estilo de programación por flujo de datos, programe en VHDL el
funcionamiento de una caja de seguridad cuya apertura requiere la
presión simultánea de tres de cuatro botones ('a', 'b\ 'c' y 'd'). Los bo
tones que se deben oprimir son: 'a', 'c' y 'd'.

2.21 Mediante el estilo de programación estructural, programe en VHDL el


problema del apagador de escalera. La función para este problema es
c — a b + ab, donde a es el interruptor inferior, b es el interruptor su
perior y c es el foco.

2.22 Con un estilo estructural, programe en VHDL el funcionamiento de un motor


que se enciende con la siguiente ecuación:

y = a b + c b + ac .
VHDL: su organización y arquitectura 59

Bibliografía

Bergé J. M., Fonkua A., Maginot S.: VHDL Designer's Reference. Kluwer Aca
demic Publisher, 1992.
Teres Ll., Torroja Y., Olcoz S., Villar E.: VHDL Lenguaje Estándar de Diseño
Electrónico. McGraw-Hill, 1998.
Skahill K.: VHDL for programmable logic. Addison Wesley, 1996.
Mazor S., Laangstraar P: A Guide to VHDL. Kluwer Academic Publisher, 1993.
Maxinez G. David, Alcalá Jessica: Diseño de Sistemas Embebidos a través del
Lenguaje de Descripción en Hardware VHDL. XIX Congreso Internacio
nal Académico de Ingeniería Electrónica. México, 1997.
Kloos C., Cerny E.: Hardware Description Language and their aplications. Spe
cification, modelling, verification and synthesis of microelectronic systems.
Chapman & Hall, 1997.
IEEE: The IEEE standard VHDL Language Reference Manual. IEEE-Std-1076- 1987,
1988.
Zainalabedin Navabi: Analysis and Modeling of Digital Systems. McGraw-Hill,
1988.

Otras lecturas sobre el tema


Armstrong James R., Gray F. G.: Structured Logic Desing with VHDL. Prentice
Hall, 1993.
Capítulo
combinacional
mediante
3
Diseño lógico
VHDL
Introducción

En este capítulo se diseñan los circuitos combinacionales más utilizados en el


diseño lógico a través del lenguaje de descripción en hardware. Esto permite
introducir nuevos conceptos, palabras reservadas, reglas, algoritmos, etc., que
muestran la potencia y profundidad del lenguaje VHDL.
El desarrollo de cada una de las entidades de diseño descritas en este ca
pítulo se puede optimizar mediante el uso adecuado de las declaraciones se
cuenciales, concurrentes o ambas, utilizando en esta descripción cualquiera de
los tres tipos de arquitectura —funcional, por flujo de datos y estructu ral— vistos
en el capítulo anterior. Sin embargo y dada la filosofía que que remos manejar en
este texto, nos parece conveniente presentar soluciones que incluyan nuevas
declaraciones, nuevos tipos de datos y nuevos algorit mos de análisis; es decir, no
se pretende presentar la mejor opción de diseño para un problema; por el
contrario, se propone brindar la mayor cantidad de soluciones (modelos) que le
permitan deducir y construir sus estrategias de diseño para optimizar sus
resultados.

3.1 Programación de estructuras básicas mediante declaraciones


concurrentes
Como se mencionó antes, las declaraciones concurrentes se encuentran fue ra de
la declaración de un proceso y suelen usarse en las descripciones de flu jo de
datos y estructural. Esto se debe a que en una declaración concurrente no
importa el orden en que se escriban las señales, ya que el resultado para
determinada función sería el mismo.
62 VHDL: El arte de programar sistemas digitales
En VHDL existen tres tipos de declaraciones concurrentes:

• Declaraciones condicionales asignadas a una señal (when-else)


• Declaraciones concurrentes asignadas a señales
• Selección de una señal (with-select-when)

3.1.1 Declaraciones condicionales asignadas a una señal (when'else)

La declaración when'else se utiliza para asignar valores a una señal, determi


nando así la ejecución de una condición propia del diseño. Para ejemplificar,
consideremos la entidad mostrada en la figura 3.1, cuyo funcionamiento se
define en la tabla de verdad.

abc f

000 1
001 0
010 0
011 1
100 0
101 0
110 1
111 1

Figura 3.1 Declaraciones when-else.

La entidad se puede programar mediante declaraciones condicionales


(when-else), debido a que este modelo permite definir paso a paso el com
portamiento del sistema, según se muestra en el listado 3.1.

1 — Ejemplo combinacional básico


2 library ieee;
3 use ieee.std_logic_1164.all ;
4 entity tabla is port(
5 a,b,c: in std_logic;
6 f: out std_logic);
7 end tabla;
8 architecture ejemplo of tabla is
9 begin
10 £ <= '1' when (a= '0' and b= '0' and c= '0' ) else
11 '1' when (a= '0' and b= •V and c= '1' ) else
12 •V when (a= '1' and b= '1' and c= '0' ) else
13 '1' when (a= '1' and b= '1' and c= '1' ) else
14 '0';
15 end ejemplo;
Diseño lógico combinacional mediante VHDL 63

Nótese que la función de salida f (línea 10) depende directamente de las


condiciones que presentan las variables de entrada, además y dado que la
ejecución inicial de una u otra condición no afecta la lógica del programa, el
resultado es el mismo; es decir, la condición de entrada "111", visualizada en la
tabla de verdad, puede ejecutarse antes que la condición "000" sin alterar el
resultado final.
La ventaja de la programación en VHDL en comparación con el diseño
lógico puede intuirse considerando que la función de salida f mediante álge bra
booleana se representa con:

f=abc + abc + abc + abc

en el diseño convencional se utilizarían inversores, compuertas OR y com


puertas AND; en VHDL la solución es directa utilizando la función lógica and.
Como ejemplo, observemos que de la línea 10 a la 14 las instrucciones se
interpretarían de la siguiente manera:

a=0
10 asigna a el valor de 1 cuando y b = 0 ye = 0 si no 11 asigna a
«£>1 =0 i U£J1
el valor de 1 cuando a y b = y c = 1 si no 12 asigna a el
=1 «£»
valor de 1 cuando a y b - i ye - 0 si no 13 asigna a el valor de 1
a=0
cuando y b = i ye = 1 si no 14 asigna a U£»> el valor de 0.

Operadores lógicos
Los operadores lógicos más utilizados en la descripción de funciones boolea
nas, y definidos en los diferentes tipos de datos bit, son los operadores and,
or, nand, xor, xnor y not. Las operaciones que se efectúen en tre
ellos (excepto not) deben realizarse con datos que tengan la misma lon gitud o
palabra de bits.
En el momento de ser compilados los operadores lógicos presentan el si
guiente orden y prioridad:

1) Expresiones entre paréntesis


2) Complementos
3) Función AND
4) Función OR

Las operaciones xor y xnor son transparentes al compilador y las in


terpreta mediante la suma de productos correspondiente a su función. Como
ejemplo del uso de operadores lógicos en VHDL, observemos la si guiente
comparación:
64 VHDL: El arte de programar sistemas digitales

Ecuació n E n VHD L

q = a + x • y q = a or (x and y)

y = a + b*c + d y = not (a or (b and not c) or d)

Ejemplo 3.1 Una función F depende de cuatro variables D, C, B, A, que representan un


número binario, donde A es la variable menos significativa. La función F adopta el valor de
uno si el número formado por las cuatro variables es infe rior o igual a 7 y superior a 3. En
caso contrario la función F es cero.

• Obtenga la tabla de verdad de la función F y realice el programa corres pondiente en


VHDL (utilice estructuras del tipo when-else y operadores lógicos).

Solución

Primero analizamos el enunciado y estructuramos la siguiente tabla de ver dad según las
especificaciones indicadas.

Dc BAF

00000
00010
00100
00110
01001
01011
01101
01111
10000
10010
10100
10110
11000
11010
11100
11110

A partir de la tabla anterior, se puede programar la función F utilizando de claraciones


condicionales when-else. El código VHDL es el siguiente:
Diseño lógico combinacional mediante VHDL
65

1 library ieee;
2 vise ieee. std_logic_1164. all ;
3 entity función is port (
4 D,C,B,A: in std_logic;
5 F: out std_logic);
6 end función;
7 architecture a_func of función is
8 begin
9 F <= '1' when (A = '0' and B = '0' and C = •1' and D = '0' )
else 10 '1' when (A = '1' and B = '0' and C = •1' and D = '0'
) else 11 '1' when (A = '0' and B = '1' and c = •V and D =
'0' ) else 12 '1' when (A = •V and B = '1' and c = •1' and D =
'0') else 13 '0';
14 end a_func;

3.1.2 Declaraciones concurrentes asignadas a señales

En este tipo de declaración encontraremos las funciones de salida mediante la


ecuación booleana que describe el comportamiento de cada una de las
compuertas. Obsérvese que ahora el circuito de la figura 3.2 cuenta con tres
salidas (xl, x2 y x3) en lugar de una.

Figura 3.2 Circuito lógico realizado con compuertas.

El programa correspondiente al circuito de la figura 3.2 se muestra en el lis tado


3.2.

library ieee;
use ieee.std_logic_1164.all;
entity logic is port (
a,b,c,d,e,f: in std_logic;
xl,x2,x3: out std_logic) ;
end logic;
architecture booleana of logic is
begin
xl <= a xnor b;
x2 <= ( ( (c and d)or(a xnor b) ) nand
( (e xor f)and(c and d) ) ) ;
x3 <= (e xnor f) and (c and d) ;
end booleana;

Listado 3.1 Declaraciones concurrentes asignadas a señales.


VHDL: El arte de programar sistemas digitales
66

Ejemplo 3.2 Dada la tabla de verdad mostrada a continuación, halle las ecuaciones X, Y, Z, de la forma
suma de productos y prográmelas en VHDL, utilizando decla raciones concurrentes asignadas a
señales.

ABCXYz

000101
001110
010001
011101
100000
101010
110010
111100

Solución

Las ecuaciones de la forma suma de productos para X, Y y Z se muestran a


continuación:

1) X = ABC + ÁBC + ÀBC + ABC


2) Y = ÁBC + ABC + ABC
3) Z = ÁBC + ABC + ÁBC

Obsérvese ahora la forma de implementar estas ecuaciones por medio de


operadores lógicos.

1 library ieee;
2 use ieee.std_logic_1164.all ;
3 entity concurrente is port (
4 A,B,C: in std_logic;
5 X,Y,Z: out std_logic);
6 end concurrente;
7 architecture a_conc of concurrente is
8 begin
9 X <= (not A and not B and not C) or (not A and not B and
C) 10 or (not a and B and C ) or (A and B and C) ;
11 Y <= (not A and not B and C) or (A and not B and C)
12 or (A and B and not C) ;
13 Z <= (not A and not B and not C) car (not A and B and
not C) 14 or (not A and B and C) ;
15 end a_conc;
Diseño lógico combinacional mediante VHDL 67

3.1.3 Selección de una señal (with*select>when)

La declaración with'Select-whe n se utiliza para asignar un valor a una señal con base
en el valor de otra señal previamente seleccionada. Por ejemplo, en el listado
correspondiente a la figura 3.3 se muestra el código que representa a este tipo de
declaración. Como puede observarse, el valor de la salida C de
pende de las señales de entrada seleccionadas a(0) y a(l), de acuerdo con la tabla
de verdad correspondiente.

a(0 ) a(l ) c

001

010
101
110

Figura 3.3 Tabla de verdad.

library ieee;
use ieee.std_logic_l164.all;
entity circuito is port(
a: in std_logic_vector (1 downto 0) ;
c: out std_logic);
end circuito;
architecture arq_cir of circuito is
begin
with a select
c <= '1' when "00",
'0' when "01",
'1' when "10",
'0' when others1;
end arq_cir;

Listado 3.3 Código VHDL correspondiente a la tabla de verdad de la figura 3.3.

Ejemplo 3.3 Se requiere diseñar un circuito combinacional que detecte números primos de 4 bits.
Realice la tabla de verdad v elabore un programa que describa su función. Utilice
instrucciones del tipo with - select - when.

1
El uso de la palabra reservada others se explica a detalle en la sección multiplexores de este capítulo.
VHDL: El arte de programar sistemas digitales
68

Solución

La tabla de verdad que resuelve la función es la siguiente:

XO XI X2 X3 F
00000
00011
00101
00111
01000
01011
01100
01111
10000
10010
10100
10111
11000
11011
11100
11110

Si se considera que la entrada X es un vector de 4 bits y que F es la


función de salida, el programa en VHDL quedaría de la siguiente manera.

1 library ieee;
2 use ieee.std_logic_1164.all;
3 entity selección is port (
4 X: in std_logic_vector(0 to 3);
5 F: out std_logic) ;
6 end selección;
7 architecture a_selec of selección is
8 begin
9 with X select
10 F <= '1' when "0001",
11 '1' when "0010",
12 '1' when "0011",
13 '1' when "0101",
14 '1' when "0111",
15 '1' when "1011",
16 '1' when "1101",
17 '0 ' when others;
18 end a_selec;
Diseño lógico combinacional mediante VHDL 69

3.2 Programación de estructuras básicas mediante declaraciones secuenciales

Como ya se mencionó, las declaraciones secuenciales son aquellas en las que el


orden que llevan puede tener un efecto significativo en la lógica descrita. A
diferencia de una declaración concurrente, una secuencial debe ejecutar se en el
orden en que aparece y formar parte de un proceso (process).

Declaración if-then-else (si-entonces-si no). Esta declaración sirve para


seleccionar una condición o condiciones basadas en el resultado de
evaluaciones lógicas (falso o verdadero). Por ejemplo, observemos que en la
instrucción:

if la condición es cierta then


realiza la operación 1;
else
realiza la operación 2;
end if;

si (if) condición se evalúa como verdadera, entonces (then) la instrucción indica


que se ejecutará la operación 1. Por el contrario, si la condición se evalúa como
falsa (else) correrá la operación 2. La instrucción que indica el fin de la
declaración es end if (fin del si). Un ejemplo que ilustra este tipo de declaración
se encuentra en la figura 2.6 y por comodidad se repite en la figura 3.4.
Figura 3.4 Comparador de igualdad de dos bits.

El código correspondiente a esta entidad de diseño se muestra en el listado


3.4.
VHDL: El arte de programar sistemas digitales
70

1 —Ejemplo de declaración de la entidad comparador


2 end comp ;
3 architecture
4 funcional of comp is
5 begin
6 compara: process
7 (a,b)
8 begin
9 if a = b then
10 c <='1';
11 else
12 c <= ' 0' ;
13 14 15 16 end if;
entity comp is end process compara
port (a,b: in ;
bit_vector( 1 downto end funcional;
0); c: out bit) ;

Listado 3.4 Declaración secuencial de un comparador de igualdad de dos bits.

Notemos cómo en este tipo de ejemplos sólo son necesarias dos condi ciones
por evaluar, pero no en todos los diseños es así. Por tanto, cuando se requieren
más condiciones de control, se utiliza una nueva estructura llama da elsif (si no-si),
la cual permite expandir y especificar prioridades dentro del proceso. La sintaxis
para esta operación es:

if la condición 1 se cumple then


realiza operación 1;
elsif la condición 2 se cumple then
realiza operación 2:
else
realiza operación 3;
end if;

la cual se interpreta como sigue: Si (if) la condición 1 es verdadera, entonces (then)


se ejecuta la operación l, si no-si (elsif) se evalúa la condición 2 y si es verdadera
entonces (then) se ejecuta la operación 2, si no (else) se ejecuta la operación 3.

3.2. 1 Comparador de magnitud de 4 bits

La forma de utilizar las declaraciones secuenciales se ilustra en el diseño de un


comparador de dos números de 4 bits, figura 3.5a). En este caso el siste ma tiene
tres salidas que indican cuando uno de los números es mayor, igual
Diseño lógico combinacional mediante VHDL 71

o menor que el otro. La figura 3.5b) representa el mismo comparador de ma nera


simplificada utilizando la notación vectorial.

Figura 3.5 a)
Comparador de 4 bits, b) Comparador expresado con vectores de 4 bits.

En el listado 3.5 se observa el algoritmo en VHDL que describe el fun


cionamiento del comparador. En la línea 9 se muestra la lista sensitiva (a y b) del
proceso (process). En las líneas 10 a 17 el proceso se desenvuelve mediante el
análisis de las variables de la lista sensitiva. Sin mucho esfuer zo puede verse que
si a = b, entonces x toma el valor de 1, de forma similar se intuye el
comportamiento para a > b y a < b, incluyendo la de claración elsif.

1 library ieee;
2 use ieee.std_logic_1164.all ;
3 entity comp4 is port (
4 a,b: in std_logic_vector(3 downto 0);
5 x,y,z: out std_logic);
6 end comp4;
7 architecture arq_comp4 of comp4 is
8 begin
9 process (a,b)
10 begin
11 if (a = b) then
12 x <= '1';
13 elsif (a > b) then
14 y <= '1';
15 else
16 z <= '1';
17 end if;
18 end process;
19 end arq_comp4 ;

Listado 3.5 Descripción del comparador de 4 bits utilizando el estilo funcional.

También podría gustarte