Sei sulla pagina 1di 30

Qué es un lenguaje de descripción de

hardware, una GAL y un FPGA.


INTRODUCCIÓN

Cuando uno como estudiante va a construir un sistema digital, debe tener conceptos
claros sobre lo que es un hardware, software y la relación que existe entre ellos.
Una buena forma de comprender las capacidades y limitaciones de un sistema
digital es diseñarlo, y hacer que ese diseño se haga realidad en un salón de clases
por medio de un prototipo como cuando es aplicado en los circuitos de compuertas
lógicas, lo cual hace el aprendizaje más atractivo en otras palabras, se vuelven más
interesantes e introducirse en el área de la electrónica. Para la realización de los
prototipos, se han considerado una herramienta las cuales son las herramientas de
diseño asistido por computador, que con el empleo de un lenguaje de descripción
de hardware (HDL) permiten el diseño, la validación y la implementación de un s
Investigar qué es un lenguaje de descripción de hardware, una GAL y un FPGA.
sistema digital.
ÍNDICE
Contenido
Investigar qué es un lenguaje de descripción de hardware, una GAL y un
FPGA. ................................................................... ¡Error! Marcador no definido.
INTRODUCCIÓN .................................................................................................... 1
ÍNDICE .................................................................................................................... 2
OBJETIVOS ............................................................................................................ 4
JUSTIFICACIÓN ..................................................................................................... 4
Lenguajes de Descripción de Hardware ............................................................. 5
VHDL ................................................................................................................... 5
Historia ............................................................................................................ 5
Ventajas del uso de VHDL para la descripción de hardware: ........................... 7
VHDL describe estructura y comportamiento .................................................... 7
Ejemplo básico de descripción VHDL ................................................................. 8
Elementos sintácticos del VHDL ........................................................................ 13
Operadores y expresiones ................................................................................. 14
Operadores varios ........................................................................................... 14
Operadores aritméticos................................................................................... 14
Operadores de desplazamiento ...................................................................... 15
Operadores relacionales ................................................................................. 15
Operadores lógicos ......................................................................................... 16
GAL ....................................................................................................................... 18
ESTRUCTURA .................................................................................................. 19
REFERENCIA ESTÁNDAR............................................................................... 20
CONSTRUCCIÓN ............................................................................................. 21
FUNCIONAMIENTO .......................................................................................... 24
FPGA .................................................................................................................... 25
Principales Características de un FPGA........................................................ 25
FPGA frente a ASIC ......................................................................................... 26
Programación................................................................................................... 26
Aplicaciones..................................................................................................... 27
CONCLUSIÓN ...................................................................................................... 29
REFERENCIAS BIBLIOGRAFICAS ..................................................................... 30

FIGURA 1 1.Esquema del ejemplo básico en VHDL. .............................................. 9


FIGURA 1 2.Estructura básica de un GAL ............................................................ 19
FIGURA 1 3.Ejemplo de una macrocelda para una GAL22V10 ............................ 20
FIGURA 1 4.Forma constructiva de GAL16V8 ...................................................... 21
FIGURA 1 5.Macrocelda lógica de salida (OMC) para GAL16V8 ......................... 22
FIGURA 1 6.Distribución de terminales de un GAL16V8 ...................................... 23
FIGURA 1 7.Configuración interna de la OLMC de un GAL16V8 ......................... 23
FIGURA 1 8.Estructura básica para dos variables de entrada y una salida .......... 24
FIGURA 1 9.Arreglo para dos variables de entrada y una salida X ....................... 24
FIGURA 1 10.Ejemplo de tarjeta de desarrollo que incorpora una FPGA ............. 28
OBJETIVOS

Obtener conocimientos más amplios de lo que es un lenguaje de descripción de


hardware

 Investigar que es un lenguaje de descripción de hardware


 Conocer los códigos que utiliza con frecuencia
 Estudiar las generalidades de un HDL
 Conocer sus diferentes aplicaciones

JUSTIFICACIÓN

Este camino introduce al estudiante en la línea de diseño de hardware, que puede


ser muy prioritaria en temas de proyectos de grado enfocados en estas nuevas
tecnologías, dando paso al desarrollo de trabajos de investigación a nivel de
postgrado. Básicamente prepararnos para profesionalizarnos en el área de
programación de hardware’s de digitales.
Lenguajes de Descripción de Hardware

Los lenguajes de descripción de hardware (HDLs) son utilizados para describir la


arquitectura y comportamiento de un sistema electrónico los cuales fueron
desarrollados para trabajar con diseños complejos. Comparando un HDL con los
lenguajes para el desarrollo de software vemos que en un lenguaje de este tipo un
programa que se encuentra en un lenguaje de alto nivel (VHDL) necesita ser
ensamblado a código máquina (compuertas y conexiones) para poder ser
interpretado por el procesador. De igual manera, el objetivo de un HDL es describir
un circuito mediante un conjunto de instrucciones de alto nivel de abstracción para
que el programa de síntesis genere (ensamble) un circuito que pueda ser
implementado físicamente.

