ALEXANDER ANGULO ANGULO PÉREZ ID: UB40218SSY48898 UB40218SSY48898
LICENCIATURA EN INGENIERIA DE SISTEMAS
TRABAJO DE INVESTIGACIÓN “La arquitectura de computadores y su vinculación a la lógica digital en el
diseño y programación de computadores, como elemento clave de la enseñanza en sistemas ”
ÍNDICE DE CONTENIDOS ÍNDICE DE GRÁFICOS ..................................................................................... 4 ÍNDICE DE TABLAS .......................................................................................... 5 RESUMEN ......................................................................................................... 6 INTRODUCCIÓN ............................................................................................... 7 DESARROLLO ................................................................................................... 9 Antecedentes .......................... ............. .......................... .......................... .......................... .......................... .......................... .................... ....... 9 Los circuitos lógicos ...................................................................................... 10 Operaciones lógicas de Boole ...................................................................... 11 La complementación lógica ....................................................................... 11 La suma lógica ........................................................................................... 12 El producto lógico ...................................................................................... 12 Puertas lógicas ............................................................................................. 13 Las puertas OR .......................................................................................... 13 Las puertas AND ....................................................................................... 13 Las puertas NOT ....................................................................................... 14 Dispositivos lógicos ....................................................................................... 14 Almacenamiento de la configuración .......................... ............. .......................... .......................... .................. ..... 15 Arquitecturas de dispositivos dispositivos programables .......................... ............. .......................... .................... ....... 17 Herramientas de software ............................................................................. 23 Herramientas de alto nivel ......................................................................... 24
CONCLUSIONES ............................................................................................. 26 BIBLIOGRAFÍA ................................................................................................ 28
ÍNDICE DE GRÁFICOS Gráfico 1: Puerta OR ........................................................................................ 13 Gráfico 2: Puerta AND ...................................................................................... 14 Gráfico 3: Puerta NOT ...................................................................................... 14 Gráfico 4: Diferentes implementaciones en dos niveles AND-OR .................... 18 Gráfico 5: Esquema lógico en dos niveles de una PROM ................................ 18 Gráfico 6: Esquema de una PLA ...................................................................... 19 Gráfico 7: Celda básica con plano AND programable y OR fijo, a la salida de cada función lógica se incorpora un FF ............................................................ 20 Gráfico 8: Arquitectura y celda lógica del Algotronix CAL ................................ 21 Gráfico 9: Esquema genérico de un PLD, plano AND variable, plano OR fijo, FF y realimentación ............................................................................................... 21 Gráfico 10: Interconexión de bloques dentro de un PLD .................................. 22 Gráfico 11: Esquema interno de una FPGA ..................................................... 23
ÍNDICE DE TABLAS Tabla 1: Tabla de verdad de la complementación lógica .................... ............. 11 Tabla 2: Tabla de verdad de la suma lógica ..................................................... 12 Tabla 3: Tabla de verdad del producto lógico .................................................. 12
RESUMEN La arquitectura de computadores utiliza la lógica digital de dispositivos lógicos cuyas interconexiones pueden ser configuradas por parte del los usuarios para dar lugar a un diseño determinado. Actualmente, estos dispositivos se han convertido en componentes esenciales en todo diseño electrónico digital, desplazando a los tradicionalmente conocidos como componentes discretos sobre todo en los diseños de los computadores. La arquitectura tecnología de la lógica programable ha significado un cambio de paradigma en el diseño electrónico: un circuito que puede transformarse vía software; ofrece una mayor cantidad de ventajas y posibilidades dentro de los sistemas computarizados. Este cambio de contexto en la forma de diseñar ha producido importantes innovaciones en la forma de instituir la lógica computacional. En el presente ensayo, se exponen una serie de experiencias teóricas sobre la ingeniería en sistemas utilizando los múltiples conceptos en el área. Así, se plantea el estudio de un tema tecnológico como es la lógica digital, eligiendo como campo de aplicación la utilización de esta tecnología en la arquitectura de computadores. Se comenzará estudiando diferentes recomendaciones en la enseñanza de la ingeniería, profundizando los aspectos prácticos, de diseño y de aplicación. Luego se realiza una puesta al día en profundidad de la lógica digital y sus elementos afines, incluyendo los dispositivos, el proceso de diseño computacional y las herramientas utilizadas. Por último se presentan un conjunto de conclusiones que determine las experiencias en la arquitectura de computadores dentro de un nivel educativo y tecnológico.
Palabras claves: Arquitectura, computadoras, lógica, digital, diseño.
INTRODUCCIÓN A nivel universitario la enseñanza juega un rol muy importante cuando se busca la comprensión de temas dentro de la arquitectura de computadores, donde se investigación en áreas técnicas pero no se involucrando a la enseñanza conceptual a profundidad. Lo usual, académicamente hablando es mostrar el estado del arte en un tema y aplicarlo por medio de algún desarrollo, en el cual pueden intervenir algoritmos, modelos, software o hardware. El enfoque de este ensayo es presentar el estado del arte del diseño digital utilizando la lógica digital, y las aplicaciones y desarrollos innovadores en el ámbito computacional, que transformara la ingeniería en sistemas. Se plantea entonces el estudio de un tema tecnológico como es la lógica digital y su vinculación en el diseño y programación de computadores. Este abordaje implicó un desafío, por un lado dominar una disciplina y una determinada tecnología, y por otro combinar ese conocimiento con metodologías modernas para generar innovaciones tecnológicas – académicas, que vienen siendo aplicadas a cursos reales desde hace más de cinco años. Los aportes principales que determinan este trabajo son:
La puesta al día en la lógica digital, incluyendo dispositivos, el proceso de diseño y las herramientas utilizadas.
El estudio sobre diferentes recomendaciones en la enseñanza de la ingeniería haciendo hincapié en las actividades prácticas, de diseño y de laboratorio.
La recopilación de las experiencias de investigación y experimentación en metodologías de arquitectura de computadores.
Como resultados directos dentro de esta investigación se mencionan: La mejora de los conceptos teóricos sobre la arquitectura de
computadores.
Los dispositivos lógicos digitales tienen más de veinte años de existencia, y hoy en día es intolerante pensar en diseños digitales que no los utilicen, para lo cual es pertinente conocer su tema a profundidad.
Así, el autor (Hill, 2014), refiere: En sus comienzos estos dispositivos fueron utilizados para sustituir diseños realizados con lógica discreta y posteriormente para sustituir diseños fullcustom cuando los volúmenes de producción son bajos. Pero una de las mayores ventajas de estos dispositivos, que en sus orígenes no fue adecuadamente valorada, es la capacidad de ser reprogramados. Es en esta flexibilidad en donde se encuentra el mayor atractivo de esta tecnología, permitiendo pasar un diseño de la idea al silicio en tiempos muy cortos. (Pág. 79)
Dentro de este contexto (Britt, 2013, pág. 119) , “(…) la lógica digital permite obtener velocidades hardware con flexibilidad software. La posibilidad de reutilización del hardware programable abarata su costo ya que puede utilizarse exactamente el mismo hardware para varias aplicaciones cambiando exclusivamente su programación interna”. La tecnología de la lógica digital o reconfigurable ofrece, entonces un cambio de paradigma: hardware que puede modificarse vía software. De la misma manera que una computadora puede escribir datos en una memoria, la misma computadora puede grabar un determinado circuito dentro de un chip, y cambiarlo tantas veces como se quiera. El circuito se modifica internamente, sin la necesidad de que existan cambios físicos externos. El objetivo de este proyecto investigativo es conocer las distintas alternativas que ofrece este nuevo paradigma, incursionando en diversos aspectos del diseño con lógica programable aplicados en la mejora del diseño digital. El trabajo puede dividirse claramente en dos partes: aplicaciones a enseñanza básica y aplicaciones avanzadas. En la parte básica se presenta el diseño lógico digital con la introducción de una nueva modalidad de aplicación y en la parte avanzada se presentan experiencias en las que se desarrollaron aplicaciones realizadas con dichos elementos.
DESARROLLO Antecedentes Se sabe con certeza la importancia que tienen las actividades prácticas y las experiencias conceptuales del diseño en la enseñanza de la ingeniería en sistemas. El autor (Willdet, 2012, pág. 57) , refiere: “la ingeniería sin actividades prácticas es una disciplina diferente. (…) el diseño y las sesiones prácticas son el corazón de una educación en ingeniería ” Dentro del mismo contexto (Vela, 2014), cita: La forma más usual de enseñar a diseñar y de tener una significativa experiencia en diseño es con proyectos de diseño. A los estudiantes, usualmente se les da un problema de diseño y se les dice que lo diseñen. Puesto que los ingenieros aprenden a diseñar diseñando, este es ciertamente un procedimiento apropiado. Más aún, la gente recuerda las cosas que hizo. Nosotros podemos recordar nuestros proyectos de diseño (y nuestros laboratorios) veinticinco años después, pero no podemos recordar los detalles de las clases que recibimos. (Pág. 122)
En cuanto, a las herramientas de software a utilizar, el autor (Cesare, 2014), dicta: Una universidad que no utilice software profesional está preparando a los estudiantes para un tipo de trabajo que ya no existe. Creemos que esto mismo puede aplicarse tanto a las herramientas de software como hardware. Desde el punto de vista de un departamento la excelencia en la parte práctica es una fuente de orgullo. (Pág. 34)
En algunos casos la utilización de ciertas tecnologías permite la realización de casos prácticos y de experiencias de diseño con costos menores. Este es el caso del software por ejemplo, ya que con una computadora se pueden realizar una gran cantidad de experiencias diferentes. Un caso similar se plantea con los dispositivos lógicos programables, ya que la capacidad de reprogramación de los mismos hace que una misma plataforma pueda utilizarse para realizar múltiples experiencias.
Dentro del contexto numérico se utiliza el sistema de representación decimal, en tanto que, dependiendo del idioma, dispone de un alfabeto que representa estas letras. Siguiendo el mismo principio que guía al hombre, las computadoras tienen su propio sistema de representación. Debido a su construcción basada fundamentalmente en circuitos electrónicos digitales, utiliza un sistema binario. Esto obliga a transformar la representación de nuestra información, tanto numérica como alfanumérica, a una representación binaria para que la máquina sea capaz de procesarlos. Así, el sistema decimal como el binario están basados en los mismos principios. En ambos, la representación de un número se efectúa por medio de cadenas de símbolos, los cuales representan una determinada cantidad dependiendo de cada símbolo y la posición que ocupa dentro de la cadena con respecto al denominado punto (o coma) decimal. Por cuestiones de índole técnica, los circuitos electrónicos que conforman una computadora suelen estar capacitados para reconocer señales eléctricas de tipo digital; por lo tanto, se hace necesario que los métodos de codificación internos tengan su origen en el sistema binario, y con ellos se pueda representar todo tipo de informaciones y órdenes que sean manejadas por la computadora. En los circuitos electrónicos suele representarse la presencia de tensión (electricidad) en un punto de un circuito por medio de un 1, en tanto que 0 representa la ausencia de dicha tensión. En el próximo apartado comenzará realizando una comparación entre hardware y software en el contexto de ingeniería en sistemas, vinculados a la lógica matemática.
Los circuitos lógicos La lógica digital está fundamentada en la base matemática formada por el álgebra de (Boole, 1853). Este método de análisis consiste en que todos los elementos poseen únicamente dos estados (biestables) o dos valores, verdadero o falso (1 ó 0) que son opuestos entre sí, no permitiéndose nunca la adopción de estados intermedios. Estudiando las distintas asociaciones entre
ellos se obtienen las leyes generales sobre los procesos lógicos. Donde, (Shannon, 1920) aplicó estas técnicas de estudio, a los circuitos compuestos de elementos que solo pueden adoptar dos estados estables posibles, apareciendo entonces los llamados “circuitos lógicos”. Por lo expuesto anteriormente, el álgebra de (Boole, 1853) es el sistema matemático empleado en el diseño de circuitos lógicos, que permite identificar mediante símbolos el objeto de un circuito lógico de modo que su estado sea equivalente a un circuito real.
Operaciones lógicas de Boole Se definen básicamente tres tipos de operaciones sobre las variables del álgebra de (Boole, 1853) que son: La complementación lógica, la suma lógica y el producto lógico.
La complementación lógica El autor (Boole, 1853, pág. 155) , expresa: “Sea una variable booleana A, que por el hecho de serlo solamente podrá poseer dos estados ”. Si en un instante determinado posee el estado lógico 1, se dirá que su estado inverso o complementado será el 0. Si por el contrario la variable A posee el estado lógico 0, su complemento será el 1. El complemento de una variable A se representa simbólicamente por: Ā (con una barra encima de la variable). Otra forma de indicación puede utilizar el símbolo “⌐“ , adelante de la variable (⌐A).
Tabla 1: Tabla de verdad de la complementación lógica
Fuente: (Boole, 1853, pág. 176)
La suma lógica El autor (Boole, 1853, pág. 158), define: La operación lógica suma entre dos o más conjuntos (o variables booleanas) se representa mediante el signo "+". Por tanto si tenemos C = A + B, leeremos “el conjunto C es la suma de los conjuntos A y B”. Sin embargo suele leerse “C es igual a A o B”.
Esta operación se denomina también reunión de conjuntos y puede representarse también con el símbolo “v”.
Tabla 2: Tabla de verdad de la suma lógica
Fuente: (Boole, 1853, pág. 182)
El producto lógico La operación producto entre dos conjuntos se representa mediante el símbolo *, y da como resultado un conjunto formado por elementos comunes a dichos conjuntos. Esta operación se denomina también intersección de conjuntos y el símbolo habitualmente utiliza do es “^”. Por tanto se tiene que D = A * B representa un producto y se lee “D es igual a A por B”, o también “D es igual a A y B.”
Tabla 3: Tabla de verdad del producto lógico
Fuente: (Boole, 1853, pág. 182)
Puertas lógicas Existe un convenio gráfico para representar dispositivos (computacionales, electrónicos, hidráulicos, mecánicos, etc.) que lleven a cabo funciones booleanas elementales y que, en función de la combinación o combinaciones diseñadas, se obtendrán funciones más complejas. Las puertas lógicas son dispositivos computacionales que desarrollan las funciones booleanas y son básicamente: Puertas OR, AND, NOT, NOR, NAND, OR Exclusiva y NOR Exclusiva.
Las puertas OR Desarrollan la suma booleana. Su símbolo gráfico está representado en gráfico 1, donde se puede apreciar que se trata de una puerta OR de dos entradas y que a su salida proporciona la suma lógica de ambas. Su tabla de la verdad corresponde evidentemente a la suma booleana.
Gráfico 1: Puerta OR
Fuente: (Boole, 1853, pág. 211)
Si se desea tener una puerta OR de tres entradas no se tendrá más que añadir una tercera línea de entrada y su salida dará la suma de las tres variables de entrada.
Las puertas AND Corresponden
al
producto
booleano
de
las
variables
de
entrada,
proporcionando el resultado en su línea de salida. Su símbolo lógico puede verse en el gráfico 2.
Gráfico 2: Puerta AND
Fuente: (Boole, 1853, pág. 221)
Como se puede apreciar, se trata de una puerta AND de dos entradas, si se desea tener una puerta AND de tres entradas se tiene que añadir una tercera línea en la entrada obteniendo en la salida el producto lógico de las tres variables de entrada.
Las puertas NOT Realizan la función complementación o inversión. A estas puertas se las denomina generalmente inversores. Su representación simbólica es la mostrada en el gráfico 3, aunque en realidad, la inversión propiamente dicha se representa únicamente por el círculo final del símbolo mostrado, siendo la parte triangular la representación de un amplificador de señal (buffer) que no invierte ni complementa la entrada.
Gráfico 3: Puerta NOT
Fuente: (Boole, 1853, pág. 221)
Dispositivos lógicos Los dispositivos lógicos digitales son definidos como “(…) circuitos lógicos digitales en los cuales el usuario puede grabar el circuito a implementar ” (Moreno, 2004, pág. 73). Los dispositivos lógicos digitales pueden clasificarse de acuerdo a la tecnología utilizada en su emisión y fabricación, que estará
directamente asociado a la forma de programarse, y de acuerdo a su complejidad. Estas clasificaciones no son ortogonales ya que la tecnología utilizada además de determinar el tipo de programación posible determinará, junto con la densidad y la arquitectura interna, el grado de complejidad del dispositivo. La primer idea de implementación de un dispositivo lógico reprogramable, es decir con programación dinámica, es atribuida a Wahlstrom que propone un circuito con estas características. La tecnología de integración de circuitos utilizada en esa época no permitía incluir gran cantidad de transistores en un chip y por lo tanto la idea de Wahlstrom no tiene demasiada repercusión, ya que se debían utilizar una gran cantidad de transistores adicionales solo para programar el dispositivo. Pasaron casi dos décadas hasta que un dispositivo conceptualmente similar fuera desarrollado por Xilinx (1985). Así, aparecen los dispositivos programables con programación no volátil, y que en principio tienen una evolución propia, tanto en el modo de programación como en la estructura interna, que mayoritariamente están basados en lógica en dos niveles. Hoy en día la frontera entre CPLDs y FPGAs es mucho más borrosa, ya que por ejemplo una de las últimas familias de CPLDs desarrolladas por Altera, la familia MAX, si bien tiene programación no volátil, la misma está almacenada en una memoria Flash interna al chip, y se carga en una SRAM de configuración al inicializar el dispositivo.
Almacenamiento de la configuración La configuración de los dispositivos lógicos digitales debe almacenarse de algún modo dentro del dispositivo, si se analiza las diferentes formas de almacenamiento de la configuración, estos utilizan las mismas que para las memorias de almacenamiento de datos, y estas son: PROM (Programmable Read-Only Memory), o también llamados dispositivos OTP (One Time Programmable). Estos dispositivos solo pueden programarse una vez.
Tradicionalmente son dispositivos de bajo costo que se utilizan en producción una vez que el diseño a programar está terminado y probado. EPROM (Erasable Programmable Read-Only Memory). Estos dispositivos permiten múltiples programaciones permitiendo el borrado con luz ultra-violeta. EEPROM (Electrically Erasable Programmable Read-Only Memory). Similares a los anteriores, pero el borrado se realiza en forma eléctrica. Los dispositivos más primitivos se borran utilizando tensiones especiales más elevadas que los niveles lógicos utilizados por el dispositivo en funcionamiento. Las versiones más nuevas ISP (In System Programability) permiten el borrado y la nueva programación utilizando niveles lógicos de voltaje de modo que no es necesario extraer el integrado del sistema y ponerlo en un programador, sino que se puede programar en el propio sistema en el cual es utilizado. PLICE (Programmable Low-Impedance Circuit Element) Antifuse, esta tecnología es propietaria de Atmel y actúa al revés que un fusible: cuando no es programado es un aislante, cuando se programa se genera un camino de baja resistencia. ViaLink Antifuse es la tecnología utilizada por Quicklogic, funciona igual que el PLICE Antifuse, pero presenta menor resistencia y menor capacidad parásita. (300 ohms para el PLICE y 50 ohms para Vialink) Flash SRAM (Static Random Access Memory), las memorias Flash tienen la ventaja de ser eléctricamente borrables como las EEPROM pero utilizan celdas de menor tamaño parecidas a las utilizadas por las EPROM. SRAM (Static Random Access Memory). La programación se escribe exactamente igual que como se escriben datos en una RAM estática. Estos dispositivos son los que introducen el cambio cualitativo que los hace reconfigurables. Pueden ser reconfigurados repetidas veces en forma muy rápida, sin alterar la vida útil del dispositivo. Los dispositivos basados en SRAM son los únicos que permiten una configuración dinámica. Si bien en los demás dispositivos (excepto los basados en PROM y Antifuse), existe la posibilidad de configurarlos múltiples veces, la cantidad de configuraciones que aceptan está limitada a unas 10.000 y su
configuración es lenta. Por el contrario los dispositivos basados en SRAM permiten “infinitas” reprogramaciones y por lo tanto son los únicos que pueden
ser utilizados para aplicaciones de lógica reconfigurable, tanto en aplicaciones clásicas como en aplicaciones que requieran reconfiguración en tiempo de corrida (run-time). Algunos de los dispositivos basados en SRAM incorporan una característica extra que es la reconfiguración parcial. Esto quiere decir que se puede configurar una parte del dispositivo mientras el resto del mismo sigue en operación normal. La reconfiguración parcial tiene múltiples ventajas: permite tener varios diseños en un mismo chip y cambiarlos por partes, permite reducir el tiempo de programación de cada parte, y por lo tanto simplifica su utilización para reprogramaciones en tiempo de corrida. Los tiempos de configuración dependen de la cantidad de bits de configuración de cada chip y de la máxima frecuencia de reloj con la cual cada dispositivo puede ser programado. Para poner algún ejemplo cargar la configuración completa en un Xilinx XCV1000E, con unas 27.500 celdas lógicas, lleva aproximadamente 12,5 ms. Las últimas innovaciones en configuración de dispositivos incluyen la compresión/descompresión del flujo de datos de configuración como forma de ahorrar tiempo y espacio de almacenamiento; y el encriptado de los datos para proteger los diseños. También se han incluido formas de programación remota para poder actualizar versiones en sistemas ya diseñados.
Arquitecturas de dispositivos programables Primero se observará tres tipos de dispositivos basados en estructuras ANDOR, o más genéricamente diseños en dos niveles, que pueden resumirse en el siguiente gráfico:
Gráfico 4: Diferentes implementaciones en dos niveles AND-OR
Fuente: (Moreno, 2004, pág. 105)
Prog rammable R ead Only Memory P R OM
Las memorias usualmente se utilizan para almacenamiento de datos, pero pueden ser vistos como circuitos digitales que pueden implementar funciones booleanas. Desde el punto de vista lógico una memoria PROM de N bits de direcciones está constituida por un primer nivel de compuertas ANDs completo (todos los minitérminos posibles), y un segundo nivel de compuertas OR (tantas como salidas) programable. Con esta configuración es posible implementar cualquier función lógica de N variables. Las primeras PROMs fueron desarrolladas por Harris en 1970, y en 1971 Intel introduce las EPROMs borrables con luz ultravioleta.
Gráfico 5: Esquema lógico en dos niveles de una PROM
Fuente: (Moreno, 2004, pág. 114)
El problema con la utilización de PROMs para la implementación de funciones booleanas es que usualmente son dispositivos de baja velocidad. Pr og rammable Log ic A rray PL A
Los primeros dispositivos lógicos programables comerciales fueron las PALs. Estos dispositivos estában pensados para implementar funciones lógicas en dos niveles AND-OR, pero no tenían el plano AND completo, sino programable. De esta forma no es posible implementar cualquier función lógica de un determinado número de entradas sino sólo aquellas funciones que sean minimizables y puedan ser representadas con la cantidad de términos producto disponibles dentro del chip. El segundo nivel o plano OR también es programable.
Gráfico 6: Esquema de una PLA
Fuente: (Moreno, 2004, pág. 114)
Estos dispositivos fueron comercializados a principios de los ‘70s pero no
tuvieron mayor éxito debido a su baja performance, a su alto costo y a que no existían herramientas CAD que corrieran en computadores de bajo costo. PA Ls (Pr ogr ammable A rray Log ic)
Los PALs introducidos en 1978 por Monolithic Memories Inc (MMI), fueron la segunda generación de dispositivos desarrollados y básicamente son una simplificación de los PLAs. Este tipo de dispositivos mantiene la estructura de dos planos AND-OR, pero mientras el plano AND es programable, el plano OR
se simplifica y pasa a ser fijo. Al reducir las interconexiones programables se logra mayor velocidad.
Gráfico 7: Celda básica con plano AND programable y OR fijo, a la salida de cada función lógica se incorpora un FF
Fuente: (Moreno, 2004, pág. 119)
Estos dispositivos tuvieron mayor éxito comercial que los anteriores y se utilizaron ampliamente en la sustitución de diseños realizados con lógica discreta del tipo “glue -logic”.
Además de poder realizar funciones booleanas se agrega un flip-flop por cada compuerta OR, de modo de poder realizar circuitos secuenciales. Así aparece el concepto de celda, macrocelda (macrocell) o CLB (Configurable Logic Block), un bloque programable capaz de implementar una determinada función lógica más una celda de memoria o flip-flop. C ellular A rrays
Otro tipo de dispositivos programables que presenta un enfoque diferente de los vistos anteriormente, están formados por un conjunto de elementos simples interconectados entre sí, pero en ellos las interconexiones son básicamente fijas, siendo programable la función que realiza cada elemento. Antecedentes de cellular arrays pueden encontrarse a fines de los años ’60 y principios de los ’70 pero sus primeras versiones comerciales datan de mucho
tiempo después, a fines de los ’80, donde Algotronix desarrolla el dispositivo llamado Cellular Array Logic or CAL.
Gráfico 8: Arquitectura y celda lógica del Algotronix CAL
Fuente: (Moreno, 2004, pág. 143)
En el gráfico anteriorer se puede ver el arreglo bidimensional de bloques, llamados Configurable Logic Block, or CLBs. Un CLB puede realizar cualquier operación booleana de dos entradas e interconectarse con los bloques vecinos. La configuración del dispositivo era dinámica, basada en RAM. PLDs (Programmable Logic Device) y CPLDs (Complex Programmable Log ic D evice)
Los CPLDs son herederos directos de las PALs y se clasifican en la misma categoría. La celda básica es igual y está realizada en dos niveles AND-OR, con el primer nivel AND programable y el nivel OR fijo; y con el elemento de memoria o Flip-Flop a la salida del OR. El almacenamiento de la programación es por EEPROM o Flash.
Gráfico 9: Esquema genérico de un PLD, plano AND variable, plano OR fijo, FF y realimentación
Fuente: (Moreno, 2004, pág. 157)
Permiten la realimentación de la salida de una celda hacia la matriz de interconexión; de esta forma se puede lograr sintetizar funciones lógicas complejas de más de dos niveles o máquinas de estados si se realimentan las salidas de los FF.
Gráfico 10: Interconexión de bloques dentro de un PLD
Fuente: (Moreno, 2004, pág. 168)
Poseen matrices de interconexiones programables, y usualmente las celdas están agrupadas en una estructura jerárquica, con conexiones rápidas entre vecinos. Hay una diferenciación de bloques de entrada-salida. FP G A s (Fi eld Prog rammable G ate A rray)
En 1984 Xilinx desarrolla un nuevo dispositivo que denomina Logic Cell Array (LCA), basado en un concepto diferente a los PLDs. Los LCAs están compuestos de una gran cantidad de celdas lógicas cuya función es programable, dichas celdas pueden ser interconectadas mediante conexiones programables de varios tipos. Estos dispositivos y sus desarrollos posteriores dan origen a las hoy llamadas FPGAs. Las FPGAs están basados en una estructura regular de bloques de procesamiento e interconexiones programables, rodeados de bloques dedicados a entrada salida.
Gráfico 11: Esquema interno de una FPGA
Fuente: (Moreno, 2004, pág. 171)
Herramientas de software Las herramientas CAD (Computer-Aided Design) se definen como aquellas que realizan funciones de place and route, y layout; usualmente el término CAE (Computer-Aided Engineering) se aplica mayormente a simulación, síntesis y análisis de tiempos; aunque es usual utilizar ambos términos en forma intercambiable. El término EDA (Electronic Design Automation) engloba las dos definiciones anteriores Para diseñar con dispositivos lógicos programables es absolutamente necesario el uso de un conjunto de herramientas software de buena calidad, confiables y de fácil utilización. Estas herramientas son esenciales, tanto a nivel industrial como en la formación del ingeniero, en la medida que la integración progresa y ya no se puede acceder a los elementos básicos del hardware. Las herramientas utilizadas deben contar también con la capacidad de simular y verificar el diseño en diferentes niveles y etapas del mismo. Si se trabaja con lenguajes de especificación hardware, por ejemplo VHDL, la forma usual de simular es construir un test bench o banco de pruebas. El test bench se especifica también en VHDL e incluye como un componente el diseño en cuestión, generándole entradas y chequeando sus salidas. Un simulador VHDL
es capaz de ejecutar test-benches disponiendo, normalmente, de un conjunto de utilidades que facilitan la depuración de los modelos y la revisión de resultados.
Herramientas de alto nivel A medida que los diseños aumentan su complejidad aparece la necesidad de utilizar herramientas de mayor grado de abstracción para poder desarrollar aplicaciones cumpliendo con las exigencias de productividad. Es claro que cuando se aumenta el nivel de abstracción se gana en tiempo de diseño, pero se pierde en la optimización del mismo. Actualmente todavía la mayoría de los diseños se realizan utilizando lenguajes de descripción hardware, principalmente VHDL y Verilog, y existen estrategias específicas para manejar diseños de gran tamaño. La principal es partir el diseño en bloques más pequeños y diseñar adecuadamente la jerarquía de estos bloques así como las interfaces de los mismos. Muchos de estos bloques pueden estar pre-hechos como IP cores, o diseñarse una vez y reutilizarse. Las cosas se complican aún más porque hay que describir el comportamiento esperado del sistema para poder verificar los bloques diseñados. Si bien los HDLs permiten esto, no son los lenguajes más cómodos para ello. Si además el sistema incluye un microprocesador y por lo tanto software corriendo en él, entonces se plantea la idea de contar con un lenguaje único que sirva tanto para el hardware que va estar implementado en una FPGA como para el software del microprocesador. Cuando el sistema incluye un microprocesador y bloques hardware hay toda una disciplina que estudia cómo particionar los diseños llamada hardware/software codesign. Otro punto importante cuando se piensa en diseños que utilizan plataformas reconfigurables como aceleradores de cálculo, es que la mayoría de los algoritmos están especificados y probados en lenguajes de programación tales como C o Matlab y no en HDLs. Ha habido varios esfuerzos en incorporar lenguajes de programación al diseño con FPGAs, el problema principal es que estos lenguajes están concebidos para implementaciones secuenciales y no para representar el paralelismo inherente al hardware. Si bien hay una gran
cantidad de lenguajes de programación que han sido utilizados para sintetizar hardware en forma más o menos automática, el más utilizado es el C. Esto se debe al grado de difusión que tiene el C, y pueden mencionarse varios ejemplos de traductores de C a HDL. Las dificultades que se presentan hacen que siempre estos traductores no incluyan la sintaxis completa del C sino un subconjunto del lenguaje, y que además introduzcan diversas modificaciones o ampliaciones al C para representar adecuadamente el paralelismo. Otro punto interesante es la utilización de lenguajes de programación para realizar la verificación de un diseño. En lugar de diseñar un test-bench en HDL es posible describirlo en un lenguaje de programación. Se han desarrollado módulos de software que permiten enlazar simuladores HDL con paquetes clásicos de simulación de sistemas, un ejemplo es el vínculo entre Matlab y Simulink con ModelSim (simulador HDL). Esto permite desarrollar el entorno de pruebas (test benches) en un lenguaje de alto nivel, y “conectar” entradas y salidas hacia bloques de hardware descritos en HDL. Otra aplicación es la integración de bloques hardware descritos como HDL en modelos a escala de sistema.
CONCLUSIONES En la evolución de los dispositivos lógicos programables han jugado diversos factores, donde los dos principales han sido el aumento de la capacidad de integración en un chip y el desarrollo de buenas herramientas CAD. Ha habido una interacción de ida y vuelta entre el campo de aplicaciones en el cual estos dispositivos son aplicables y el desarrollo de los mismos. Un dispositivo de mayor tamaño y con mayores prestaciones de velocidad aumenta la cantidad de aplicaciones que pueden ser resueltas con él; pero a su vez los fabricantes de dispositivos diseñan los mismos teniendo en cuenta los potenciales usos futuros, aunque manteniendo la generalidad y flexibilidad. Hay ejemplos de dispositivos que no han tenido el éxito comercial esperado, como es el caso de la familia XC6200 de 72 Xilinx que se utilizó mucho pero solo a nivel académico. Así, se puede distinguir tres etapas en la evolución de los dispositivos y sus aplicaciones:
Los primeros dispositivos fueron utilizados para sustituir diseños realizados con lógica discreta TTL y CMOS. Las ventajas fueron claras, ya que utilizar dispositivos programables permite incluir en un único integrado toda la lógica de un determinado sistema, ahorrando espacio, y permitiendo modificaciones del diseño sin tener que modificar el circuito impreso.
Con la aparición de los dispositivos de mayor tamaño se amplió el campo de aplicaciones a diseños completos de circuitos secuenciales, máquinas de control o procesamientos de datos sencillos. El nicho de aplicaciones de esta etapa fue el prototipado rápido, los sistemas con especificaciones tempranas que van a evolucionar, pre-procesamiento de entradas, etc.
Con los dispositivos disponibles hoy en día es posible implementar aplicaciones completas y complejas dentro de un mismo chip (Soc, SoPC), sustituyendo aplicaciones que usualmente son realizadas en microprocesadores o DSPs, y obteniendo importantes mejoras en
velocidad. Es posible implementar aplicaciones de procesamiento de señales o microprocesadores completos dentro de una FPGA. Resulta interesante ver que si bien las FPGAs modernas incorporan un gran número de características nuevas: PLLs, bloques de RAM, multiplicadoresacumuladores, entradas-salidas de alta velocidad, cores de microcontroladores; la estructura básica del chip es la misma en los últimos 15 años. Es decir celdas con LUTs y flip-flops; y que varias de las implementaciones hardware, como los microprocesadores o los bloques aritméticos, pueden realizarse perfectamente con la estructura básica original.
BIBLIOGRAFÍA Boole, G. (1853). Lógica matemática. Estados Unidos: Harvard ediciones. Britt, M. (2013). Sistemas de programación digital. estados Unidos: Atlas ediciones. Cesare, A. (2014). Aplicación de programación . México D.F.: Quetzal ediciones. Hill, P. (2014). Programación lineal. Dallas - Estados Unidos: Golden Global ediciones. Moreno, M. (2004). Arquitectura de computadores. México D.F. : Pearson. Morris Mano, M. (2004). Arquitectura de computadores. México D.F. : Pearson. Shannon, C. (1920). Estructuras matemáticas. Estados Unidos: Nobel ediciones. Stallings, William. (2000). Organización y arquitectura de computadres. Madrid: McGraw-Hill. Vela, C. (2014). Sistemas informáticos. Lima - Perú: Atlas ediciones. Willdet, M. (2012). Experiencias conceptuales de computación. México D.F.: Quetzalt ediciones.