Las siglas FPGA significan Field Programmable Gate Array. Como su nombre indica, se trata de un dispositivo compuesto por una serie de bloques lógicos (compuertas, registros, memorias, flip/flops, etc) programables, es decir, la interconexión entre estos bloques lógicos y su funcionalidad no viene predefinida sino que se puede programar y reprogramar. Al utilizar bloques de lógica preconstruidos y recursos para ruteo programables, uno podrá configurar estos chips para implementar funcionalidades personalizadas en hardware sin tener que utilizar una taba de nodos o un cautín. Sólo deberá desarrollar código de programacion, para luego compilarlos en un archivo de configuración o bitstream que contenga información de cómo deben conectarse los componentes y programarlos en el dispositivo.
Los FPGA surgen de los conceptos desarrollados en los PAL y los CPLD. Este tipo de dispositivo está a medio camino entre los circuitos de propósito específico (ASIC) y los procesadores de propósito general en prestaciones, posibilidad de optimización, consumo de potencia, etc. Su principal ventaja frente a los diseños específicos es que son reprogramables, por lo que proporcionan una gran flexibilidad de diseño, que los costes de desarrollo y adquisición sean muy económicos, que el tiempo de desarrollo sea mucho menor y que exista la posibilidad de realizar reconfiguraciones dinámicas (durante el funcionamiento del dispositivo) del diseño.
La adopción de chips FPGA en la industria ha sido impulsada por el hecho de que los FPGAs combinan lo mejor de los ASICs y de los sistemas basados en procesadores. Ofrecen velocidades temporizadas por hardware y fiabilidad, pero sin requerir altos volúmenes de recursos para compensar el gran gasto que genera un diseño personalizado de ASIC. El silicio reprogramable tiene la misma capacidad de ajustarse que un software que se ejecuta en un sistema basado en procesadores, pero no está limitado por el número de núcleos disponibles. A diferencia de los procesadores, los FPGAs llevan a cabo diferentes operaciones de manera paralela, por lo que éstas no necesitan competir por los mismos recursos. Cada tarea de procesos independientes se asigna a una sección dedicada del chip, y puede ejecutarse de manera autónoma sin ser afectada por otros bloques de lógica. Como resultado, el rendimiento de una parte de la aplicación no se ve afectado cuando se agregan otros procesos.
Los Cinco Beneficios Principales de la Tecnología FPGA
1. Rendimiento
Aprovechando del paralelismo del hardware, los FPGAs exceden la potencia de cómputo de los procesadores digitales de señales (DSPs) rompiendo el paradigma de ejecución secuencial y logrando más en cada ciclo de reloj. El controlar entradas y salidas (E/S) a nivel de hardware ofrece tiempos de respuesta más veloces y funcionalidad especializada que coincide con los requerimientos de una aplicación.
2. Tiempo en llegar al mercado
La tecnología FPGA ofrece flexibilidad y capacidades de rápido desarrollo de prototipos para enfrentar los retos de que un producto se libere tarde al mercado. Se puede probar una idea o un concepto y verificarlo en hardware sin tener que pasar por el largo proceso de fabricación por el que pasa un diseño personalizado de ASIC. Posteriormente se podrá implementar cambios y realizar iteraciones de un diseño FPGA en cuestión de horas en vez de semanas. También existe hardware comercial listo para usarse (COTS) con diferentes tipos de E/S ya conectados a un chip FPGA programable por el usuario. El aumento en disponibilidad de herramientas de software de alto nivel disminuye la curva de aprendizaje con niveles de abstracción. Estas herramientas frecuentemente incluyen importantes núcleos IP (funciones pre-construidas) para control avanzado y procesamiento de señales.
3. Precio
El precio de la ingeniería no recurrente de un diseño personalizado ASIC excede considerablemente al de las soluciones de hardware basadas en FPGA. La fuerte inversión inicial de los ASICs es fácilmente justificable para los fabricantes de equipos originales que embarcan miles de chips por año, pero muchos usuarios finales necesitan la funcionalidad de un hardware personalizado para decenas o cientos de sistemas en desarrollo. La misma naturaleza programable del silicio implica que no hay precio de fabricación o largos plazos de ejecución de ensamblado. Los requerimientos de un sistema van cambiando con el tiempo, y el precio de cambiar incrementalmente los diseños FPGA es insignificante al compararlo con el precio de implementar cambios en un ASIC antes de su lanzamiento.
4. Fiabilidad
Mientras que las herramientas de software ofrecen un entorno de programación, los circuitos de un FPGA son una implementación segura de la ejecución de un programa. Los sistemas basados en procesadores frecuentemente implican varios niveles de abstracción para auxiliar a programar las tareas y compartir los recursos entre procesos múltiples. El software a nivel driver se encarga de administrar los recursos de hardware y el sistema operativo administra la memoria y el ancho de banda del procesador. El núcleo de un procesador sólo puede ejecutar una instrucción a la vez, y los sistemas basados en procesadores están siempre en riesgo de que sus tareas se obstruyan entre sí. Los FPGAs, que no necesitan sistemas operativos, minimizan los retos de fiabilidad con ejecución paralela y hardware preciso dedicado a cada tarea.
5. Mantenimiento a largo plazo
Como se mencionó, los chips FPGA son actualizables en campo y no requieren el tiempo y el precio que implica rediseñar un ASIC. Los protocolos de comunicación digital por ejemplo, tienen especificaciones que podrían cambiar con el tiempo, y las interfaces basadas en ASICs podrían causar retos de mantenimiento y habilidad de actualización. Los chips FPGA, al ser reconfigurables, son capaces de mantenerse al tanto con modificaciones a futuro que pudieran ser necesarias. Mientras el producto o sistema se va desarrollando, usted puede implementarle mejoras funcionales sin la necesidad de invertir tiempo rediseñando el hardware o modificando el diseño de la tarjeta.
Escoger una FPGA
Al examinar las especificaciones de un chip FPGA, se tiene que observar que generalmente están divididos en bloques de lógica configurables como segmentos o células de lógica, funciones fijas de lógica como multiplicadores, y recursos de memoria como RAM en bloque embebida. El chip FPGA tiene otros componentes, pero éstos son generalmente los más importantes cuando se seleccionan y comparan FPGAs para una aplicación en particular.
La Tabla 1 muestra especificaciones de recursos usados para comparar chips FPGA dentro de varias familias de Xilinx. El número de compuertas ha sido una forma típica de comparar el tamaño de los chips FPGA contra la tecnología ASIC, pero no describe realmente el número de componentes individuales dentro de un FPGA. Ésta es una de las razones por las cuales Xilinx no especificó el número de compuertas de sistema equivalentes en la nueva familia Virtex-5.
¿Cómo se programa una FPGA para que realice las funciones que nosotros deseamos?
Programar una FPGA es muy parecido a programar un procesador de propósito general, se realiza mediante un programador, el cual define la función lógica que realizará cada uno de los bloques lógicos de la FPGA e interconectarlos. Para ello debe utilizar alguno de los entornos de desarrollo especializados en el diseño de sistemas sobre FPGA. Si se trata de un diseño sencillo puede hacerse con un esquemático, si no, habrá que utilizar un lenguaje de programación especial HDL (Hardware Description Language) como VHDL o Verilog.
En los últimos años han aparecido lenguajes para diseñar sistemas en FPGA de un nivel mucho más alto, por lo que un diseñador poco experimentado tendrá mucho más fácil su trabajo. Con lenguajes como SystemC o HandelC, pasar de la implementación software en C de una aplicación a su diseño sobre una FPGA es mucho más rápido y sencillo.
No hay comentarios:
Publicar un comentario