Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial Internet of Things >> Incrustado

Diseño embebido con FPGAs:Proceso de desarrollo

Nota del editor:a medida que continúan surgiendo algoritmos avanzados para diseños de productos inteligentes, los desarrolladores a menudo se encuentran luchando para implementar sistemas integrados capaces de satisfacer las demandas de procesamiento asociadas de estos algoritmos. Los FPGA pueden ofrecer el rendimiento requerido, pero el diseño con FPGA se ha considerado durante mucho tiempo limitado al ámbito de los expertos en programación de FPGA. Sin embargo, hoy en día, la disponibilidad de FPGA más potentes y entornos de desarrollo más efectivos ha hecho que el desarrollo de FPGA sea ampliamente accesible. En este extracto, Capítulo 4 del libro Architecting High-Performance Embedded Systems, el autor ofrece una revisión completa de los dispositivos FPGA, los lenguajes de implementación y el proceso de desarrollo de FPGA, así como un tutorial detallado de cómo comenzar a implementar FPGA en su propio diseño. El extracto completo se presenta en la siguiente serie de entregas:
1:Recursos de hardware
2:Idiomas de implementación
3:Proceso de desarrollo (este artículo)
4:Creación de un proyecto
5:Implementación

Adaptado de Architecting High-Performance Embedded Systems, por Jim Ledin.


El proceso de desarrollo de FPGA

Si bien los FPGA se utilizan en una amplia variedad de dominios de aplicaciones dispares, es posible identificar un conjunto de pasos de desarrollo que son ampliamente aplicables a cualquier proyecto de desarrollo de FPGA. Esta sección analiza los pasos habituales de desarrollo de FPGA en la secuencia en que ocurren normalmente durante un proyecto.

Definición de los requisitos del sistema

El primer paso para desarrollar un nuevo sistema, o al iniciar una actualización significativa de un sistema existente, es desarrollar una comprensión clara y detallada de lo que se supone que debe hacer el sistema. El proceso de definición de requisitos comienza con una descripción general de la funcionalidad prevista del sistema, los modos de funcionamiento y las características clave. Esta información debe redactarse en un lenguaje claro e inequívoco y debe compartirse con todas las partes interesadas en el éxito del esfuerzo de desarrollo. El objetivo de compartir los requisitos del sistema es lograr un consenso entre todas las partes en cuanto a la integridad y corrección de las descripciones.

Las descripciones de los requisitos deben completarse para incluir especificaciones para el nivel requerido de rendimiento del sistema en términos tales como tasas de muestreo de señales de entrada y tasas de actualización para los comandos de salida del actuador. Detalles adicionales como restricciones de tamaño físico, vida útil mínima de la batería y rangos de temperatura ambiental tolerables guiarán el proceso de diseño. En general, se debe desarrollar un conjunto completo de especificaciones que describa los umbrales mínimos de rendimiento para todos los parámetros del sistema que se consideran relevantes para el éxito general del sistema.

El conjunto completo de requisitos del sistema debe estar completo en la medida en que cualquier solución de diseño que cumpla con todas las especificaciones establecidas debe ser una solución adecuada. Si resulta que un diseño que satisface todas las especificaciones se considera inaceptable por alguna razón no relacionada, esto representa una falla en establecer completamente los requisitos del sistema.

Por ejemplo, si se determina que una solución técnicamente adecuada es demasiado cara de producir, es probable que la fuente del problema sea una falla en la definición completa de las restricciones de contención de costos durante el proceso de desarrollo de requisitos.

Una vez que se han definido y acordado los requisitos del sistema de nivel superior, generalmente es necesario dividir la configuración general del sistema en una colección de subsistemas, cada uno con un propósito cohesivo y su propio conjunto de requisitos descriptivos y especificaciones técnicas. En una arquitectura de sistema integrado en tiempo real, es probable que la capacidad de procesamiento digital se represente como un subsistema con una colección correspondiente de requisitos

Asignación de funciones a la FPGA

