ANTECEDENTES
La Electrónica, a través de un sin número de aplicaciones tecnológicas y con una rapidez arrolladora, ha logrado intervenir prácticamente en todos los ámbitos de la vida cotidiana de la sociedad contemporánea.
Tal vez sorprende que la palabra “Electrónica”, que es hoy tan común, entró como vocablo del medio tecnológico en 1930, para abarcar la radio y las aplicaciones industriales de tubos de electrones (bulbos).
Lo que disparó verdaderamente el desarrollo de la electrónica, sin embargo, fue el invento del transistor en 1947. John Bardeen, Walter Brattain y William Shockley de los Laboratorios Bell, descubren el efecto transistor, el cual permite cambios en la conductividad de los materiales mediante el uso de corriente eléctrica.
En la década de 1960 surge otro campo de la electrónica denominado Electrónica Digital, el cual se basa en el Álgebra Booleana creada por George Boole (1815-1864), lógico y matemático británico, que en 1854 escribió Las leyes del pensamiento, en el cual describe un sistema algebraico en donde las proposiciones lógicas se indican por símbolos y pueden relacionarse mediante operadores matemáticos abstractos que corresponden a las leyes de la lógica. La principal característica del álgebra booleana es que las variables sólo pueden tomar dos valores: Uno o Cero (Verdadero o Falso).
ASICS
Desde los finales de la década de 1970, los equipos electrónicos digitales utilizan Circuitos Integrados (CI o CHIPS) de función lógica fija, realizados en pequeña o mediana escala de integración (SSI, MSI).
Para la implementación de aplicaciones muy complejas, que requieren de una gran cantidad de circuitos de función fija, resulta más conveniente intégralos en un solo dispositivo fabricado a la medida, los cuales son llamados: ASICS, Application Specific Integrated Circuits. (Circuitos Integrados de Aplicación Especifica o circuitos a la medida).
Entre las ventajas que presenta el uso de los ASICs podemos mencionar que: Ahorran espacio, reducen el número de dispositivos, menor costo, reducen el tiempo de ensamble, bajo consumo de potencia, menor calentamiento, facilidad en la verificación (control de calidad), mejor confiabilidad.
Los ASIC se pueden clasificar por su tecnología de fabricación en cuatro categorías: Arreglos de Compuertas, Celdas Estándar, Full Custom y Lógica Programable.
Por otro lado, con la Lógica Programable es posible diseñar e implementar desde un solo circuito con el uso de solamente una computadora, un programador y software de Diseño Electrónico Asistido EDA (Electronic Design Assistant).
PLD
Un dispositivo de lógica programable (PLD) es un Circuito Integrado cuya estructura lógica final es directamente configurada por el usuario, sin necesidad de llevar a cabo ningún proceso de fabricación.
Un dispositivo lógico programable, o PLD (Programmable Logic Device), es un dispositivo cuyas características pueden ser modificadas y almacenadas mediante programación. El principio de síntesis de cualquier dispositivo lógico programable se fundamenta en el hecho de que cualquier función booleana puede ser expresada como una suma de productos. El dispositivo programable más simple es el PAL (Programmable Array Logic). El circuito interno de un PAL consiste en un arreglo, o matriz, de compuertas AND y un arreglo de compuertas OR. El arreglo AND es programable mientras que el OR generalmente es fijo. Mediante una matriz de conexiones se seleccionan cuales entradas serán conectadas al arreglo AND, cuyas salidas son conectadas al arreglo OR y de esta manera obtener una función lógica en forma de suma de productos. Una matriz de conexiones es una red de conductores distribuidos en filas y columnas con un fusible en cada punto de intersección.
La mayoría de los PLDs están formados por una matriz de conexiones, una matriz de compuertas AND, y una matriz de compuertas OR y algunos, además, con registros. Con estos recursos se implementan las funciones lógicas deseadas mediante un software especial y un programador. Las matrices pueden ser fijas o programables. El tipo más sencillo de matriz programable, que data de los años 60, era una matriz de diodos con un fusible en cada punto de intersección de la misma. En la figura 3 se muestran los circuitos básicos para la mayoría de los PLDs.
Los PLDs facilitan el proceso de diseño y reducen el tiempo de desarrollo, cuando se requieren prototipos o producción de baja escala, pues todo el proceso se puede llevar a cabo con la ayuda de una computadora personal, programas de aplicación y el programador los cuales actualmente están disponibles a bajo costo.
Algunos fabricantes de PLD’s son:
Actel (http://www.actel.com/)
Altera Corp. (http://www.altera.com/)
Atmel Corp. (http://www.atmel.com/)
Chip Express (http://www.chipexress.com/)
Cypress Sem.(http://www.cypress.com/)
Lattice Sem. (http://www.latticesemi.com/)
Quicklogic Corp. (http://www.quicklogic.com/)
Xilinx Inc. (http://www.xilinx.com/)
Los diferentes tipos de dispositivos de lógica programable que existen hoy en día pueden clasificarse por su tecnología, su capacidad (Figura 2):
• Simplex Programmable Logic Device SPLDs.
• Complex Programmable Logic Device CPLDs.
• Field Programmable Gate Arraysevice FPGAs.
• Field Programmable Inter Connect FPICs.
De la clasificación anterior sólo nos enfocaremos a los modelos Simplex Programmable Logic Device SPLDs.
Los SPLDs están constituidos por un arreglo de compuertas AND, seguido por otro arreglo de compuertas OR, uno o ambos arreglos programables, algunos incluyen Flip Flops.
• PAL Programmable Array Logic, VANTIS.
• GAL Generic Array Logic, Lattice Semiconductor.
• PLA Programmable Logic Array.
• PLD Programmable Logic Device.
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.
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.
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).
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.
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.
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.
• 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 <>
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.
La salida de compuertas AND se introducen en las macroceldas lógicas de salida OLMC que contienen compuertas OR y lógica programable.
Altera
Cypress
Lattice
Philips
Texas Instruments
Xilinx
Lenguaje de descripción hardware estructurado para modelar sistemas digitales.
V: VHSIC – Very High Speed Integrated Circuit
H: Hardware
D: Description
L: Language
TIPO DE PROGRAMA
VHDL sirve para describir la forma de comportarse de un circuito electrónico. El comportamiento puede ser llevado a algún dispositivo que dispondrá de sus propios componentes para conseguir dicho comportamiento deseado.
La forma de comportarse es independiente del hardware donde se implementará.
El VHDL es un estándar llamado IEEE 1076-1993. Sus ventajas son:
• Una disponibilidad pública.
• Independencia de dispositivos y fabricantes
• Reutilización
• Diseño jerárquico
HISTORIA DEL VHDL
Como se ha dicho antes, VHDL sirve para describir un circuito electrónico, pero el mismo circuito puede ser descrito de varias formas. Las formas de hacerlo son:
- Descripción de comportamiento
- Descripción de flujo de datos (RTL Registred Transfer Level)
- Descripción estructural
Los tres ejemplos de código son sólo las arquitecturas, los tres podrían tener como entidad:
Una descripción de comportamiento de un multiplexor de dos entradas, una salida y una señal de selección sería: la salida será igual a la primera entrada si la señal de control está desactivada y la salida será la segunda entrada si la señal de control está activada.
En VHDL la arquitectura de este multiplexor para la entidad llamada mux sería:
En una descripción de flujo de datos del mismo multiplexor la salida sería la ecuación lógica: s=(entrada1 AND NOT control) OR (entrada2 AND control)
En VHDL la arquitectura sería:
Una descripción estructural consistiría en decir que el circuito tiene una puerta inversora U1, dos puertas AND de dos entradas U2 y U3 y una puerta lógica OR de dos entradas U4, además también describe las conexiones entre estas puertas, un ejemplo sería: la entrada de U1 es la señal de control, la salida de U1 se conecta a la segunda entrada de U2, la primera entrada de U1 es entrada1, etc.
El código VHDL sería:
DISEÑO CON VHDL
El lenguaje VHDL es en principio independiente del dispositivo programable que debamos utilizar. Puede incluso utilizarse para hacer una simulación sin hacer referencia al CI programable. Además, el lenguaje es suficientemente flexible para que un mismo problema admita diferentes codificaciones.
Sin embargo, no todas estas codificaciones darán los mismos resultados en cuanto a prestaciones y uso de recursos a la hora de programar un circuito dado. Aunque los programas informáticos permiten optimizar el paso de un código VHDL al fichero de programación de un CI programable, no podemos esperar en la actualidad que la solución encontrada sea la mejor.
Por otro lado, optimizar puede tener sentidos distintos. Un diseñador puede estar interesado en obtener la máxima frecuencia de trabajo, o bien en reducir la utilización de recursos del CI, de forma que quede espacio para programar otras lógicas. Es tarea del diseñador ayudar “a mano” a que el resultado final sea lo más eficiente posible. Es más, a veces la forma de escribir el código VHDL depende del dispositivo que se use (por ejemplo si es una FPGA o un CPLD).
El ciclo de diseño se puede dividir, en general, en 3 fases: especificación, validación, materialización. En la especificación se introduce el diseño bien mediante captura esquemática, bien mediante un lenguaje de descripción hardware (HDL). El diseño debe verificarse sintácticamente.
Con la generación del “netlist” (síntesis) tenemos la descripción de una serie de elementos lógicos conectados y podemos pasar a realizar la validación del diseño, mediante la simulación. La simulación puede ser funcional, considerando los elementos como ideales (sin retrasos), o estructural, en el que la herramienta informática incorpora modelos más elaborados de los elementos lógicos que permiten realizar la simulación incorporando retrasos. En este último caso, podemos abordar además el análisis de los tiempos de setup y de hold. La simulación funcional es más rápida y se aconseja realizarla primero hasta que la lógica de nuestro diseño se compruebe.
Una vez que se ha realizado la simulación funcional podemos pasar a la implementación física, es necesario una etapa de síntesis y ajuste (“fitting”) en el que el diseño se divide en elementos asimilables a los recursos físicos de nuestra PLC (sumas de productos, multiplexores, memoria embebida).
Se puede observar en la figura que se pueden generar netlist tomando como base diferentes tipos de elementos, por ejemplo, puertas elementales al inicio del diseño, o bien los elementos que realmente se encuentran en un dispositivo programable, una vez que sabemos cuál vamos a utilizar.
En un diseño existen una serie de requerimientos previos como pueden ser:
- El diseño debe estar terminado en una cierta fecha.
- Debe funcionar correctamente, con el mínimo de material.
- Debe ser capaz de operar a una cierta frecuencia.
- No puede superar un cierto coste económico.
- Debe ajustarse a un circuito más complejo (limitaciones de espacio y compatibilidad).
El orden de los requerimientos puede ayudar a tomar decisiones. Por ejemplo, si la fecha limite es el requerimiento más importante, el diseñador no dedica más tiempo a mejorar un diseño que ya cumple el resto de requerimientos. Si la frecuencia de operación es un parámetro más crítico que el coste, no se pierde tiempo intentando reducir el área si las prestaciones ya son suficientes.
Es necesario tener en cuenta también las limitaciones de los CI programables:
- Número de salidas/entradas.
- Número de biestables.
- El número de términos producto (o capacidad booleana).
- Las posibles combinaciones de reset/preset que admita.
- Los posibles esquemas de distribución reloj.
- La capacidad de interconexión interna de señales.
A la hora de decidir entre una CPLD o una FPGA es importante tener en cuenta algunas consideraciones. Las CPLDs proporcionan habitualmente las mejores prestaciones, pero también contienen menos registros que las FPGAs.
Las CPLDs pueden implementar funciones más complicadas en un sólo pase (sin que la salida sea realimentada al integrado) y en ellas el análisis de tiempos es más fácil. Las FPGAs son más flexibles en cuanto a la construcción de celdas lógicas en cascada debido a su granularidad más fina (celdas lógicas más sencillas, pero en mayor número que en una CPLD, y con mayor capacidad de conexión).
La optimización y el análisis de tiempos son más difíciles en una FPGA.
Antes de elegir un dispositivo, es conveniente entender qué recursos necesita un diseño, su funcionamiento, así como los objetivos de prestaciones, coste y otros. Con todos los requerimientos en una lista, se pueden comparar las necesidades con lo que un dispositivo puede ofrecer.
Finalmente, hay que contar por supuesto con un software adecuado y manejable.
La síntesis (synthesis) es el proceso de crear las ecuaciones lógicas o las listas de nodos a partir del código VHDL. El proceso de ajuste (fitting) consiste en encontrar la manera de que esa lógica sea realizada por un dispositivo programable. Una optimización específica del dispositivo se puede dar tanto en un proceso como en otro.
El término fitting se usa normalmente para referirse a CPLDs. El software de ajuste (fitter) se encarga de repartir la lógica entre las macroceldas y de conectar y enviar las señales a través de la matriz de interconexiones. El análogo en FPGA es el término de colocación y conexionado (place and routing), que es el proceso de determinar qué celdas lógicas serán utilizadas y cómo las señales se transmitirán de una a otra.
El software de síntesis puede pasar al software de ajuste unas ecuaciones lógicas que indiquen qué recursos se utilizarán, o puede pasar unas ecuaciones no optimizadas, siendo tarea del "fitter" dicha optimización. Lo importante es que los programas de síntesis y ajuste estén bien acoplados, es decir que el "fitter" reciba la información del algoritmo de síntesis de una forma que le permita producir la mejor implementación. Si el "fitter" no produce ninguna optimización, entonces el proceso de síntesis debe pasar una ecuaciones lógicas y una información de forma que el "fitter" no tenga más que situar la lógica.
No hay comentarios:
Publicar un comentario