VHDL
Historia
En los últimos diez años la industria electrónica ha tenido una gran evolución en el
desarrollo de sistemas digitales; desde computadoras personales, sistemas de
audio y vídeo hasta dispositivos de alta velocidad para las comunicaciones. Esto ha
sido posible gracias a la implementación de herramientas de diseño asistidos por
computadora, conocidas como herramientas CAD (Computer Aided Design),
aunque específicamente se hace uso de herramientas EDA (Electronic Design
Automation), que es el nombre que se le da a todas las herramientas CAD para el
diseño de sistemas electrónicos. Además de facilitar el trabajo, el uso de
herramientas EDA también aceleró los procesos de diseño. Esta situación condujo
a adoptar nuevas metodologías para el diseño y evaluación de los circuitos
electrónicos. El uso de las herramientas EDA junto con los dispositivos lógicos
programables, que pueden ser utilizados en diferentes aplicaciones e inclusive
reprogramados, cambió bastante el concepto de diseño de circuitos digitales.

VHDL es un lenguaje que se creó para el diseño, modelado y documentación de


circuitos complejos. Actualmente se le utiliza para la síntesis de circuitos digitales
utilizando dispositivos lógicos programables. Es así como los dispositivos lógicos
programables y VHDL, Very High Speed Integrated Circuit (VHSIC) Hardware
Description Language, constituyen los elementos fundamentales para estas nuevas
metodologías de diseño.

VHDL es un lenguaje con una sintaxis amplia y flexible que permite el modelado
estructural, en flujo de datos y de comportamiento hardware. VHDL permite el
modelado preciso, en distintos estilos, del comportamiento de un sistema digital
conocido y el desarrollo de modelos de simulación. Uno de los objetivos del lenguaje
VHDL es el modelado. Modelado es el desarrollo de un modelo para simulación de
un circuito o sistema previamente implementado cuyo comportamiento, por tanto,
se conoce. El objetivo del modelado es la simulación.

Otro de los usos de este lenguaje es la síntesis automática de circuitos. En el


proceso de síntesis, se parte de una especificación de entrada con un determinado
nivel de abstracción, y se llega a una implementación más detallada, menos
abstracta. Por tanto, la síntesis es una tarea vertical entre niveles de abstracción,
del nivel más alto en la jerarquía de diseño se va hacia el más bajo nivel de la
jerarquía.

El VHDL es un lenguaje que fue diseñado inicialmente para ser usado en el


modelado de sistemas digitales. Es por esta razón que su utilización en síntesis no
es inmediata, aunque lo cierto es que la sofisticación de las actuales herramientas
de síntesis es tal que permiten implementar diseños especificados en un alto nivel
de abstracción. La síntesis a partir de VHDL constituye hoy en día una de las
principales aplicaciones del lenguaje con una gran demanda de uso. Las
herramientas de síntesis basadas en el lenguaje permiten en la actualidad
ganancias importantes en la productividad de diseño.
Ventajas del uso de VHDL para la descripción de hardware:
 VHDL permite diseñar, modelar, y comprobar un sistema desde un alto nivel
de abstracción bajando hasta el nivel de definición estructural de compuertas.

 Circuitos descritos utilizando VHDL, siguiendo unas guías para síntesis,


pueden ser utilizados por herramientas de síntesis para crear
implementaciones de diseños a nivel de compuertas.

 Al estar basado en un estándar (IEEE Std 1076-1987) los ingenieros de toda


la industria de diseño pueden usar este lenguaje para minimizar errores de
comunicación y problemas de compatibilidad.

 VHDL permite diseño Top-Down, esto es, permite describir (modelado) el


comportamiento de los bloques de alto nivel, analizándolos (simulación), y
refinar la funcionalidad de alto nivel requerida antes de llegar a niveles más
bajos de abstracción de la implementación del diseño.

 Modularidad: VHDL permite dividir o descomponer un diseño hardware y su


descripción VHDL en unidades más pequeñas.

Un proyecto de VHDL puede contener muchos ficheros. El código VHDL usualmente


se encuentra en los ficheros con extensión *.vhd. La estructura típica de uno de
estos ficheros es:

 Llamadas a librerías.

 Entidad.

 Arquitectura(s).

VHDL describe estructura y comportamiento

Existen dos formas de describir un circuito; por un lado se puede describir un circuito
indicando los diferentes componentes que lo forman y su interconexión, de esta
manera tenemos especificado un circuito y sabemos cómo funciona; esta es la
forma habitual en que se han venido describiendo circuitos y las herramientas
utilizadas para ello han sido las de captura de esquemas y las descripciones netlist.

La segunda forma consiste en describir un circuito indicando lo que hace o como