Si los requisitos para el procesamiento digital en la arquitectura de un sistema exceden las capacidades de los microcontroladores y microprocesadores que de otro modo serían adecuados para su uso en el sistema, puede ser apropiado considerar la incorporación de un FPGA en el diseño. Algunas arquitecturas de sistemas, particularmente aquellas que se benefician del hardware digital de alta velocidad que realiza operaciones en paralelo, son candidatas naturales para la implementación de FPGA. Otras arquitecturas de sistemas pueden tener un rendimiento adecuado con el procesamiento digital tradicional, pero puede haber valiosas oportunidades para aprovechar la flexibilidad y la extensibilidad que ofrece una implementación de FPGA durante una vida útil planificada que prevé actualizaciones sustanciales del sistema en el futuro.

Una vez que se ha tomado la decisión de incorporar una FPGA en el diseño, el siguiente paso es asignar las porciones de los requisitos de procesamiento digital del sistema general al dispositivo FPGA. Por lo general, esto incluye la especificación de las señales de entrada y salida de la FPGA, las tasas de actualización de las entradas y salidas y la identificación de los componentes con los que la FPGA debe interactuar, incluidas partes como los ADC y los dispositivos RAM.

Identificación de las características FPGA necesarias

Una vez definidas las funciones que debe realizar la FPGA, y con el conocimiento de las interfaces a otros dispositivos que la FPGA debe admitir, es posible desarrollar una lista de características que los dispositivos FPGA candidatos deben proporcionar.

Algunas familias de FPGA están diseñadas para aplicaciones de bajo costo y menos complejas y, por lo tanto, ofrecen un conjunto limitado de recursos para implementar la lógica digital. Estos dispositivos pueden funcionar con la energía de la batería y solo requieren enfriamiento pasivo. Otras familias FPGA más potentes admiten diseños digitales a gran escala y con todas las funciones, están diseñadas para funcionar al máximo rendimiento y pueden requerir enfriamiento activo continuo.

Los requisitos del sistema asociados con la aplicación integrada guiarán la selección de una familia FPGA adecuada para la aplicación. En este punto, es probable que no sea posible identificar un modelo de FPGA específico dentro de la familia preferida porque los requisitos de recursos de la implementación de FPGA no se han definido completamente. Sin embargo, con la experiencia, es posible identificar una pequeña cantidad de modelos FPGA que parecen adecuados para el diseño.

Además de los recursos FPGA para la implementación de circuitos digitales, muchos modelos FPGA incluyen características adicionales que pueden ser importantes para el diseño del sistema. Por ejemplo, un ADC integrado puede resultar útil para minimizar el recuento de piezas del sistema. La lista de características FPGA requeridas y deseadas ayudará a reducir aún más la selección de dispositivos FPGA apropiados para el sistema.

Implementación del diseño FPGA

Habiendo identificado un modelo FPGA candidato, y con la definición detallada de la funcionalidad asignada a la FPGA en la mano, es hora de comenzar la implementación del diseño FPGA. Esto generalmente implicará el uso de la suite de herramientas de desarrollo FPGA y, por lo general, consiste principalmente en desarrollar código HDL en el lenguaje preferido para el proyecto.

Si es apropiado, la implementación de FPGA podría comenzar con una representación de diagrama de bloques del diseño de FPGA de nivel superior. Según sea necesario, los componentes desarrollados en HDL o C / C ++ se pueden incorporar en el diseño del bloque para completar la implementación completa del sistema.

Alternativamente, también es común que los diseños de sistemas completos se desarrollen directamente en HDL. Para los desarrolladores familiarizados con el lenguaje y con una comprensión completa de las características y limitaciones del modelo FPGA en uso, esto puede conducir al resultado de diseño más eficiente en recursos y de mayor rendimiento.

El desarrollo de FPGA procede en fases a medida que el diseño inicial se especifica con más detalle hasta que se produce un archivo de programación para el dispositivo FPGA. Es común repetir estas fases varias veces para un proyecto grande, desarrollando una pequeña parte del diseño total durante cada paso por los pasos. Estas fases se describen en las siguientes secciones.

Entrada de diseño

