Sistemas Embebidos SoC - ELECTRÓNICA, SOFTWARE, CONTROL Y AUTOMATIZACIÓN

Vaya al Contenido

Sistemas Embebidos SoC

BLOG > Sistemas Embebidos

SISTEMAS EMBEBIDOS

SISTEMAS EMBEBIDOS, FPGA + MCU
System-on-Chip (SoC) basados en FPGA (Field Programmable Gate Array) fusionada con un microcontrolador MCU es una interesante plataforma que está empezando a aparecer más y más en todo el mercado de sistemas embebidos. Una de las razones es que integra el procesador, la memoria, la red de conexión en un solo chip, lo que provoca una menor demanda de potencia del sistema. Un SoC típico consta de un núcleo de procesador de 32 bits y muchas funciones seleccionables por un diseñador que permiten diseñar un sistema íntegramente a medida, reduciendo espacios y consumos de potencia a lo estrictamente necesario. Estas funciones incluyen la memoria, interfaces de bus, drivers E/S, decoders y soporte de red. A menudo los sistemas embebido son empleados en aplicaciones que requieren dar respuesta a eventos externos en tiempo real.

Hoy muchos productos embebidos son construidos empleado varios chips, haciéndolos más grandes, más caros y con mayores requerimientos de consumo eléctrico. Los Sistema on Chip (SoC) han existido un largo tiempo sobre placas ASIC (Application Specific Integrated Circuit), pero estos SoC son muy recientes, y gracias a la parte FPGA de los mismos y su capacidad intrínseca de reconfiguración permite reconfigurar gran parte del chip y por tanto el sistema, comiendo espacio a los ASIC cada vez más. De tal manera, que más y más compañías se están volcando en desarrollo de sistemas embebidos SoC (FPGA+uC) que hacen más fácil y económico el desarrollo y evaluación del producto, así como su futura evolución.
FIRMWARE FPGA
Definición Firmware
Firmware es el código que define el funcionamiento de un dispositivo electrónico a bajo nivel. Éste puede describir tanto el hardware del circuito, en cuyo caso vendrá dado en un lenguaje HDL o esquemáticos, o bien el software que controla el microcontrolador MCU, siendo entonces un programa desarrollado en un lenguaje como C o similar.
Existen distintos tipos de firmware dependiendo del dispositivo a diseñar. Este documento se centra en el diseño de la lógica programable, FPGA, del SoC.

Flujo de diseño
A continuación se muestra un diagrama de flujo de diseño de un dispositivo electrónico.



Lo primero que hay que hacer a la hora de diseñar un dispositivo electrónico es establecer de forma inequívoca su funcionalidad, establecer los requisitos que debe cumplir, etc. Una vez hecho esto se debe definir claramente qué parte de la funcionalidad se va a asignar al hardware y cuál al software. A continuación se realiza el diseño tanto del hardware (digital y  analógico en caso de ser necesario) como, de existir, del software. Finalmente, se integran todas las partes y se comprueba que funciona según los requisitos.

Este documento se centrará en el diseño del hardware digital, cuyo flujo de diseño es el siguiente:



Entrada de diseño
El diseño del hardware de una FPGA o un CPLD se puede realizar de varias maneras, existiendo la posibilidad de emplear varias de ellas simultáneamente si así se considera necesario.

Código HDL
Los lenguajes de descripción de hardware, HDL, son lenguajes de documentación de circuitos electrónicos que permiten detallar el funcionamiento y las conexiones del mismo.
Los lenguajes de descripción de hardware más extendidos son VHDL y Verilog. Ambos pueden modelar estructuras de hardware con la misma eficacia. La elección entre uno u otro suele basarse en preferencia personal del diseñador, herramientas disponibles y condiciones impuestas externamente.



Esquemáticos
Los esquemáticos describen un circuito electrónico mediante la conexión de señales y bloques.




Este método para diseñar hardware presenta ventajas sobre el HDL cuando se emplea para unir bloques entre sí. Sin embargo, la descripción funcional de un bloque es más efectivo diseñarla en HDL en vez de con puertas lógicas.

Diagramas de estados
En el caso de existir máquinas de estados en el sistema, puede resultar interesante diseñarlo mediante diagramas de estados, dejando a las herramientas que generen los archivos correspondientes a partir de éstos.


HERRAMIENTAS DE DESARROLLO
Los IP cores (núcleos de propiedad intelectual) son unidades de lógica diseñadas por una entidad que dispone de derechos de propiedad intelectual sobre ésta. El uso de estos bloques simplifica y agiliza el diseño de un circuito electrónico como una FPGA o un ASIC. Ejemplos de IP cores son las CPUs, UARTs, interfaces PCI  y controladores de Ethernet.

La finalidad de los IP cores es minimizar la aparición de problemas durante la etapa de diseño, disminuir el time-to-market del producto y reducir los costes que conlleva el desarrollo del mismo. El uso de estándares favorece la portabilidad de estos bloques. Los IPs más complejos requieren de software (en forma de APIs).

