martes, 28 de julio de 2015

Elemento Básico de un FPGA: Celda de Configuración

    El elemento básico de un FPGA desde el punto de visto no-lógico, es decir que no tiene una función digital lógica, es la celda de configuración. Esta celda es la que va determinar la configuración de cada elemento lógico, por ejemplo si un flip-flop se va usar o no, y en caso de usarlo, si se configura como D o T. La celda de configuración también determina la configuración de los elementos de ruteo y de las interconexiones.

Existen en la actualidad cuatro tipos de celdas de configuración de un FPGA:
  • Celdas SRAM, para mantener la configuración de cada parte configurable del FPGA de forma volatil.
  • Una Celda llamada anti-fuse (anti-fusible), que consiste en una estructura microscópica la que, a diferencia de un fusible regular, esta normalmente abierta.
  • Celdas tipo Flash, que a diferencia de las SRAM, permiten mantener la configuración aún después de desconectada la alimentación del dispositivo (No Volátil). 
  • Celdas Combinadas de tipo Flash y SRAM. Las celdas Flash se usan para mantener los datos de configuración del FPGA y las SRAM para la configuración lógica del FPGA. 
FPGAs basados en celdas SRAM

Figura 1. Celda básica SRAM de configuración de los FPGAs de Xilinx

    La celda de configuración tipo SRAM se usa para mantener la configuración de cada parte configurable del FPGA. La gran ventaja de los FPGA basados en celdas SRAM es que utilizan un proceso de fabricación estándar. La ‘fabrica’ de FPGA-SRAM tiene un procedimiento de fabricación muy conocido, que es el usado en la fabricación de memorias SRAM, lo que debido a la enorme cantidad de memorias SRAM que se producen para el mercado digital, permite lograr costos de producción muy bajos, muy alta performance y trabajar con un proceso de fabricación muy amortizado y de gran rendimiento (yield).

     Como es sabido las celdas de memoria tipo SRAM pueden ser reprogramadas un sinnúmero de veces, del mismo modo un FPGA basado en celdas de configuración SRAM puede ser reprogramado un infinito número de veces, aún cuando el FPGAs ya esté montado y soldado en un circuito impreso (PCB). Esta reprogramación en PCB se denomina Programable En Circuito (In-Circuit Programmable, ISP). Esta tecnología SRAM es muy útil también para llevar a cabo una actualización rápida del sistema digital dentro del FPGA. Por ejemplo, algunos sintonizadores de televisión satelital usan FPGAs en su sistema para sus diversas funciones. Cuando por alguno motivo se necesita actualizar el sistema dentro del FPGA, se envía por satélite un nuevo archivo de configuración. La lógica del sintonizador, que interpreta el comando de actualización, procede a actualizar el archivo de configuración del FPGA (auto-actualización), evitando de este modo tener que cambiar el sintonizador. 

     La gran desventaja de las celdas SRAM es que son volátiles, lo que significa que aún un simple pulso espúreo (glitch) en la tensión de alimentación borraría la configuración del FPGA, quedando prácticamente sin ninguna funcionalidad hasta que se lo configure de nuevo. Otra desventaja es que, debido a que la selección del camino de conexión entre los diferentes bloques lógicos (llamado ruteo), se basa en celdas SRAM, se provocan grandes retardos de ruteo, lo que es un problema en diseños que requieren un rendimiento muy alto. Una desventaja más de estos dispositivos es que, en el producto final, una vez que el FPGA está en el PCB y listo para ser comercializado, necesita de una memoria externa pequeña (tipo Flash, serie o paralela) que mantiene el archivo de configuración del FPGA. El FPGA tiene una pequeña MEF que, cuando se le da tensión de alimentación, le indica al FPGA que tiene que ir a buscar la configuración del mismo a una memoria externa. Luego lee la información de la memoria y configura las celdas SRAM. Para algunas aplicaciones, como sistemas médicos de emergencia, este tiempo de lectura de la memoria y configuración es muy largo (50 ~ 500ms). Para otras aplicaciones, como interfaces series, este tiempo pasa desapercibido. 