funciona, es decir, describiendo su comportamiento. Naturalmente esta forma de
describir un circuito es mucho mejor para un diseñador puesto que lo que realmente
interesa es el funcionamiento del circuito más que sus componentes. Por otro lado,
al encontrarse lejos de lo que un circuito es realmente puede plantear algunos
problemas a la hora de realizar un circuito a partir de la descripción de su
comportamiento. El VHDL va a ser interesante ya que va a permitir los dos tipos de
descripciones:

 Estructura: VHDL puede ser usado como un lenguaje de Netlist normal y


corriente donde se especifican por un lado los componentes del sistema y
por otro sus interconexiones.

 Comportamiento: VHDL también se puede utilizar para la descripción


comportamental o funcional de un circuito. Esto es lo que lo distingue de un
lenguaje de Netlist. Sin necesidad de conocer la estructura interna de un
circuito es posible describirlo explicando su funcionalidad. Esto es
especialmente útil en simulación ya que permite simular un sistema sin
conocer su estructura interna, pero este tipo de descripción se está volviendo
cada día más importante porque las actuales herramientas de síntesis
permiten la creación automática de circuitos a partir de una descripción de su
funcionamiento.

Ejemplo básico de descripción VHDL

Ejemplo: Describir en VHDL un circuito que multiplexe dos líneas (a y b) de un bit,


a una sola línea (salida) también de un bit; la señal selec sirve para indicar que a la
salida se tiene la línea a (selec='0') o b (selec='1').

En la figura 1 se muestra el circuito implementado con compuertas lógicas que


realiza la función de multiplexación. Lo que se va a realizar a continuación es la
descripción comportamental del circuito de la figura 1, y luego se realizara la
descripción estructural para ver las diferencias. La sintaxis del VHDL no es sensible
a mayúsculas o minúsculas por lo que se puede escribir como se prefiera.

FIGURA 1 1.Esquema del ejemplo básico en VHDL.

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

-- Los comentarios empiezan por dos guiones


ENTITY mux IS
PORT (a: IN bit;
b: IN bit;
selec: IN bit;
salida: OUT bit);
END mux;

Esta porción del lenguaje indica que la entidad mux (que es el nombre que se le ha
dado al circuito) tiene tres entradas de tipo bit, y una salida también del tipo bit. Los
tipos de las entradas y salidas se verán más adelante. El tipo bit simplemente indica
una línea que puede tomar los valores '0' y '1'. La entidad de un circuito es única,
sin embargo, se mostró que un mismo símbolo, en este caso entidad, podrá tener
varias vistas o en el caso de VHDL arquitecturas. Cada bloque de arquitectura, que
es donde se describe el circuito, puede ser una representación diferente del mismo

ARCHITECTURE comportamental OF mux IS


BEGIN
PROCESS (a, b, selec)
BEGIN
IF (selec='0') THEN
salida<=a; ELSE salida<=b; END IF; END PROCESS; END comportamental;

circuito. Por ejemplo, puede haber una descripción estructural y otra


comportamental, ambas son descripciones diferentes, pero ambas descripciones
corresponden al mismo circuito, símbolo, o entidad. Veamos entonces la descripción
comportamental:
Más adelante se verá lo que hace un bloque PROCESS, de momento, y como
primera aproximación, se considerara que es una especie de subrutina cuyas
instrucciones se ejecutan secuencialmente cada vez que algunas de las señales de
la lista sensible cambia. Esta lista sensible es una lista de señales que se suele
poner junto a la palabra clave PROCESS, y en el caso del ejemplo es (a, b, selec).

Esta descripción comportamental es muy sencilla de entender ya que sigue una


estructura parecida a los lenguajes de programación convencionales. Lo que se está
indicando es simplemente que si la señal selec es cero, entonces la salida es la
entrada a, y si selec es uno, entonces la salida es la entrada b. Esta forma tan
sencilla de describir el circuito permite a ciertas herramientas sintetizar un circuito a
partir de una descripción comportamental como esta. La diferencia con un Netlist es
directa: en una descripción comportamental no se están indicando ni los
componentes ni sus interconexiones, sino simplemente lo que hace, es decir, su
comportamiento o funcionamiento. La descripción anterior era puramente
comportamental, de manera que con una secuencia sencilla de instrucciones
podamos definir el circuito. Naturalmente, a veces resulta más interesante describir
el circuito de forma que este más cercano a una posible realización física del mismo.

/----(1)----/
ARCHITECTURE transferencia OF mux IS
SIGNAL nosel,ax,bx:bit;
BEGIN
nosel<=NOT selec; ax<=a AND nosel; bx<=b AND selec; salida<=ax OR bx;
END transferencia; /----(2)----/ ARCHITECTURE transferencia OF mux IS
BEGIN salida<=a WHEN selec='0' ELSE b; END transferencia;

En ese sentido VHDL posee una forma de describir circuitos que además permite la
paralelización de instrucciones y que se encuentra más cercana a una descripción
estructural del mismo. A continuación se muestran dos ejemplos de una descripción
concurrente o también llamada de transferencia entre registros:

