Limitantes actuales de una tarjeta controladora
Hasta el día de hoy, existen muchas tecnologías de control industrial que tenemos a nuestra disposición. Usualmente podemos encontrar tarjetas controladoras de diversos tipos y configuraciones, como por ejemplo las tarjetas controladoras basadas en microcontroladores como los PICs o los ATMega en las Arduinos. O también existen módulos más especializados para el control industrial de alto grado como PLCs o sistemas DCS los cuales ya están diseñados para proyectos de automatización a gran escala.
Estos controladores basados en microcontroladores que ya conocemos por lo general están diseñados para trabajar en procesos industriales en los que varias acciones o instrucciones se están repitiendo cíclicamente y a velocidades no muy altas. Para estas tareas de automatización los microcontroladores son perfectos ya que su arquitectura y configuración está diseñada para trabajar de esa manera, además de que su complejidad de programación es relativamente sencilla.
Pero qué pasa cuando tenemos otro tipo de aplicaciones donde por ejemplo necesitemos varios procesos se estén desarrollando y corriendo simultáneamente y a altas velocidades, o por ejemplo, qué pasa si tenemos algún proyecto donde necesitamos desarrollar un circuito o sistema digital en específico que esté analizando señales de diferentes tipos a alta velocidades?
Un microcontrolador se nos quedaría corto debido por diferentes limitantes:
- Configuración predeterminada de fábrica: un microcontrolador internamente es diseñado y fabricado para seguir instrucciones cíclicamente y recibir y mandar ciertas señales de entrada y salida. Nosotros no podemos cambiar internamente cómo se procesan estas señales e instrucciones, solamente podemos programar cuándo y de qué manera se procesan las instrucciones.
- Limitación de velocidad: Los microcontroladores trabajan en conjunto con un reloj el cual define el tiempo o frecuencia en el que se procesan las señales. Usualmente este reloj tiene una limitante y está preestablecido por el fabricante.
- Un solo núcleo de configuración para el procesamiento: Claramente existen microcontroladores de mas de un nucleo, pero igualmente estamos limitados al número de núcleos que viene por fábrica, lo cual normalmente el microcontroladores como ATMega o PIC solamente contamos con un solo núcleo sin posibilidad de ejecutar instrucciones paralelas y simultáneas.
Para aplicaciones donde se necesita más velocidad y una configuración específica para diversas tareas, existen chips como los ASIC (Application Specific Integrated Circuit) los cuales están diseñados específicamente para tareas específicas, como por ejemplo una tarjeta gráfica para el procesamiento de gráficos, y se puede fabricar sin las limitantes de un microcontrolador, pero aun así seguimos con la limitante de que viene diseñado desde fábrica para una tarea en específico sin poder realmente cambiar mucho.
Después de leer esto, realmente hay una tarjeta que podamos personalizar a nuestro gusto una y otra vez y sin estar limitado por el hardware? Pues la respuesta podría ser simplemente utilizar una tarjeta basada en chip FPGA.
Definición y arquitectura de una tarjeta FPGA
Una tarjeta FPGA, o Field Programmable Gate Array por sus siglas en inglés Arreglo de Compuertas Programables de Campo, es una tarjeta de desarrollo que se basa en un chip o circuito integrado FPGA. Esta tarjeta tiene la peculiaridad de que no viene configurada ni programada por fábrica, es decir viene en blanco para que puedas crear cualquier circuito o sistema digital en ella.
Para saber un poco más acerca de su funcionamiento y cómo la podemos utilizar, explicaremos internamente como está diseñada. El circuito integrado FPGA está formado internamente por bloques lógicos programables que se encuentran interconectados entre sí por matrices de conexión y buses de datos, además de un bloque de entradas y salidas. Estos bloque lógicos programables se conforman de compuertas lógicas programables, una unidad de Flip flop para almacenar datos y un multiplexor.
Fig. 1 Arquitectura básica de una tarjeta FPGA
En este Bloque Lógico Programable se realizan las operaciones lógicas, y se podría decir que se manejan todas las compuertas lógicas existentes. Tenemos valores lógicos de entrada que ingresan al bloque y valores lógicos de salida resultantes de las operaciones del bloque. Ya depende del tipo de chip y del fabricante de cómo esté configurado cada bloque lógico, pero por lo general esta es la estructura que maneja.
Ahora, cada chip FPGA está formado por varios de estos bloques unidos entre sí por matrices de interconexión, o switch, que nosotros podemos modificar para cambiar la ruta en la que los datos se mueven. Es decir, nosotros podemos modificar el camino por el cual las señales de entrada se mueven por todo el chip FPGA, y así tener la posibilidad de crear una cantidad inmensa de circuitos y lógicas digitales, desde circuitos lógicos como desarrollar una compuerta AND hasta crear un procesador multi-core! IMPORTANTE: en un chip FPGA a diferencia de un microcontrolador no existe un procesador en el que podamos programar software y modificar sus instrucciones, más bien en un chip FPGA se “programa” su hardware interno para crear circuitos digitales.
Fig. 2 Ejemplo básico de un circuito hecho en una tarjeta FPGA. En la imagen superior se muestra una primera configuración, mientras que en la imagen inferior es la misma configuración pero con un camino diferente definido por el switch de interconexión.
En la figura 2 vemos un ejemplo de cómo se configura un chip FPGA a un nivel demasiado básico. Tenemos 4 elementos que entran en juego: El módulo de entrada (lado izquierdo) donde tenemos 3 señales de entrada con diferentes valores booleanos 1, 0 y 1, los bloques lógicos los cuales están configurados con 4 compuertas lógicas AND, OR, Buffer y NOT, el switch de interconexión, el cual define cómo se interconectan los caminos por donde van a transitar las señales, y el módulo de salidas (lado derecho) donde se muestran los resultados de las compuertas lógicas.
En la imagen superior de la figura 2 tenemos como resultado 0 y 0 en las señales de salida, pero si nos vamos a la imagen inferior vemos que los resultados ahora son 1 y 1, y esto es debido a que cambiamos los caminos de las señales mediante el switch de configuración.
Los bloques lógicos están conectados por el switch de interconexión el cual define cómo se conectan entre sí estos bloqueos. El punto de las tarjetas FPGA es que podemos modificar estas interconexiones y crear cualquier combinación digital posible para poder hacer prácticamente cualquier circuito digital.
El ejemplo anterior fue un pequeño circuito que se puede realizar con una tarjeta FPGA, pero como mencioné anteriormente podemos hacer cualquier circuito digital, incluso podemos simular un Arduino dentro de una tarjeta FPGA, o incluso fabricar nuestro propio microcontrolador Dual Core! Todo está en las habilidades para desarrollar.
Fig. Tarjeta de desarrollo Xilinx basada en FPGA
Por esto mismo una tarjeta FPGA se utiliza para aplicaciones de alto rendimiento y alto procesamiento de información.
Software vs Hardware: Cómo se programa una tarjeta FPGA.
Una tarjeta FPGA no se programa tal cual como un microcontrolador. Un microcontrolador cuenta con un microprocesador el cual se programa con software de bajo o alto nivel las instrucciones que se van a realizar, ya que su configuración necesita de programación de software para funcionar.
En una tarjeta FPGA es distinto. Principalmente se “programa” o se configura el hardware que tendrá la tarjeta, tal y como lo vimos en el ejemplo anterior. Básicamente se describe como es el arreglo interno del hardware dependiendo del circuito o sistema digital que queramos crear.
Se utiliza principalmente un entorno de desarrollo que nos ayuda a crear la descripción del hardware del FPGA, y el lenguaje utilizado es Hardware Description Language, o HDL. Los HDL más comunes son VHDL o Verilog.
Fig. Lenguaje VDHL utilizado para programar tarjetas de desarrollo FPGA
Aplicaciones de una tarjeta FPGA Las tarjetas FPGA actualmente son muy utilizadas para aplicaciones donde se necesite altas velocidades, multi procesamiento de datos o aplicaciones específicas en la industria IoT. Las aplicaciones más comunes son las siguientes:
- Procesamiento de señales en telecomunicación y redes
- Desarrollo de sistemas integrales en la industria aeroespacial y defensa
- En el desarrollo de tarjetas ASICs
- Sistemas de visión por computadora
Existen varios niveles de tarjetas desarrollo FPGA, por lo cual también podemos encontrar tarjetas diseñadas para el uso académico, en el cual son utilizadas para demostrar y explicar distintos conceptos y sistemas digitales, ya que se prestan para crear circuitos digitales y entender desde cero la lógica de ellos, como por ejemplo la Basys 3 Artix-7 de Digilent, en donde tenemos varios botones, switches, leds, displays y entradas y salidas para conectar periféricos y desarrollar básicamente cualquier circuito o lógica digital personalizado con la posibilidad de borrar el programa y empezar desde cero lo cual la hace perfecta para hacer pruebas y prototipos.
Fig. Tarjeta FPGA Basys 3 Artix-7 dedicada a un nivel básico.
Contáctanos
ventas@logicbus.com | soporte@logicbus.com | 55-5431-67-18 | Iniciar conversación