Recursos hardware FPGA para sistemas embebidos de alto rendimiento
Nota del editor: A medida que algoritmos avanzados siguen emergiendo para diseños de productos inteligentes, desarrolladores a menudo luchan por implementar sistemas embebidos que cumplan demandas de procesamiento asociadas. FPGAs pueden entregar el rendimiento requerido, pero diseñar con FPGAs ha sido considerado dominio de expertos en programación FPGA. Hoy, sin embargo, la disponibilidad de FPGAs más potentes y entornos de desarrollo más efectivos ha hecho el desarrollo FPGA ampliamente accesible. En este extracto del Capítulo 4 de Architecting High‑Performance Embedded Systems, el autor ofrece una revisión exhaustiva de dispositivos FPGA, lenguajes de implementación y el proceso de desarrollo, así como un walkthrough detallado de cómo empezar a implementar FPGAs en su propio diseño.
1: Recursos de hardware (este artículo)
2: Lenguajes de implementación
3: Proceso de desarrollo
4: Construyendo un proyecto
5: Implementación
Adaptado de Architecting High-Performance Embedded Systems, por Jim Ledin.
Desarrollando su primer programa FPGA
Este capítulo comienza con discusión sobre uso efectivo de dispositivos FPGA en sistemas embebidos tiempo real y continúa con descripción de elementos funcionales en FPGAs estándar. Introduce la gama de lenguajes de diseño FPGA —incluyendo Hardware Description Languages (HDLs), métodos de diagrama de bloques y lenguajes de programación software populares como C y C++— y provee visión general del proceso de desarrollo FPGA. El capítulo concluye con ejemplo completo de ciclo de desarrollo FPGA, desde statement de requisitos de sistema a sistema plenamente funcional implementado en placa de desarrollo FPGA de bajo coste.
Tras completar este capítulo, entenderá cómo FPGAs pueden aplicarse en arquitecturas de sistemas embebidos tiempo real, componentes clave de un IC FPGA, lenguajes de programación usados para diseñar algoritmos FPGA, y secuencia paso a paso para desarrollar aplicación basada en FPGA. También recorrerá un ejemplo completo de desarrollo FPGA en placa de bajo coste usando herramientas software FPGA gratuitas.
Cubriremos los siguientes temas:
- Uso de FPGAs en diseños de sistemas embebidos tiempo real
- Lenguajes de implementación FPGA
- Proceso de desarrollo FPGA
- Desarrollando su primer proyecto FPGA
Requisitos técnicos
Los archivos para este capítulo están disponibles en https://github.com/PacktPublishing/Architecting-High-Performance-Embedded-Systems.
Uso de FPGAs en diseños de sistemas embebidos tiempo real
Como se describe en la sección Elementos de FPGAs del Capítulo 1, un dispositivo FPGA típico contiene gran número de lookup tables, flip-flops, elementos block RAM, slices DSP y otros componentes. Aunque es útil entender capacidades detalladas de cada componente, la consideración más crítica es que un número de parte FPGA específico contiene un número finito de cada recurso, y un diseño no puede exceder esos límites al targetear ese modelo particular.
Es más productivo ver el proceso de desarrollo desde la perspectiva del statement de requisitos del sistema embebido. Puede empezar targeteando un modelo que cumpla cómodamente esos requisitos. A medida que el diseño progresa, puede toparse con límite de recurso o descubrir que falta característica requerida. En ese punto, seleccionar target más capaz y continuar desarrollo es directo. Inversamente, si encuentra que el FPGA elegido tiene recursos excedentes, mover a parte menor puede reducir coste, conteo de pines, tamaño de paquete y consumo.
Cambiar el FPGA target dentro de la misma familia es típicamente seamless, con artefactos de diseño totalmente reutilizables. Cambiar familias o vendedores puede requerir esfuerzo adicional. La clave es que el modelo específico no necesita elegirse al inicio; enfóquese primero en validar FPGA como solución viable, luego seleccione vendedor y familia de dispositivo adecuados.
Proyectos de ejemplo en este libro usan la familia de herramientas Vivado de Xilinx. Aunque licencia Vivado se requiere para algunas familias Xilinx, los dispositivos Artix‑7 usados aquí son soportados gratis. Artix‑7 combina alto rendimiento, baja potencia y coste de sistema reducido. Familias y suites de herramientas similares están disponibles de otros vendedores.
El desarrollo FPGA es proceso involucrado que requiere gama de datos de análisis y diseño. Para mantener discusión concreta, usaremos Vivado a lo largo de este libro. Una vez domine estas técnicas, puede aplicarlas a herramientas de otros vendedores.
Las siguientes secciones discuten características diferenciadoras clave de familias y modelos FPGA, incluyendo capacidad block RAM, tipos de señal I/O, recursos especializados on-chip y presencia de núcleos de procesador embebidos.
Block RAM y Distributed RAM
Block RAM implementa regiones de memoria dedicadas dentro de un FPGA. Una región de memoria se especifica por su anchura de bits (típicamente 8 o 16 bits) y profundidad (número de ubicaciones de almacenamiento). Total block RAM se expresa usualmente en kilobits (Kb) y varía entre familias y modelos.
Muchos FPGAs también proveen distributed RAM, construida desde lógica de lookup-table para formar segmentos pequeños de 16 bits. Estos pueden combinarse en bloques mayores cuando se necesita. Distributed RAM es ideal para almacenamiento temporal de resultados intermedios, mientras block RAM se usa para cachés o buffers I/O.
Block RAM puede ser single-port o dual-port. Dual-port RAM, con dos puertos read/write, es especialmente útil para conectar subsistemas que operan a distintas velocidades de reloj, permitiendo transferencia de datos sin interferencia.
Block RAM puede operar en modo FIFO, proveyendo señales para full, empty, almost full y almost empty. Control cuidadoso de operaciones write y read previene pérdida o corrupción de datos.
Pines I/O FPGA y características asociadas
Pines I/O FPGA soportan variedad de estándares high-speed. Durante diseño, desarrolladores asignan funciones a pines específicos y configuran estándar de interfaz de cada pin. Señales son single-ended o diferenciales.
Señales single-ended referencian ground y históricamente usaban rangos TTL/CMOS. FPGAs modernos soportan rangos de voltaje más bajos —LVTTL (0–3,3 V) y variantes LVCMOS (1,2, 1,5, 1,8, 2,5, 3,3 V)— reduciendo consumo y mejorando velocidad. Estándares single-ended high-speed incluyen HSTL y SSTL.
Señalización diferencial, que usa par de pines, es preferida para enlaces high-data-rate porque ruido common-mode se cancela mayormente. Estándares diferenciales incluyen HSTL, SSTL y LVDS. LVDS, introducido en 1994, entrega corriente constante 3,5 mA y cambia dirección para representar bits de datos. Igualar impedancia de línea de transmisión (100 Ω para LVDS) a impedancia de terminación es esencial para evitar reflexiones.
Recursos hardware especializados
FPGAs a menudo incluyen hardware dedicado para funciones que benefician de implementación fija y eficiente:
- Interfaces DRAM dinámica externa, típicamente soportando DDR3
- Convertidores analógico-digitales
- Phase-locked loops para generar múltiples frecuencias de reloj
- Hardware MAC de procesamiento digital de señal
Hardware dedicado como unidades MAC entrega rendimiento muy superior al alcanzable con lógica sintetizada.
Núcleos de procesador
Algunas familias FPGA integran núcleos de procesador hard —por ejemplo, Xilinx Zynq‑7000 combina ARM Cortex‑A9 con fabric FPGA. Cuando un diseño no requiere hard core, un soft processor puede instanciarse desde recursos FPGA. Soft processors son altamente configurables pero típicamente no igualan rendimiento de hard cores.
La siguiente sección introducirá los lenguajes de programación primarios y métodos de entrada de datos usados para desarrollar algoritmos FPGA.
Reimpreso con permiso de Packt Publishing. Copyright © 2021 Packt Publishing
Jim Ledin es CEO de Ledin Engineering, Inc. Jim es experto en diseño, desarrollo y test de software y hardware embebido, y también destacado en evaluación de ciberseguridad y penetration testing de sistemas embebidos. Posee B.S. en ingeniería aeroespacial por Iowa State University y M.S. en ingeniería eléctrica y de computación por Georgia Institute of Technology. Jim es ingeniero eléctrico profesional registrado en California, CISSP, CEH y CPT.
Contenidos relacionados:
- Herramientas open-source ayudan a simplificar programación FPGA
- Implementando algoritmos de punto flotante en FPGAs o ASICs
- Aprovechando FPGAs para deep learning
- Herramientas software migran código GPU a FPGAs para aplicaciones IA
- FPGAs desplazan ASICs en Subaru Eyesight ADAS basado en visión
- Cómo FPGAs basados en flash simplifican requisitos de seguridad funcional
- Cosechando beneficios de FPGAs instant-on
- Configuración FPGA usando NOR flash de alta velocidad
- Cómo la tecnología FPGA evoluciona para cumplir nuevos requisitos mid-range
Para más Embedded, suscríbase al boletín semanal de Embedded.
Incrustado
- Evita sorpresas costosas en el diseño de hardware conectado: estrategias probadas
- Maximizando la producción con software avanzado de fabricación aditiva
- Eclipse IoT: Paquete open-source unificado para desarrollo rápido de IoT
- Diseño de Sistemas Embebidos: Pasos, Principios y Aplicaciones Reales
- Construyendo máquinas de estado con Desarrollo Dirigido por Pruebas en C embebido
- Aprovechando IA embebida para convertir Big Data en insights inteligentes accionables
- CWE de hardware impulsado por la comunidad: nuevo marco para identificar debilidades de seguridad en diseño
- Cypress mejora desarrollo IoT con soporte full device-to-cloud de ModusToolbox
- Lattice MachXO3D FPGA refuerza seguridad hardware con características Root‑of‑Trust
- MAXREFDES220# – Monitor de presión arterial sin manguito con sensores ópticos
- Java 9: Try-With-Resources Mejorado para Código Más Limpio