En la descripción (1) hay varias instrucciones, todas ellas concurrentes, es decir, se


ejecutan cada vez que cambia alguna de las señales que intervienen en la
asignación. Este primer caso es casi una descripción estructural ya que de alguna
manera se están definiendo las señales (cables) y los componentes que la definen,
aunque no es comportamental ya que en realidad se trata de asignaciones a señales
y no una descripción de componentes y conexiones. El segundo caso (2) es también
una descripción de transferencia aunque basta una única instrucción de asignación
para definir el circuito.

Aunque no es la característica más interesante del VHDL, también permite ser


usado como Netlist o lenguaje de descripción de estructura. En este caso, esta
estructura también estará indicada dentro de un bloque de arquitectura, aunque la
sintaxis interna es completamente diferente:
ARCHITECTURE estructura OF mux IS

COMPONENT and2
PORT(e1,e2: IN bit; y: OUT bit);
END COMPONENT

COMPONENT or2
PORT(e1,e2: IN bit; y: OUT bit);
END COMPONENT;

COMPONENT inv
PORT(e: IN bit; y: OUT bit);
END COMPONENT;

SIGNAL ax,bx,nosel: bit;

BEGIN
u0: inv PORT MAP(e=>selec,y=>nosel);
u1: and2 PORT MAP(e1=>a,e2=>nosel,y=>ax);
u2: and2 PORT MAP(e1=>b,e2=>sel,y=>bx);
u3: or2 PORT MAP(e1=>ax,e2=>bx,y=>salida);
END estructura;

Se observa fácilmente que esta descripción es más larga y encima menos clara que
las anteriores. Dentro de la arquitectura se definen en primer lugar los componentes
que se van a utilizar. Esto se realiza mediante la palabra clave COMPONENT,
donde se indican además las entradas y salidas mediante la cláusula PORT. Estos
componentes deben tener una entidad y arquitectura propia indicando su
comportamiento. Normalmente estas entidades se suelen poner en una librería
separada. Al igual que ocurre en cualquier netlist, las señales o conexiones deben
tener un nombre. En el esquema se le han puesto nombres a las líneas de conexión
internas al circuito. Estas líneas hay que declararlas como SIGNAL en el cuerpo de
la arquitectura y delante del BEGIN. Una vez declarados los componentes y las
señales que intervienen se procede a conectarlos entre sí. Para ello la sintaxis es
muy simple. Lo primero es identificar cada componente, es lo que comúnmente se
conoce como instanciación, es decir, asignarle a cada componente concreto un
símbolo. En este ejemplo se le ha llamado u a cada componente y se le ha añadido
un número para distinguirlos, en principio el nombre puede ser cualquier cosa y la
única condición es que no haya dos nombres iguales. A continuación del nombre
viene el tipo de componente que es, en nuestro caso puede ser una and2, una or2,
o una puerta inversora inv. Después se realizan las conexiones poniendo cada señal
en su lugar correspondiente con las palabras PORT MAP. Así, los dos primeros
argumentos en el caso de la puerta and2 son las entradas, y el último es la salida.
De esta forma tan simple se va creando el netlist o definición de la estructura.

Elementos sintácticos del VHDL


El lenguaje VHDL tiene sus elementos sintácticos, sus tipos de datos, y sus
estructuras como cualquier otro tipo de lenguaje. El hecho de que sirva para la
descripción hardware lo hace un poco diferente de un lenguaje convencional. Una
de estas diferencias es probablemente la posibilidad de ejecutar instrucciones a la
vez de forma concurrente. Algunos de estos elementos sintácticos son:

 Comentarios: Cualquier línea que empieza por dos guiones "--" es un


comentario.

 Identicadores: Son cualquier cosa que sirve para identicar variables,


señales, nombres de rutina, etc. Puede ser cualquier nombre compuesto por
letras incluyendo el símbolo de subrayado "_". Las mayúsculas y minúsculas
son consideradas iguales, así que JOSE y José representan el mismo
elemento. No puede haber ningún identicador que coincida con alguna de las
palabras clave del VHDL.

 Números: Cualquier número se considera que se encuentra en base 10. Se


admite la notación científica convencional para números en coma flotante. Es
posible poner números en otras bases utilizando el símbolo del sostenido "#".
Ejemplo: 2#11000100# y 16#C4# representan el entero 196.

 Caracteres: Es cualquier letra o carácter entre comillas simples: 'l','3','t'.


 Cadenas: Son un conjunto de caracteres englobados por comillas dobles:
"Esto es una cadena".

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

Operadores y expresiones

Las expresiones en VHDL son prácticamente iguales a como pudieran ser en otros
lenguajes de programación o descripción, por lo que se expondrán brevemente
algunos de los existentes en VHDL y su utilización.

Operadores varios
& (concatenación) Concatena matrices de manera que la dimensión de la matriz
resultante es la suma de las dimensiones de las matrices sobre las que opera:
punto<=x&y mete en la matriz punto la matriz x en las primeras posiciones, y la
matriz y en las últimas.

