Linguagens de Implementação para FPGA: Do VHDL e Verilog ao C/C++ de Alto Nível
Nota do Editor: Algoritmos avançados em produtos inteligentes demandam sistemas embarcados que possam lidar com cargas de processamento pesadas. FPGAs entregam a performance necessária, mas muitos desenvolvedores veem design de FPGA como domínio de especialistas. Hardware moderno, acoplado a ambientes de desenvolvimento poderosos, democratizou a programação de FPGA. Este trecho do Capítulo 4 de Architecting High‑Performance Embedded Systems oferece uma visão abrangente de dispositivos FPGA, linguagens usadas para implementá-los e o fluxo de desenvolvimento, culminando em um guia prático para começar a construir seus próprios designs FPGA.
1: Recursos de hardware
2: Linguagens de implementação (este artigo)
3: Processo de desenvolvimento
4: Construindo um projeto
5: Implementação
Adaptado de Architecting High‑Performance Embedded Systems, por Jim Ledin.
Linguagens de Implementação para FPGA
Projetar para um FPGA envolve, em última análise, selecionar uma ou mais linguagens de alto nível, tipo HDL, para descrever o comportamento do dispositivo.
Escolhas tradicionais são VHDL e Verilog. Toolchains modernos tipicamente suportam ambos, além de configuração por diagrama de blocos, e muitos agora aceitam C/C++ como fonte para geração automática de HDL.
VHDL
VHSIC Hardware Description Language (VHDL) — VHSIC significando Very High‑Speed Integrated Circuit — foi desenvolvido sob o Departamento de Defesa dos EUA em 1983. Sua sintaxe lembra Ada, o que o torna verboso e fortemente tipado. A linguagem oferece um conjunto fixo de tipos base como boolean, bit, bit_vector, character, string, integer, real, time e array, com todos os outros tipos construídos sobre esses primitivos.
IEEE 1164 define a biblioteca padrão para VHDL, incluindo o onipresente tipo std_logic que representa um sinal de bit único. A tabela a seguir mostra os valores lógicos para std_logic:

0/1 forte denotam estados binários driven, enquanto sinais fracos indicam contenção em um barramento. Z representa alta impedância (saída CMOS desconectada), U é o estado padrão não inicializado, X indica nenhum driver, e - marca entradas não utilizadas.
Designs VHDL típicos começam importando a biblioteca IEEE 1164:
library IEEE;
use IEEE.std_logic_1164.all;
Neste capítulo usaremos VHDL como exemplo, mas tanto VHDL quanto Verilog podem expressar completamente qualquer design sintetizável para FPGA.
Verilog
Introduzido em 1984 e padronizado como IEEE 1364 (2005), Verilog foi modelado após C para tornar a curva de aprendizado mais suave. Em 2009, fundiu-se com SystemVerilog para formar IEEE 1800‑2009, adicionando extensivos recursos de verificação sobre os construtos HDL centrais.
O tipo wire do Verilog representa estados de sinal 0, 1, don't-care (x) ou alta impedância (z), cada um com força forte ou fraca. Tanto VHDL quanto Verilog têm subconjuntos sintetizáveis para design de hardware, enquanto construtos adicionais suportam simulação.
Por exemplo, um loop for não sintetizável comporta-se como loop de software, iterando sequencialmente. Um loop for sintetizável é desenrolado em cópias de hardware paralelas, espelhando a contagem de iterações.
Diagramas de Blocos
Além de HDLs textuais, suites modernas de FPGA fornecem editores gráficos de diagrama de blocos que permitem designers montar sistemas complexos — como microprocessadores e I/O avançado — sem escrever código de baixo nível. A Figura 4.2 ilustra um diagrama de blocos Xilinx Vivado com um processador soft MicroBlaze.
clique para imagem em tamanho real
Figura 4.2 – Diagrama de blocos contendo microprocessador soft MicroBlaze
O MicroBlaze é o processador soft-core da Xilinx disponível para famílias Artix‑7 e outras. Embora diagramas de blocos simplifiquem layout de sistema, a ferramenta finalmente gera VHDL ou Verilog nos bastidores. Inspecionando o código gerado — por exemplo, design_1_microblaze_0_0_stub.vhdl — revela a interface de entidade 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);
Note que este arquivo define apenas a interface do processador; a lógica central é fornecida como IP licenciado, frequentemente em forma compilada para proteger propriedade intelectual.
C/C++
Vários vendors agora fornecem ferramentas de high-level synthesis (HLS) que traduzem C ou C++ para HDL, permitindo desenvolvedores portar algoritmos existentes para hardware FPGA. Embora o FPGA subjacente rode em paralelo, o design gerado frequentemente mapeia statements sequenciais C/C++ em máquinas de estado. Onde o código fonte oferece oportunidades para paralelismo, o FPGA pode entregar speedups significativos sobre um processador convencional.
Toolchains modernos permitem VHDL, Verilog, diagramas de blocos e HDL derivado de HLS coexistirem em um único projeto. Times podem misturar linguagens baseados em skill sets, mas planejamento cuidadoso é essencial para evitar overhead de manutenção e garantir sustentação futura.
Na próxima seção, percorreremos o processo padrão de desenvolvimento FPGA, do conceito à implementação.
Reproduzido com permissão da Packt Publishing. Copyright © 2021 Packt Publishing
Jim Ledin é CEO da Ledin Engineering, Inc. Jim é especialista em design, desenvolvimento e teste de software e hardware embarcados. Também é expert em avaliação de cibersegurança e penetration testing de sistemas embarcados. Possui B.S. em engenharia aeroespacial pela Iowa State University e M.S. em engenharia elétrica e de computação pelo Georgia Institute of Technology. Jim é engenheiro elétrico profissional registrado na Califórnia, CISSP, CEH e CPT.
Conteúdo Relacionado:
- Design embarcado com FPGAs: Recursos de hardware
- Ferramentas open-source ajudam a simplificar programação de FPGA
- Implementando algoritmos de ponto flutuante em FPGAs ou ASICs
- Ferramentas de software migram código GPU para FPGAs para aplicações de IA
- FPGAs deslocam ASICs no Subaru Eyesight ADAS baseado em visão
- Como FPGAs baseados em flash simplificam requisitos de segurança funcional
- Colhendo benefícios de FPGAs instant-on
- Configuração de FPGA usando NOR flash de alta velocidade
- Como tecnologia FPGA está evoluindo para atender novos requisitos de sistemas mid-range
Para mais Embedded, assine a newsletter semanal do Embedded.
Integrado
- Programação de Sistemas Embarcados: Linguagens, Arquitetura e Aplicações
- Design de Sistemas Embarcados: Passos, Princípios e Aplicações Reais
- Aproveitando IA Embarcada para Converter Big Data em Insights Inteligentes Acionáveis
- Dominando USB-C: Desafios de Design e Soluções Práticas para Dados de Alta Velocidade e Energia
- Tendências de Design Embarcado Remodelando o Futuro da Tecnologia
- Acelerador FPGA de Alto Desempenho para Visão Embarcada com Câmeras MIPI
- Clientron PST650: Terminal POS Tudo-em-Um com Impressora Térmica Integrada para Hotelaria e Retalho
- MAXREFDES220# – Monitoramento de Pressão Arterial sem Manguito com Sensores Ópticos
- Microchip Lança PolarFire SoC FPGA Defense-Grade com Programa de Acesso Antecipado
- Maximizando Produção com Software Avançado de Manufatura Aditiva