FPGAs basados en celdas Anti-Fuse 

Figura 2. Vista microscópica del anti-fuse de Actel

   Otro tipo de FPGA usa una celda llamada anti-fuse (anti-fusible) como celda básica de configuración. Esta celda consiste en una estructura microscópica que, a diferencia de un fusible regular, está normalmente abierta. Está compuesta de tres capas, las conductoras arriba y abajo, y la aisladora en el medio (Metal-Insulator-Metal, MIM). Para configurar el dispositivo se hace circular una cierta cantidad de corriente (~5mA), lo que causa una gran potencia de disipación en un área muy pequeña, provocando el derretimiento del aislante dieléctrico (tipo Oxide-Nitride-Oxide, ONO) entre los dos electrodos conductores (SiO2, Dióxido de Silicio) formando una unión permanente muy fina de unos 20nm. La estructura anti-fuse fue creada y se usa habitualmente en ciertas familias de los FPGAs de la empresa ACTEL. Esta estructura es conocida como Programmable Logic Interconnect Circuit Element (PLICE). 

    La principal ventaja de los FPGA-Anti-Fuse es que no son volátiles, lo que para algunas aplicaciones es sumamente crítico, por ejemplo aplicaciones espaciales y aplicaciones médicas. También, debido a esta tecnología, los retardos de conexión entra los bloques lógicos son muy reducidos, por lo que el rendimiento de estos dispositivos es bastante elevado.

     Como desventajas se tienen: primero, que requieren un proceso de fabricación específico, bastante complejo, lo que lleva a que el costo de los mismos sea bastante elevado comparado con los FPGA-SRAM (como mínimo 200 veces más caros). También requieren un programador especial para poder programar el anti-fusible, y la mayor desventaja es que una vez que se han configurado con cierta lógica, ésta no se puede cambiar, lo que es conocido técnicamente como One Time Programmable (OTP). El hecho de que estos FPGAs sean OTP crea un proceso de verificación muy meticuloso de la lógica a ser programada, a fin de no tener que descartar este dispositivo tan caro por errores de diseño.

     Una de las principales aplicaciones de este tipo de FPGA es para sistemas espaciales, ya que estos FPGAs son tolerantes a las radiaciones de partículas de alta energía (los bits de configuración no pueden cambiar si son golpeados por una partícula). Como para tener una idea, un FPGA anti-fusible de término medio cuesta cerca de U$S2.000, mientras que uno de similares características tipo SRAM puede rondar los U$S 100. La diferencia de costos es abrumadora, claro que sí, está en juego la estabilidad, seguridad y confiabilidad de un satélite que puesto en órbita cuesta cerca de U$S270.000.000. No hay muchas opciones para elegir la tecnología a usar.

FPGAs basados en celdas FLASH

Figura 3. ACTEL Flash switch

    Los FPGA-Flash, tienen como ventaja lo mejor del FPGA-SRAM y del FGPA-Anti-Fuse, son reprogramables y no son volátiles. Sin embargo todavía son caros, ya que usan una tecnología más cara que la SRAM, y las celdas FLASH se usan no solo para guardar la configuración en si del FPGA, sino que también para todo lo que es ruteo, lo que hace que la cantidad de celdas FLASH por FPGA sea un gran número. Los procesos de fabricación de celdas FLASH recién ahora son más comunes. Actualmente en el mercado están apareciendo más opciones de estos dispositivos, sobre todo en los tamaños de FPGAs medianos-chicos, pero como la competencia es muy grande y a veces centavos marcan la diferencia, la demanda todavía no es considerable. Otra desventaja para los FPGAs FLASH es que el proceso de reconfiguración toma varios segundos.

     La Figura 3 detalla la estructura de una celda FLASH de la empresa ACTEL, que le llama FLASH Switch. Usa dos transistores que comparten la compuerta flotante, la que almacena la información de configuración. Uno es el transistor de sensado, el cual sólo se usa para escribir y verificar la tensión de compuerta flotante. El otro es el transistor de conexión (switching). Esta celda puede ser usada en el FPGA para conectar/separar rutas de conexiones o para configurar la lógica.