Operadores aritméticos
** (exponencial) Sirve para elevar un número a una potencia: 4**2 es 4^2. El
operador de la izquierda puede ser entero o real, pero el de la derecha sola puede
ser entero.

ABS() (valor absoluto) Como su propio nombre indica esta función devuelve el valor
absoluto de su argumento que puede ser de cualquier tipo numérico.

* (multiplicación) Sirve para multiplicar dos números de cualquier tipo (los tipos bit o
bit vector no son numéricos).

/ (división) También funciona con cualquier dato de tipo numérico.


MOD (módulo) Calcula en módulo de dos números. Exactamente se define el
módulo como la operación que cumple: a=b*N+(a MOD b) donde N es un entero.
Los operandos solo pueden ser enteros. El resultado toma el signo de b.

REM (resto) Calcula el resto de la división entera y se define como el operador que
cumple: a=(a/b)*b+(a REM b), siendo la división entera. Los operandos solo pueden
ser enteros. El resultado toma el signo de a.

+ (suma y signo positivo) Este operador sirve para indicar suma, si va entre dos
operandos, o signo, si va al principio de una expresión. La precedencia es diferente
en cada caso. Opera sobre valores numéricos de cualquier tipo.

- (resta y signo negativo) Cuando va entre dos operandos se realiza la operación de


sustracción, y si va delante de una expresión le cambia el signo. Los operandos
pueden ser numéricos de cualquier tipo.

Operadores de desplazamiento
SLL, SRL (desplazamiento lógico a izquierda y a derecha) Desplaza un vector un
número de bits a izquierda (SLL) o derecha (SRL) rellenando con ceros los huecos
libres. Se utiliza en notación infija de manera que la señal a la izquierda del operador
es el vector que se quiere desplazar y el de la derecha es un valor que indica el
número de bits a desplazar. Por ejemplo dato SLL 2 desplaza a izquierda el vector
dato, es decir, lo multiplica por 4.

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

ROL, ROR (rotación a izquierda y a derecha) Es como el de desplazamiento pero


los huecos son ocupados por los bits que van quedando fuera.

Operadores relacionales
Devuelven siempre un valor de tipo booleano (TRUE o FALSE). Los tipos con los
que pueden operar dependen de la operación:
=, /= (igualdad) El primero devuelve TRUE si los operandos son iguales y FALSE
en caso contrario. El segundo indica desigualdad, funciona justo al revés. Los
operandos pueden ser de cualquier tipo con la condición de que sean ambos del
mismo tipo.

<,<=,>,>= (menor mayor) Tienen el significado habitual. La diferencia con los


anteriores es que los tipos de datos que pueden manejar son siempre de tipo escalar
o matrices de una sola dimensión de tipos discretos.

Operadores lógicos
Son NOT, AND, NAND, OR, NOR y XOR. El funcionamiento es el habitual para este
tipo de operadores. Actúan sobre los tipos bit, bit vector y booleana. En el caso de
realizarse estas operaciones sobre un vector, la operación se realiza bit a bit,
incluyendo la operación NOT.
SIMBOLOS

GAL
GAL (Generic Array Logic), en español Arreglo Lógico Genérico, son un tipo de
circuito integrado, de marca registrada por Lattice Semiconductor, que ha sido
diseñados con el propósito de sustituir a la mayoría de las PAL, manteniendo la
compatibilidad de sus terminales.

Utiliza una matriz de memoria EEPROM en lugar por lo que se puede programar
varias veces.
Un GAL en su forma básica es un PLD con una matriz AND reprogramable, una
matriz OR fija y una lógica de salida programable mediante una macrocelda. Esta
estructura permite implementar cualquier función lógica como suma de productos
con un número de términos definido.
En los PLDs no reprogramables la síntesis de las ecuaciones lógicas se realiza
mediante quema de fusibles en cada punto de intersección de los pines de entrada
con las compuertas. En el caso de un GAL es básicamente la misma idea pero en
vez de estar formada por una red de conductores ordenados en filas y columnas en
las que en cada punto de intersección hay un fusible, el fusible se reemplaza por
una celda CMOS eléctricamente borrable (EECMOS). Mediante la programación se
activa o desactiva cada celda EECMOS y se puede aplicar cualquier combinación
de variables de entrada, o sus complementos, a una compuerta AND para generar
cualquier operación producto que se desee. Una celda activada conecta su
correspondiente intersección de fila y columna, y una celda desactivada desconecta
la intersección. Las celdas se pueden borrar y reprogramar eléctricamente.

ESTRUCTURA
El GAL básicamente está formado por una matriz AND reprogramable y una matriz
OR fija con configuración programable de salidas y/o entradas.

FIGURA 1 2.Estructura básica de un GAL