Los IP cores se pueden clasificar en tres grandes grupos, en función de su flexibilidad y portabilidad:
  • Hard cores: cuando un core va a ser utilizado en sistemas diferentes, debe ser posible adaptarlo sin realizar ningún cambio en él (o casi ninguno). Son por tanto muy poco flexibles, pero muy predecibles y fiables a la hora de implementarlos. Incluyen información del place and route. Un buen ejemplo de este tipo de cores son procesadores y memorias.
  • Firm cores: a mitad de camino entre los hard cores y los soft cores, son bloques configurables pero que también tienen algo de información del place and route. Tiene una flexibilidad limitada y una predictibilidad aceptable en la implementación.
  • Soft cores: suelen ser archivos HDL o netlist (lista de puertas lógicas y sus respectivas conexiones). Son altamente flexibles, pudiéndose personalizar de forma específica para cada aplicación. Son muy flexibles pero poco predecibles en la implementación.
  • Existen muchos fabricantes que proporcionan IPs. Además se ha creado una extensa biblioteca de IP cores de código abierto, con web IP core.

Síntesis de diseño
La síntesis del diseño recoge toda la información de los archivos de entrada del diseño y los agrupa en una o varias netlist, que consisten en un listado de las puertas lógicas del sistema y las conexiones entre éstas. En esta etapa es necesario conocer el dispositivo sobre el que se va a implementar el diseño de forma que las herramientas realicen la síntesis de forma óptima para dicho dispositivo. Esta optimización es importante ya que permite aprovechar los recursos de forma más eficiente.

Implementación del diseño
La implementación del diseño es un proceso que consiste en convertir las netlist en un archivo de configuración del dispositivo, denominado bitstream, que consiste como su propio nombre indica en una serie de bits que configuran las conexiones y la lógica de la FPGA.



Configuración del dispositivo
Finalmente, el bitstream es descargado a la FPGA para que ésta funcione de acuerdo al diseño.




Simulación funcional
Durante todo el proceso de diseño, es necesario ir realizando diversas simulaciones para comprobar que el diseño se ajusta a las especificaciones iniciales.
La simulación funcional consiste en comprobar que el funcionamiento del sistema es el indicado por los requisitos. Esta simulación suele realizarse habitualmente durante la entrada de diseño, aunque también se realiza en menor medida durante las fases de síntesis e implementación.
En esta simulación se asignan valores a las entradas del sistema, y se analizan las salidas, comparándolas con las salidas esperadas. Cualquier divergencia entre éstas implicará la modificación del diseño.




Análisis y simulación temporal
El análisis y la simulación temporal permiten comprobar que las especificaciones de tiempo.
Cuando se realiza una simulación funcional únicamente se analiza la función lógica que presentan las puertas lógicas implementadas de forma ideal. Sin embargo en la realidad las puertas lógicas presentan retardos que deben ser tenidos en cuenta ya que pueden afectar al comportamiento general del sistema. Por ejemplo existirá un camino de puertas lógicas, conocido como camino crítico, que presentará el máximo retardo del sistema debido a puertas lógicas, el cual delimitará la frecuencia máxima de funcionamiento del sistema. Si se hace trabajar a éste a una frecuencia superior a la permitida por el camino crítico puede presentar un comportamiento indeseado.

A continuación se listan algunos de los errores que la simulación temporal permite detectar:
    • Incumplimiento de especificaciones de tiempo.
    • Colisión de memorias RAM dual-port.
    • Cambios de funcionamiento en la post-síntesis e implementación.
    • Funcionamiento de caminos asíncronos.

Verificación en el dispositivo
Una vez descargado el bitstream en el dispositivo, hay que comprobar que efectivamente funciona según las especificaciones de los requisitos y los resultados de las diversas simulaciones realizadas durante el proceso. Para ello, es necesario poder extraer de alguna forma las señales internas de la FPGA para poder ser analizadas.

En diseños extremadamente sencillos pueden aprovecharse elementos de salida como LEDs o displays. Sin embargo, en circuitos con más complejidad esto será con toda seguridad insuficiente, siendo preciso disponer de herramientas de verificación más potentes.
Tradicionalmente se empleaba el sondeo mediante osciloscopio. Sin embargo, este método presenta el problema de que los osciloscopios muestran una cantidad limitada de señales, de forma que cuando se deseaba mostrar un conjunto nuevo de señales hay que realizar de nuevo todo el proceso de síntesis e implementación, redundando en una considerable cantidad de tiempo.




Actualmente existen herramientas de verificación on-chip, como ChipScope de Xilinx, que permiten el análisis de una gran cantidad de señales internas sin necesidad de dispositivos externos como osciloscopios, siendo más cómodas y sencillas de manejar, además de ser más flexibles y potentes.



Contacto
Explora

© 2018 Genera Soluciones Tecnológicas, S.L.
Todos los derechos reservados.
Aviso Legal

Síguenos
Regreso al contenido