Lenguajes de implementación FPGA: de VHDL y Verilog a C/C++ de alto nivel
Nota del editor: Los algoritmos avanzados en productos inteligentes demandan sistemas embebidos que manejen cargas de procesamiento pesadas. FPGAs entregan el rendimiento necesario, yet muchos desarrolladores ven el diseño FPGA como dominio de especialistas. Hardware moderno, junto con entornos de desarrollo potentes, ha democratizado la programación FPGA. Este extracto del Capítulo 4 de Architecting High‑Performance Embedded Systems ofrece una visión exhaustiva de dispositivos FPGA, lenguajes usados para implementarlos y el flujo de desarrollo, culminando en guía práctica para empezar a construir sus propios diseños FPGA.
1: Recursos de hardware
2: Lenguajes de implementación (este artículo)
3: Proceso de desarrollo
4: Construyendo un proyecto
5: Implementación
Adaptado de Architecting High‑Performance Embedded Systems, por Jim Ledin.
Lenguajes de implementación FPGA
Diseñar para un FPGA implica en última instancia seleccionar uno o más lenguajes de alto nivel, tipo HDL, para describir el comportamiento del dispositivo.
Elecciones tradicionales son VHDL y Verilog. Toolchains modernos típicamente soportan ambos, más configuración por diagrama de bloques, y muchos aceptan ahora C/C++ como fuente para generación automática de HDL.
VHDL
VHSIC Hardware Description Language (VHDL) —VHSIC por Very High‑Speed Integrated Circuit— fue desarrollado bajo el Departamento de Defensa de EE. UU. en 1983. Su sintaxis recuerda a Ada, lo que lo hace verboso y fuertemente tipado. El lenguaje ofrece un conjunto fijo de tipos base como boolean, bit, bit_vector, character, string, integer, real, time y array, con todos los demás tipos construidos sobre estos primitivos.
IEEE 1164 define la librería estándar para VHDL, incluido el ubicuo tipo std_logic que representa señal de un bit. La siguiente tabla muestra los valores lógicos para std_logic:

0/1 fuerte denotan estados binarios conducidos, mientras señales débiles indican contención en bus. Z representa alta impedancia (salida CMOS desconectada), U es estado por defecto no inicializado, X indica sin driver y - marca entradas no usadas.
Diseños VHDL típicos empiezan importando la librería IEEE 1164:
library IEEE;
use IEEE.std_logic_1164.all;
En este capítulo usaremos VHDL como ejemplo, pero tanto VHDL como Verilog pueden expresar plenamente cualquier diseño sintetizable para FPGA.
Verilog
Introducido en 1984 y estandarizado como IEEE 1364 (2005), Verilog se modeló tras C para suavizar la curva de aprendizaje. En 2009 se fusionó con SystemVerilog para formar IEEE 1800‑2009, añadiendo extensas características de verificación sobre constructos HDL base.
El tipo wire de Verilog representa estados de señal 0, 1, don't-care (x) o alta impedancia (z), cada uno con fuerza fuerte o débil. Tanto VHDL como Verilog tienen subconjuntos sintetizables para diseño hardware, mientras constructos adicionales soportan simulación.
Por ejemplo, un bucle for no sintetizable se comporta como bucle software, iterando secuencialmente. Un bucle for sintetizable se desenrolla en copias de hardware en paralelo, espejo del conteo de iteraciones.
Diagramas de bloques
Más allá de HDLs textuales, suites FPGA modernas proveen editores gráficos de diagrama de bloques que permiten a diseñadores ensamblar sistemas complejos —como microprocesadores y I/O avanzado— sin escribir código de bajo nivel. La Figura 4.2 ilustra un diagrama de bloques Xilinx Vivado con un procesador suave MicroBlaze.
click for full size image
Figura 4.2 – Diagrama de bloques conteniendo microprocesador suave MicroBlaze
MicroBlaze es el soft-core de Xilinx disponible para familias Artix‑7 y otras. Aunque diagramas de bloques simplifican layout de sistema, la herramienta genera VHDL o Verilog tras bambalinas. Inspeccionar el código generado —ej. design_1_microblaze_0_0_stub.vhdl— revela la interfaz de entidad HDL:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity design_1_microblaze_0_0 is
Port (
Clk: in STD_LOGIC;
Reset: in STD_LOGIC;
Interrupt: in STD_LOGIC;
Interrupt_Address: in STD_LOGIC_VECTOR (0 to 31);
Interrupt_Ack: out STD_LOGIC_VECTOR (0 to 1);
Instr_Addr: out STD_LOGIC_VECTOR (0 to 31);
Instr: in STD_LOGIC_VECTOR (0 to 31);
Nota que este archivo define solo la interfaz del procesador; la lógica central se suministra como IP licenciada, a menudo en forma compilada para proteger propiedad intelectual.
C/C++
Varios vendedores proveen ahora herramientas de síntesis de alto nivel (HLS) que traducen C o C++ a HDL, permitiendo a desarrolladores portar algoritmos existentes a hardware FPGA. Aunque el FPGA subyacente corre en paralelo, el diseño generado a menudo mapea sentencias C/C++ secuenciales en máquinas de estado. Donde el código fuente ofrece oportunidades de paralelismo, el FPGA puede entregar aceleraciones significativas sobre un procesador convencional.
Toolchains modernos permiten VHDL, Verilog, diagramas de bloques e HDL derivado de HLS coexistir en un mismo proyecto. Equipos pueden mezclar lenguajes según habilidades, pero planificación cuidadosa es esencial para evitar sobrecarga de mantenimiento y asegurar sostenibilidad futura.
En la siguiente sección recorreremos el proceso estándar de desarrollo FPGA, desde concepto a implementación.
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:
- Diseño embebido con FPGAs: Recursos de hardware
- Herramientas open-source ayudan a simplificar programación FPGA
- Implementando algoritmos de punto flotante en FPGAs o ASICs
- 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
- Maximizando la producción con software avanzado de fabricación aditiva
- Programación de Sistemas Embebidos: Lenguajes, Arquitectura y Aplicaciones
- Diseño de Sistemas Embebidos: Pasos, Principios y Aplicaciones Reales
- Aprovechando IA embebida para convertir Big Data en insights inteligentes accionables
- Dominando USB‑C: desafíos de diseño y soluciones prácticas para datos de alta velocidad y potencia
- Tendencias de diseño embebido remodelando el futuro de la tecnología
- Acelerador FPGA de alto rendimiento para visión integrada con cámaras MIPI
- Foundries.io aspira a ser el Red Hat del IoT con soluciones Linux y Zephyr ágiles al procesador
- Clientron PST650: Terminal POS todo‑en‑uno con impresora térmica integrada para hostelería y retail
- MAXREFDES220# – Monitor de presión arterial sin manguito con sensores ópticos
- Microchip lanza PolarFire SoC FPGA defense‑grade con programa Early Access