Las estructuras GAL son estructuras PAL construidas con tecnología CMOS, y
fueron comercializadas por primera vez en 1984 por Lattice Semiconductor. Como
se ha mencionado, son programables y borrables eléctricamente. Son
reprogramables y más flexibles, a la salida de la matriz AND/OR hay un circuito más
complejo con selectores y flip-flops que permiten implementar ecuaciones más
complejas. Hay distintas arquitecturas según la versión del fabricante. La Figura 7
presenta un ejemplo de una GAL.

El circuito a la salida de la matriz se denomina macrocelda. Tienen integración


baja/media. El Terminal puede funcionar como entrada o salida según la
programación. Los términos productos se dibujan todos sobre una sola línea para
simplificar el diagrama.

Un terminal en modo salida puede reflejar la salida Q y Q negada del flip-flop para
circuitos secuenciales o la entrada D y negada para circuitos combinacionales.

De modo similar puede realimentar el terminal de salida o la salida Q negada del flip
flop hacia otros términos. Las GAL se usan para circuitos lógicos sencillos y de
complejidad media.

La macrocelda, en el idioma inglés es por sus siglas OLMC


(OutputLogicMacrocells). Y son Macroceldas lógicas que contienen puertas OR y
lógica programable, circuitos lógicos que se pueden programar como lógica
combinacional o lógica secuencial (flip-flops, contadores y registros).

FIGURA 1 3.Ejemplo de una macrocelda para una


GAL22V10

REFERENCIA ESTÁNDAR
De manera comercial las GALs están identificadas por un estándar que permite
conocer sus características rápidamente. Por ejemplo a continuación describimos
el dispositivo GAL16V8.
CONSTRUCCIÓN
Basada en la estructura básica mostrada anteriormente, la construcción de los
dispositivos GALs se diferencian por sus características de entradas, salidas y
configuración interna de las macroceldas empleadas, por ejemplo detallemos el
GAL 16V8, donde ciertas localidades en el arreglo de memoria son diseñadas para
controlar las conexiones programables a la matriz de los
términos de entrada, cada bit en esta matriz representa una
conexión programable entre un renglón y una columna.
Afortunadamente, no es necesario buscar dentro de las
direcciones de cada localidad de bit en la matriz. El
software de programación cuida de estos detalles en una
manera amigable. El diagrama lógico completo del GAL
16V8 se muestra en la figura 8. Este dispositivo tiene ocho
terminales de entrada dedicadas (terminales 2-9), dos con
funciones especiales (1 y 11), y ocho (12-19) que pueden
ser usadas como entradas o salidas.
FIGURA 1 4.Forma constructiva de
La mayoría de los componentes de las GALs son; la matriz GAL16V8

de los términos de entrada, las compuertas AND (las


cuales generan los términos producto de entrada), y las macroceldas lógicas de
salida (OLMCs, Output Logic Macro Cells). Hay que notar que las 8 terminales de
entrada son conectados directamente a una columna de la matriz de términos de
entrada, y así cada complemento de entrada es conectado a está. Estas terminales
siempre serán especificadas como entradas cuando se programa el dispositivo. Un
nivel lógico y su complemento son siempre retroalimentados de cada macro a una
columna de la matriz de entrada. La fuente de estos niveles lógicos es determinada
por la configuración de cada macro. Con esto, da un total de 32 variables de entrada
(columnas en la matriz de entrada) que pueden ser programadas como conexiones
a las 64 compuertas AND de entradas múltiples. En la matriz de entrada, cualquier
columna puede ser conectada a un renglón de entrada durante el proceso de
programación.
La flexibilidad del GAL 16V8 consiste en su macrocelda lógica de salida
programable (ver figura 9). Ocho productos diferentes (salidas de las compuertas
AND) son aplicadas como entradas a cada una de las ocho macroceldas. Dentro de
cada macro los productos son enviados a una compuerta OR al mismo tiempo para
generar la suma de productos (SOP, sum of products). Recordando, cualquier
función puede ser expresada como una forma de SOP. Dentro de la macro, la salida
del SOP puede ser enrutado a la terminal de salida para implementar un circuito
combinacional, o como entrada a un flip-flop tipo D para implementar un circuito con
salida registrada.

FIGURA 1 5.Macrocelda lógica de salida (OMC) para


GAL16V8

Como un ejemplo de las


características ofrecidas por este

• fmax = 250 Mhz.

• 3.5 ns máximo tiempo de propagación.

• 2.5 ns máximo tiempo de propagación de la entrada de reloj a el dato de salida.

• Celdas Reprogramables.

• Vcc = 5 Volts ± 5%

• Consumo de corriente 90 mA.


• Rapidez en el borrado <>
tipo de dispositivos, a continuación se enlistan las especificaciones más relevantes
del circuito GAL16V8 de marca Lattice Semiconductor.

FIGURA 1 6.Distribución de terminales de un GAL16V8

Las terminales de la 12 a 19 correspondientes al OLMC (Output Logic Macrocell)


