lunes, 21 de octubre de 2013

1. Introducción al Diseño Digital utilizando un FPGA

¿Qué son los dispositivos lógicos programables?


Si hubiera un error aquí, ¿te animarías a buscarlo?
Para todos aquellos que hemos estudiado electrónica, ya sea como parte de un curso universitario o, como dicen, por amor al arte; una de las rutinas más tediosas al momento de diseñar sistemas digitales, aparte del proceso de diseño en si, era el testeo del mismo, implementándolo en un protoboard, empleando IC's con compuertas lógicas, cablecillos conectores, algunos diodos LED y tiempo, mucho... pero mucho tiempo, además de una considerable dosis de paciencia. Y el martirio no terminaba allí, pues muchas veces cuando el circuito armado no funcionaba acorde a las tablas de verdad pedidas, quedaba la heroica tarea de buscar el error entre la maraña de cables e IC's en el protoboard, verificar continuidad en cada punto... en fin, creo que hasta este punto todos entienden lo complicado que sería el diseñar sistemas digitales más complejos (si fuese un microprocesador, esta tarea sería incluso imposible) siguiendo el sacrificado procedimiento descrito líneas arriba.
Es acá donde los PLD's ("Programmable Logic Devices", Dispositivos de lógica programable) aparecen para sacarnos del problema. Básicamente, estos IC's contienen todo ese cableado internamente, y los configuras para que implementen la función lógica deseada. Por ahora no deseo profundizar más en esto, sino más bien darles una introducción al excitante mundo del diseño digital utilizando herramientas CAD, y en este caso, utilizando la IDE ofrecida por Altera, el quizá poco conocido Quartus II.

Cómo mencioné antes, un PLD es un IC que contiene muchas compuertas lógicas cuyas conexiones son configurables. Esto implica que sin haber configurado dichas conexiones previamente, un PLD no implementa ninguna función útil. Nuestra misión es, en este caso, determinar como realizar esas conexiones a fin de que el PLD haga lo que queramos (digitalmente hablando). Hasta este punto cabe decir que un PLD no es lo mismo que un microcontrolador. Un microcontrolador es un dispositivo programable en el que grabamos un programa. En un PLD la definición de programa no existe, pues lo que configuramos es hardware. En resumen, se podría decir que un microcontrolador es básicamente Software, mientras que el PLD es Hardware.

GAL, la primera respuesta para las pesadillas de implementación en el laboratorio.
Pero el término PLD abarca una gran cantidad de dispositivos. La primera PLD fue la PLA, cuyas siglas en inglés eran Programmable Logic Array, o arreglo de lógica programable (esto fue en 1970). Luego le sigue la PAL (Programmable Array Logic) o lógica de arreglo programable. Ambas básicamente eran arreglos de compuertas AND y OR cuyas conexiones se establecían mediante fundido de fusibles. Pero las que marcaron un hito fueron las GAL (Generic Array Logic). Estas eran similares a las PAL, pero añadían un sabroso ingrediente extra: podían ser borradas y reprogramadas. Esta característica ha hecho que hasta estos días se sigan usando. Se programan utilizando un lenguaje llamado ABEL, cuyas siglas significan en inglés Advanced Boolean Expression Languaje, o lo que en nuestro querido idioma sería algo como Lenguaje Avanzado de Expresión Booleana. Mediante este lenguaje lo que se hace es implementar las ecuaciones lógicas y las tablas de verdad que queremos configurar en el PLD. Imagínese haber dispuesto de una GAL en su laboratorio de circuitos digitales, la frustración, las horas que se habría ahorrado armando el circuito sobre el protoboard con el nudo en la garganta por esperar que funcione apropiadamente... Como sea, si quieren ahondar más en cómo consisten las arquitecturas de los dispositivos descritos anteriormente, en la web hay muchísimo material al respecto.


FPGA Stratix IV de ALTERA
El ABEL está bien, pero no se puede llegar a un nivel de abstracción muy elevado, debido a que básicamente es una implementación textual del álgebra de Boole. Pero quizá usted pueda preguntarse, ¿para qué querer más abstracción si solo es hardware? La respuesta la da la aparición de los CPLD, y posteriormente, de los FPGA. Los primeros son los llamados Complex PLD, o PLD complejos, y como su nombre lo indica, la complejidad radica en la cantidad de compuertas disponibles para configurar. Los segundos, sobre los que trataré de basar todos los diseños futuros, son los llamados Field Programmable Gates Array o Arreglos de Compuertas Programables en Campo (en campo, porque puede ser programado y reprogramado fuera de la fábrica, a diferencia de las llamadas ASIC, que se fabrican a medida en las fábricas, pero esa es otra historia).

Para contestar la pregunta anterior, imagínese implementar una tabla de verdad para un sistema digital con 8 entradas y 4 salidas. Ahora, imagínese desarrollar los mapas de Karnaugh para obtener las ecuaciones booleanas para cada salida. Ahora imagínese plantear lo mismo pero para dos vectores de entrada de 8 bits y un vector de salida de 4 bits. Vemos entonces que elevar el nivel de abstracción al programar se hace necesario a fin de no colapsar entre una marea de ceros y unos. Es entonces en donde aparece otra HDL (Hardware Description Languaje, lenguaje de descripción de hardware), y esa pasó a llamarse VHDL, cuyas siglas en inglés significan VHSIC HDL.

El VHDL es una mezcla de dos definiciones, por así decirlo: el VHSIC o Very High Speed Integrated Circuit, que en español significaría Circuito integrado de muy alta velocidad, y el ya conocido HDL. En resumen, VHDL es un HDL mejorado, creado por la IEEE para programar cualquier PLD y también ASIC (Con esta van dos veces que menciono ASIC, estas son las Application-Specific Integrated Circuit, o como lo sugiere su nombre, un IC de aplicación específica). 

Para finalizar esta introducción, resaltaremos las herramientas que usaremos: el VHDL como nuestro idioma para comunicarnos con el FPGA, el Quartus II que será nuestro traductor, y nuestro ingenio. A lo largo de los artículos que iré subiendo indicaré como desarrollar habilidad en las dos primeras herramientas. La última queda en sus manos pulir con esmero...     

Nota: Antes de avanzar más, sugiero al lector manejar definiciones básicas de circuitos digitales, a fin de que no encuentre trabas conceptuales cuando se vean casos de diseño. Si se presentara el caso, en la web hay muchísimas fuentes a las que acudir para eliminar cualquier duda. Además, como textos introductorios para cualquier interesado en seguir los artículos del blog, sugiero echarle un vistazo a los libros:  Sistemas Digitales: principios y aplicaciones de Ronald Tocci; y Fundamentos de Sistemas Digitales de Thomas Floyd.

2 comentarios: