Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial Internet of Things >> Integrado

Linguagens de Implementação para FPGA: Do VHDL e Verilog ao C/C++ de Alto Nível

Linguagens de Implementação para FPGA: Do VHDL e Verilog ao C/C++ de Alto NívelNota 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:

Linguagens de Implementação para FPGA: Do VHDL e Verilog ao C/C++ de Alto Nível

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
Linguagens de Implementação para FPGA: Do VHDL e Verilog ao C/C++ de Alto Nível
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


Linguagens de Implementação para FPGA: Do VHDL e Verilog ao C/C++ de Alto NívelJim 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:

Para mais Embedded, assine a newsletter semanal do Embedded.


Integrado

  1. Programação de Sistemas Embarcados: Linguagens, Arquitetura e Aplicações
  2. Design de Sistemas Embarcados: Passos, Princípios e Aplicações Reais
  3. Aproveitando IA Embarcada para Converter Big Data em Insights Inteligentes Acionáveis
  4. Dominando USB-C: Desafios de Design e Soluções Práticas para Dados de Alta Velocidade e Energia
  5. Tendências de Design Embarcado Remodelando o Futuro da Tecnologia
  6. Acelerador FPGA de Alto Desempenho para Visão Embarcada com Câmeras MIPI
  7. Clientron PST650: Terminal POS Tudo-em-Um com Impressora Térmica Integrada para Hotelaria e Retalho
  8. MAXREFDES220# – Monitoramento de Pressão Arterial sem Manguito com Sensores Ópticos
  9. Microchip Lança PolarFire SoC FPGA Defense-Grade com Programa de Acesso Antecipado
  10. Maximizando Produção com Software Avançado de Manufatura Aditiva