FPGAs basados en celdas Flash y SRAM 

    Finalmente hay algunos FPGAs que tienen celdas Flash y SRAM en el mismo dispositivo. Las celdas Flash se utilizan para guardar los datos de configuración del FPGA, mientras que las celdas SRAM para la configuración de la lógica del FPGA. Cuando se da tensión de alimentación, las celdas SRAM se configuran en forma casi instantánea desde la Flash, resultando una configuración del FPGA en menos de 1ms, a diferencia de un FPGA-SRAM cuyo tiempo de configuración típicamente va de los 50 hasta los 500 ms (dependiendo del tamaño del dispositivo). Esta disponibilidad casi instantánea del FPGA lo hace muy útil para aplicaciones críticas en tiempo. Estos FPGAs también permiten configurar solo las celdas SRAM, por ejemplo, durante el proceso de construcción del prototipo, sin tener que programar la Flash.

     Una gran ventaja, y que a veces es decisiva para el diseñador al elegir entre este tipo de FPGA o las FPGA-FLASH, es que, al no tener que acceder a un chip de memoria Flash externo, no hay una conexión física entre el FPGA y la memoria Flash que permita que la configuración del FPGA pueda ser expuesta, y de este modo vulnerada, para una posterior re-ingeniería (o ingeniería inversa) sobre el producto final. Se han descubierto muchos casos de productos copiados a través de la lectura de los datos de configuración (bitstream) disponibles en las rutas del circuito impreso que hay entre el FPGA y la memoria FLASH (éste problema también está presente en las FPGAs-SRAM). Por supuesto que estos dispositivos son un poco más caros que los FPGA-SRAM, pero más baratos que los FPGA-FLASH, ya que en este caso las celdas FLASH solo se usan para guardar la configuración, por lo que la cantidad de estas celdas es mucho menor que en el caso de FPGA FLASH. 

Ejemplos y Comparación 

Ejemplos de FPGA-SRAM: 

Xilinx Spartan/Virtex
Altera Cyclon/Stratix
Lattice EP/SC

Ejemplos de FPGA-Flash 

Actel Fusion/Igloo (ultra low power)

Ejemplos de FPGA-FLASH-SRAM 

Lattice XP family
Xilinx Spartan 3AN

Ejemplos de FPGA-Anti-Fuse 

Actel Sx/Mx QuicLogic pASIC

La Tabla 1 presenta una comparación entre las distintas tecnologías y las principales características de un FPGA.

Principales Caracteristicas de un FPGA



     Los FPGAs son dispositivos orientados a satisfacer una muy amplia gama de aplicaciones, desde simple lógica combinacional hasta sistemas con microprocesador embebido, transmisión tipo Ethernet, transmisión de datos series a 3.5Gb/s, todo con el mismo dispositivo. Por ello los FPGAs tienen características diversas, pero se podría decir que las principales son las siguientes:
  1. Gran cantidad de terminales de E/S. Desde 100 hasta unos 1400 terminales de E/S 
  2. Buffers de E/S programables: control de sesgo, control de corriente, configuración del estándar de E/S , pull-up y pull-down configurables 
  3. Gran cantidad de Flips-Flops, los dispositivos mas grandes tienen unos 40.000 FFs 
  4. Gran cantidad de Tablas de Búsqueda (Look-Up Tables), ~100.000 
  5. Bloques de Memoria (BRAM) de doble puerto, puerto simple, de hasta 18Mbits, configurables como RAM, ROM, FIFO y otras configuraciones 
  6. Bloques dedicados de Multiplicación 
  7. Transceptores para transmisión serie de muy alta velocidad , entre 1.5 a- 10.0Gb/s 
  8. Procesador en hardware embebido, tal como el Power-PC, ARM9 
  9. Procesadores descriptos en software, HDL, tales como el 8051, ARM3 
  10. Controladores de reloj tipo Delay Lock Loop (DLL) y Phase Lock Loop (PLLs) de hasta 550MHz. De 2 a 8 controladores por dispositivo 
  11. Control de impedancia programable por cada terminal de E/S 
  12. Interface DDR/DDR2 SDRAM soportando interfaces de hasta 800 Mb/s 
  13. Interfaz con estándares de E/S tipo diferencial tales como LVDS, SSTL diferencial, etc.
