Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
JUSTIFICACIÓN
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 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.
Llamadas a librerías.
Entidad.
Arquitectura(s).
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.
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
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
/----(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:
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;
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.
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).
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.
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.
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.
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.
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.
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.
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
• Celdas Reprogramables.
• Vcc = 5 Volts ± 5%
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.
Inconvenientes:
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
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.