Entrada de diseño es la fase en la que el desarrollador del sistema define la funcionalidad del sistema utilizando código HDL, diagramas de bloques y / o código C / C ++. El código y otros artefactos, como los diagramas de bloques, definen la funcionalidad lógica del sistema en términos abstractos. En otras palabras, los artefactos de diseño definen un circuito lógico, pero no definen cómo se integra con el resto del sistema.

Planificación de E / S

Planificación de E / S FPGA es el proceso de identificar los pines asignados para realizar funciones de E / S particulares y asociar cualquier característica del dispositivo, como el estándar de señal de E / S, que se utilizará para cada señal. Como parte del proceso de planificación de E / S, puede ser importante considerar cuestiones como la ubicación de los pines de E / S del paquete del dispositivo físico. Este paso es importante para minimizar las longitudes de traza de la placa de circuito impreso para señales de alta velocidad y para evitar forzar las trazas de señales de circuito a cruzarse innecesariamente.

La definición de requisitos de señal de E / S es una forma de restricción en el proceso de desarrollo de FPGA. La otra categoría de restricción principal consiste en los requisitos de tiempo que determinan el rendimiento de la solución FPGA. El proceso de síntesis de FPGA utiliza el código HDL y las restricciones del proyecto para desarrollar una solución FPGA funcionalmente correcta que satisfaga todas las restricciones definidas. Si la herramienta no puede satisfacer todas las restricciones, la síntesis fallará.

Síntesis

Síntesis transforma el código fuente en un diseño de circuito llamado netlist . La lista de conexiones representa el circuito construido a partir de los recursos del modelo FPGA objetivo. La lista de conexiones representa una versión lógica o esquemática del circuito. No define cómo se implementará el circuito en el dispositivo FPGA físico. Esto ocurre en el siguiente paso.

Lugar y ruta

El lugar El proceso toma los recursos de FPGA definidos en la lista de redes y los asigna a elementos lógicos específicos dentro de la FPGA seleccionada. Las ubicaciones de recursos resultantes deben satisfacer cualquier restricción que restrinja la asignación de estos elementos, incluidas las restricciones de E / S y las restricciones de tiempo.

Una vez que se han asignado ubicaciones físicas a los elementos lógicos durante el proceso de colocación, se configura un conjunto de conexiones entre los elementos lógicos durante la ruta proceso. El enrutamiento implementa todas las conexiones entre los elementos lógicos y permite que el circuito funcione como se describe en el código HDL. Una vez que se han completado las operaciones de lugar y ruta, la configuración de la FPGA está completamente determinada.

Generación de flujo de bits

El paso final en el proceso de desarrollo de FPGA es la producción de un archivo bitstream. Para lograr el mayor rendimiento, la mayoría de los dispositivos FPGA modernos almacenan su configuración internamente usando RAM estática ( SRAM ).

Puede pensar en la configuración SRAM de FPGA como un registro de desplazamiento muy grande, que contiene quizás millones de bits. El contenido de este registro de desplazamiento especifica completamente todos los aspectos de la configuración y operación del dispositivo FPGA. El archivo de flujo de bits producido durante el desarrollo de FPGA representa la configuración del registro de desplazamiento que hace que el dispositivo realice las funciones previstas especificadas por HDL y las restricciones. En términos de procesos de desarrollo de software tradicionales, el archivo bitstream es análogo a un programa ejecutable producido por un enlazador.

SRAM es volátil y pierde su contenido cada vez que se desconecta la alimentación del dispositivo. La arquitectura del sistema integrado en tiempo real debe proporcionar un medio para cargar el archivo de flujo de bits en la FPGA cada vez que se aplica energía. Por lo general, el flujo de bits se carga desde la memoria flash ubicada dentro del dispositivo o desde una fuente externa, como una PC, conectada al dispositivo durante cada ciclo de encendido.

Una vez completada la compilación del flujo de bits FPGA, el siguiente paso es probar la implementación para verificar que funciona correctamente. Este paso no es diferente de las pruebas necesarias al final de un proceso de creación de software tradicional.

Probando la implementación

El desarrollo de FPGA es susceptible a todos los tipos de errores que atormentan los esfuerzos tradicionales de desarrollo de software. Durante el desarrollo de FPGA, es probable que se le presenten muchos mensajes de error relacionados con la sintaxis incorrecta, intentos de utilizar recursos a los que no se puede acceder actualmente y muchos otros tipos de violaciones. Como en cualquier esfuerzo de programación, deberá identificar la fuente de cada error y solucionar el problema.