pueden programarse para trabajar como entradas y/o salidas, y en el caso de ser
usadas como salidas estas pueden ser combinacionales o registradas (Flip Flops),
lo cual le da la versatilidad de ser programado de diferentes formas y para diferentes
requerimientos.

FIGURA 1 7.Configuración interna de la OLMC de un


GAL16V8

La programación de los PLDs en general se lleva a cabo por medio de programas


de aplicación especializados siendo las dos estrategias de programación más
utilizadas la captura esquemática y la de lenguaje de descripción de hardware
(HDL).
La gran ventaja de estas herramientas es el de hacer los diseños en la computadora,
donde los errores son fácilmente detectables y corregibles.
FUNCIONAMIENTO
Una GAL permite implementar cualquier expresión en suma de productos con un
número de variables definidas, por ejemplo este diagrama muestra la estructura
básica de una GAL para dos variables de entrada y una salida.

FIGURA 1 8.Estructura básica para dos variables de entrada y una salida

El proceso de programación consiste en activar o desactivar cada celda E2CMOS


con el objetivo de aplicar la combinación adecuada de variables a cada compuerta
AND y obtener la suma de productos
La salida de compuertas AND se introducen en las macroceldas lógicas de salida
OLMC que contienen compuertas OR y lógica programable.

FIGURA 1 9.Arreglo para dos variables de entrada y una salida X


FPGA

Un FPGA es un dispositivo que un diseñador de sistemas digitales puede


programar, después que está soldado en el circuito impreso, para que funcione de
un modo determinado. Los FPGAs son fabricados con conexiones y lógica
programables. El diseñador desarrolla su sistema digital usando herramientas tipo
EDA (Electronics Design Automation), sean dibujos esquemáticos o lenguaje de
descripción de hardware (como VHDL), para poder plasmar el sistema en lógica
digital. Luego de simular satisfactoriamente el sistema digital comprobando su
funcionalidad se usan herramientas específicas del vendedor del FPGA para crear
un archivo de configuración del FPGA, el cual describe todas las conexiones,
interconexiones y lógica que necesita ser programada dentro del FPGA para poder
implementar el sistema digital desarrollado. Entonces, a través de un cable USB se
conecta el FPGA o el circuito impreso en cual está soldado el FPGA, a una PC y
usando el software de configuración del FPGA se descarga el archivo de
configuración. Una vez comprobado el correcto funcionamiento del sistema en el
FPGA se graba el archivo de configuración en una memoria novolátil que el FPGA
leerá y usará para auto-configurarse cada vez que se aplica la tensión de
alimentación al FPGA o cada vez que se desee re-configurar el FPGA.

Principales Características de un FPGA


Los FPGAs son dispositivos orientados a satisfacer una muy amplia gama de
aplicaciones, desde simple lógica combinacional hasta sistemas con
microprocesador embebido, transmisión tipo Ethernet, transmisión de datos series
a 3.5Gb/s, todo con el mismo dispositivo. Por ello los FPGAs tienen características
diversas, pero se podría decir que las principales son las siguientes:

 Gran cantidad de terminales de E/S. Desde 100 hasta unos 1400 terminales
de E/S
 Buffers de E/S programables: control de sesgo, control de corriente,
configuración del estándar de E/S , pull-up y pull-down configurables
 Gran cantidad de Flips-Flops, los dispositivos más grandes tienen unos
40.000 FFs
 Gran cantidad de Tablas de Búsqueda (Look-Up Tables), ~100.000
 Bloques de Memoria (BRAM) de doble puerto, puerto simple, de hasta
18Mbits, configurables como RAM, ROM, FIFO y otras configuraciones
 Bloques dedicados de Multiplicación
 Transceptores para transmisión serie de muy alta velocidad , entre 1.5 a-
10.0Gb/s
 Procesador en hardware embebido, tal como el Power-PC, ARM9
 Procesadores descriptos en software, HDL, tales como el 8051, ARM3
 Controladores de reloj tipo Delay Lock Loop (DLL) y Phase Lock Loop (PLLs)
de hasta 550MHz. De 2 a 8 controladores por dispositivo
 Control de impedancia programable por cada terminal de E/S
 Interface DDR/DDR2 SDRAM soportando interfaces de hasta 800 Mb/s
 Interfaz con estándares de E/S tipo diferencial tales como LVDS, SSTL
diferencial, etc.

FPGA frente a ASIC


Las FPGA se utilizan en aplicaciones similares a los ASIC pero tienen una serie
de inconvenientes así como de ventajas respecto a estos últimos:

Inconvenientes:

 Son más lentas.


 Consumen mayor potencia.
 No pueden realizar sistemas excesivamente complejos.

Ventajas:

 Son reprogramables.
 Los costes de desarrollo y adquisición son mucho menores.
 El tiempo de diseño y manufacturación es menor.