Nota: Algunas de estas terminologias pareceran complejas y dificiles de comprender, pero a medida que avancemos con la parte teorica sobre FPGA seran mas faciles de asimilar. Asi que esten pendientes de todas las entradas que se realizaran en el blog.

domingo, 26 de julio de 2015

Introducción a la Tecnologia FPGA

¿Qué es una FPGA?

     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.

Proyectos con Microcontroladores PIC

    Les presento varias Playlist de Videos en Youtube de los proyectos que han realizado mis estudiantes en años anteriores usando los Microcontroladores de la empresa Microchip y las herramientas de Software CCS Compiler y Proteus. Cada lista se detallara por año y según la asignatura en que los han realizado.

Espero que las ideas de proyectos sean de su agrado y puedan motivarlos para travesear un poco la programación y la electrónica.

Electrónica Digital


Electrónico de Potencia


Proyectos con FPGA


     Aquí recopilare todos los proyectos relacionados con FPGA que realice con mis estudiantes usando VHDL como principal lenguaje de Descripción de Hardware, la herramienta de Software ISE Design de Xilinx en su versión 14.7 con su debida simulación en ISIM y la implementación en la tarjeta de Desarrollo Basys 2 de Digilent.

Además de publicar los proyectos que encuentre en la web y que también estén relacionados con estos dispositivos programables.

Info Kit Basys 2


Videos Demostrativos encontrados en la WEB

Recomendaciones de Libros de Redes de Computadoras


     Desde lo mas basico como el modelo OSI hasta lo mas complejo como son los protocolos y las redes convergentes, aqui se podran libros de reconocidos autores que traten sobren el maravilloso mundo del Networking y las Redes de Computadoras.

Libros en Español

Redes de Computadoras - Un enfoque Descendente
James F. Kurose - Quinta Edicion

Descarga del Libro
https://mega.nz/#!VQA1hTDD!fYdwjqzfSSpGFCblKsUAvCat0w2Odq7r6A1t7PnzLsc
Libros en Ingles

Computer Networking - A top down approach
James F. Kurose - Sixth Edicion

Descarga del Libro
https://mega.nz/#!dMxQnSgJ!854Qs_GzfAkSS2lTkv1s4r1Ar9IW849YMbrdi2k3yeY

Recomendaciones de Libros Sist. Digitales


     Esta entrada sera en la que mas interes demostrare, ya que imparto esta asignatura dentro de la Universidad y me especializo en ella. Pondre la bibliografia que utilizo en mis clases y que han sido de utilidad para la asimilacion de conocimientos por parte de mis estudiantes.

Libros en Español

Sistemas Digitales Principios y Aplicaciones - Ronald Tocci
Decima Edicion

Descarga del Libro
https://mega.nz/#!EJQXVDyI!mHKbWZ_ZtSJb4_9J6JrDN7ODI_dEyFrDIIgy5Jq3RuM
Libros en Ingles

Digital Systems Principles and Applications - Ronald Tocci
Tenth Edition

Descarga del Libro
https://mega.nz/#!sYJmmCJJ!KcEhCIW1LHxdtKWkStkVxUlWv2nqlBjlvhhvyEiuwmg