Incluso después de que la aplicación FPGA avanza con éxito a través de todas las etapas hasta la generación de flujo de bits, no hay garantía de que el diseño funcione según lo previsto. Para lograr un diseño exitoso en un calendario razonable, es absolutamente fundamental realizar las pruebas adecuadas en cada etapa del desarrollo.

La primera fase de la prueba debe ejercitar a fondo el comportamiento del código HDL para demostrar que funciona según lo previsto. El proyecto de ejemplo al final de este capítulo demostrará el uso del conjunto de herramientas Vivado para realizar una prueba exhaustiva de la lógica HDL en el diseño.

Una vez que se ha generado el flujo de bits, no hay sustituto para las pruebas integrales de la FPGA como se implementó en la configuración final del sistema. Esta prueba debe ejercitar a fondo todas las funciones y modos de la FPGA, incluida su respuesta a condiciones de error y fuera de rango.

En cada paso del proceso de diseño, desarrollo y prueba, el personal del proyecto debe permanecer en sintonía con la posibilidad de implementar características del sistema que sean susceptibles de comportamientos inapropiados en situaciones poco probables o raras. La aparición de este tipo de problemas puede representar errores que son extremadamente difíciles de duplicar y que pueden empañar para siempre la percepción del diseño del sistema integrado y la organización que lo produjo. Si realiza un excelente trabajo de prueba, la probabilidad de este resultado se reducirá sustancialmente.

La siguiente sección proporciona una descripción detallada de los pasos en el desarrollo, prueba e implementación de un proyecto FPGA simple usando la placa de desarrollo Arty A7 y el paquete de herramientas Xilinx Vivado.

Reimpreso con permiso de Packt Publishing. Copyright © 2021 Packt Publishing


Jim Ledin es el director ejecutivo de Ledin Engineering, Inc. Jim es un experto en diseño, desarrollo y pruebas de software y hardware integrados. También tiene experiencia en evaluación de ciberseguridad de sistemas integrados y pruebas de penetración. Tiene un B.S. Licenciado en ingeniería aeroespacial de la Universidad Estatal de Iowa y un M.S. Licenciatura en ingeniería eléctrica e informática del Instituto de Tecnología de Georgia. Jim es un ingeniero eléctrico profesional registrado en California, un profesional certificado en seguridad del sistema de información (CISSP), un hacker ético certificado (CEH) y un probador de penetración certificado (CPT).

Contenidos relacionados:

  • Diseño integrado con FPGA:recursos de hardware
  • Diseño integrado con FPGA:lenguajes de implementación
  • Las herramientas de código abierto ayudan a simplificar la programación FPGA
  • Implementación de algoritmos de punto flotante en FPGA o ASIC
  • Aprovechamiento de FPGA para el aprendizaje profundo
  • Las herramientas de software migran el código de la GPU a FPGA para aplicaciones de inteligencia artificial
  • Los FPGA desplazan a los ASIC en el ADAS basado en la visión de Subaru Eyesight

Para obtener más información sobre Embedded, suscríbase al boletín informativo semanal por correo electrónico de Embedded.


Incrustado

  1. Diseño a prueba de fallas
  2. Qué es la programación del sistema integrado y sus lenguajes
  3. Qué es Chatbot:proceso de diseño y su arquitectura
  4. Qué es el diseño de sistemas integrados:pasos en el proceso de diseño
  5. Conceptos básicos del sistema integrado y las aplicaciones
  6. Desarrollo de máquinas de estado con desarrollo basado en pruebas
  7. ADI muestra tecnologías para cada área del diseño de sistemas integrados
  8. Axiomtek:sistema integrado con conmutador PoE gestionado de capa 2 integrado
  9. IBASE:sistema delgado Mini-ITX con AMD Ryzen Embedded V1000 SoC
  10. MicroSys:Informática Edge integrada con CPU NPX LS1028A e IEEE TSN
  11. Todo con aditivo