Programación
En la FPGA no se realiza programación tal cual como se realiza en otros
dispositivos como DSP, CPLD o microcontroladores. La FPGA tiene celdas que
se configuran con una función específica ya sea como memoria (FLIP-FLOP tipo
D), como multiplexor o con una función lógica tipo AND, OR, XOR. La labor del
programador es describir el hardware que tendrá la FPGA. Por consiguiente, la
tarea del programador es definir la función lógica que realizará cada uno de los
CLB, seleccionar el modo de trabajo de cada IOB e interconectarlos.
El diseñador cuenta con la ayuda de entornos de desarrollo especializados en el
diseño de sistemas a implementarse en una FPGA. Un diseño puede ser
capturado ya sea como esquemático, o haciendo uso de un lenguaje de
programación especial. Estos lenguajes de programación especiales son
conocidos como HDL o lenguajes de descripción de hardware. Los HDL más
utilizados son:

 VHDL
 Verilog
 ABEL

En un intento de reducir la complejidad y el tiempo de desarrollo en fases de


prototipaje rápido, y para validar un diseño en HDL, existen varias propuestas y
niveles de abstracción del diseño. Los niveles de abstracción superior son los
funcionales y los niveles de abstracción inferior son los de diseño al nivel de
componentes hardware básicos. Entre otras, National Instruments LabVIEW
FPGA propone un acercamiento de programación gráfica de alto nivel.

Aplicaciones
Cualquier circuito de aplicación específica puede ser implementado en una
FPGA, siempre y cuando esta disponga de los recursos necesarios. Las
aplicaciones donde más comúnmente se utilizan las FPGA incluyen a los DSP
(procesamiento digital de señales), radio definido por software, sistemas
aeroespaciales y de defensa, prototipos de ASIC, sistemas de imágenes para
medicina, sistemas de visión para computadoras, reconocimiento de voz,
bioinformática, emulación de hardware de computadora, entre otras. Cabe notar
que su uso en otras áreas es cada vez mayor, sobre todo en aquellas
aplicaciones que requieren un alto grado de paralelismo.

Existe código fuente disponible (bajo licencia GNU GPL)1 de sistemas como
microprocesadores, microcontroladores, filtros, módulos de comunicaciones y
memorias, entre otros. Estos códigos se llaman cores.

Tecnología de la memoria de programación

Las FPGA también se pueden diferenciar por utilizar diferentes tecnologías de


memoria:
 Volátiles: basadas en RAM. Su programación se pierde al quitar la
alimentación. Requieren una memoria externa no volátil para configurarlas al
arrancar (antes o durante el reinicio).

 No Volátiles: basadas en ROM. Hay de dos tipos, las reprogramables y las


no reprogramables.

1. Reprogramables: basadas en EPROM o flash. Estas se pueden borrar y


volver a reprogramar aunque con un límite de unos 10.000 ciclos.
2. No reprogramables: basadas en fusibles o antifusibles. Solo se pueden
programar una vez, lo que las hace poco recomendables para trabajos en
laboratorios.

FIGURA 1 10.Ejemplo de tarjeta de desarrollo que incorpora una FPGA


CONCLUSIÓN

El HDL es una herramienta para el diseño y documentación sobre los circuitos


integrados, es una de las principales características de este la capacidad de estos
para describir en distintos niveles de abstracción, estos, desde un punto de vista de
simulación y síntesis del circuito, como un algoritmo se refiere a la relación funcional
entre las entradas y salidas del circuito, sin hacer referencia a la realización final. Y
entrando a lógico y de compuertas este se expresa de forma muy parecida en un
lenguaje de programación de software, describía las relaciones entre las entradas y
salidas de un circuito, por lo cual podía utilizarse para simular diseños pero no para
sintetizarlos.
REFERENCIAS BIBLIOGRAFICAS

Álvarez, C. (27 de Junio de 2016). LENGUAJE DE DESCRIPCION DE HARDWARE


. Obtenido de SlidePlayer: https://slideplayer.es/slide/10724307/
DANIEL CASIQUE, C. M. (6 de Febrero de 2008). GAL (ARREGLO LOGICO
GENERICO). Obtenido de Blogspot:
http://electronicaintegradaunexpo.blogspot.com/2008/02/gal-y-vhdl.html
Sisterna, C. (15 de Octubre de 2004). Sistemas Digitales II. Obtenido de FIELD
PROGRAMMABLE GATE ARRAYS (FPGAS):
http://dea.unsj.edu.ar/sisdig2/Field%20Programmable%20Gate%20Arrays_
A.pdf
Wikipedia. (11 de Noviembre de 2018). Field-programmable gate array. Obtenido
de Wikipedia: https://es.wikipedia.org/wiki/Field-programmable_gate_array
Yigsia Berbin, G. C. (1 de Enero de 2008). Introducción al lenguaje para
programación y modelado de circuitos. Obtenido de Blogspot:
http://ygelectronicaintegrada.blogspot.com/2008/01/vhdl.html

Potrebbero piacerti anche