O que são arrays de portas programáveis em campo (FPGAs)?

Um array de portas programáveis ​​em campo ou FPGA é um chip lógico que contém um array bidimensional de células e interruptores programáveis. Essencialmente, são circuitos integrados (ICs) que possuem uma matriz de blocos lógicos idênticos com interconexões programáveis.

Semelhante a como você pode pintar qualquer imagem em uma tela em branco, um FPGA permite que um engenheiro projete qualquer circuito digital. Basta gerar e baixar o arquivo bit e pronto.

Este é um desenvolvimento significativo em comparação com microcontroladores convencionais, que não suportam projetos maiores. Por exemplo, os microcontroladores 8051 usavam arquitetura Harvard com conjunto de instruções CISC. Os FPGAs não possuem esses conjuntos de instruções embutidos, proporcionando ao projetista maior flexibilidade.

Outra diferença: onde um microcontrolador possui uma CPU própria que inicia o controlador, retém memória e executa diversas tarefas, um FPGA não. Não consegue começar a funcionar sozinho devido à falta de arquitetura tradicional.

Imagem representacional de um dispositivo FPGA típico

Ilustração de um dispositivo FPGA típico.

Por que FPGAs?

Comparado com um microcontrolador, os FPGAs oferecem diversas vantagens. Conforme mencionado, eles são muito mais flexíveis do que a funcionalidade limitada dos controladores. FPGAs também possuem maior capacidade de memória.

A principal diferença entre os dois é que um FPGA controla o hardware, enquanto um microcontrolador controla o software. É por isso que o FPGA é normalmente programado em linguagens descritivas de hardware (HDLs).

Existem tecnologias semelhantes ao FPGA, embora com aplicações, portas e arquiteturas básicas diferentes. Por exemplo, circuitos integrados de aplicação específica (ASICs) também são programados por HDLs. A diferença é que eles são projetados para uma aplicação específica, enquanto os FPGAs oferecem a liberdade de executar qualquer projeto.

A vantagem dos ASICs é que eles funcionam mais rápido. Mas os FPGAs podem atuar como ASICs, o que é uma vantagem. Os FPGAs também têm a capacidade de reprogramar no caso de um bug. ASICs não conseguem fazer isso.

Outra tecnologia semelhante é encontrada em dispositivos lógicos programáveis ​​complexos (CPLDs). CPLDs têm as características de matrizes lógicas programáveis ​​(PALs) e FPGAs.

Aqui está uma comparação entre os dois:

1. Os CPLDs possuem memória não volátil, enquanto os FPGAs possuem memória volátil. Isso significa que ao “ligar”, um CPLD retém a memória, enquanto um FPGA exclui os dados anteriores. É por isso que um FPGA requer uma ROM externa. Os dados anteriores são, então, fornecidos ao FPGA quando ligado.

2. O elemento principal de um CPLD é uma macrocélula. Uma única macrocélula consiste em várias portas AND, um flip-flop D, um multiplexador e uma porta EX-OR. Eles estão conectados usando um bloco chamado interconexão programável. O elemento principal de um FPGA é uma tabela de consulta ou LUT. Em um dispositivo Xilinx, o LUT é um gerador de função que pode fornecer RAM e ROM síncronas de 16 × 1 bit. Os geradores de função são implementados como 4 LUTs de entrada.

3. Um CPLD tem cerca de 500 a 12.000 portas, um número muito menor que um FPGA. Tem entre 3.000 a 5.00.000 portões.

4. O custo de um FPGA é superior ao de um CPLD.

Geralmente é preferido um FPGA, que oferece mais flexibilidade com um maior número de portas. Esses recursos são importantes ao projetar circuitos complexos.

Arquitetura FPGA

Os blocos principais de qualquer arquitetura são blocos lógicos configuráveis ​​(CLBs) ou blocos lógicos, interconexão e linhas de E/S. Aqui está uma ilustração do FPGA:

Imagem gráfica mostrando a arquitetura FPGA

A arquitetura de um FPGA.

Um CLB é o bloco de construção básico de um FPGA. É uma célula lógica que pode ser configurada ou programada para executar funções específicas. Esses blocos de construção estão conectados ao bloco de interconexão.

Um CLB pode ser implementado usando LUT ou lógica baseada em multiplexador. Na lógica baseada em LUT, o bloco consiste em uma tabela de consulta, um flip-flop D e um multiplexador 2:1. Flip-flops são usados ​​como elementos de armazenamento. O multiplexador seleciona a saída apropriada.

Cada CLB é composto por um determinado número de fatias. As fatias são agrupadas em pares e organizadas em colunas. O número de CLBs em um dispositivo varia de acordo com o fornecedor e a família do dispositivo. Por exemplo, o FPGA Spartan 3E da Xilinx contém quatro fatias. Cada fatia é composta por duas LUTs e dois elementos de armazenamento.

A função da LUT é implementar lógica, enquanto os elementos de armazenamento dedicados podem ser flip-flops ou latches. Os CLBs são organizados em uma série de linhas e colunas.

Imagem digramtical do bloco de construção FPGA - CLB baseado em LUT

Ilustração de um bloco de construção FPGA, usando um CLB baseado em LUT.

Apresentação gráfica do CLB baseado em MUX - bloco de construção FPGA

Ilustração de um bloco de construção FPGA, usando um CLB baseado em MUX.

Figura explicando o arranjo de CLBs no Spartan3E FPGA

O arranjo de CLBs no FPGA Spartan3E.

A interconexão é a rede programável de caminhos de sinal existentes entre as entradas e saídas dos elementos funcionais de um dispositivo. Isso também é conhecido como roteamento.

Existem vários tipos de roteamento, incluindo roteamento local para interconexão entre:

  • LUTs
  • Flip-flops e matriz de roteamento geral
  • Roteamento de uso geral para interconexão entre linhas e colunas de CLBs
  • Roteamento de E/S para fins de troca ou bloqueio de pinos

As opções de roteamento permitem a adoção de novos designs no layout de PCB existente. Outros métodos de roteamento incluem fontes de roteamento dedicadas para melhorar o desempenho, o relógio distribuído de roteamento global e outros sinais.

Diagrama transversal da técnica de interconexão direta usada em dispositivos FPGA

Um diagrama transversal de uma técnica de interconexão direta usada em dispositivos FPGA.

Os blocos de entrada/saída (IOBs) oferecem interfaces programáveis ​​unidirecionais ou bidirecionais entre os pinos do pacote e a lógica interna do dispositivo.

Existem três sinais presentes em um IOB:

1. O caminho de entrada para transportar dados do pad para a respectiva linha.
2. O caminho de saída que transporta dados da lógica interna para o bloco IOB por meio de um multiplexador e um driver de três estados.
3. O caminho de três estados, que determina o estado de alta impedância do driver de saída

Todos os sinais vêm com a opção de inversor.

Diagrama transversal da técnica de interconexão direta usada em dispositivos FPGA

Um bloco de entrada/saída Spartan2 FPGA.

RAM distribuída e em bloco
RAM distribuída e em bloco são encontradas principalmente em dispositivos Xilinx. A maioria dos blocos lógicos configuráveis ​​ou CLBs em um dispositivo Xilinx contêm uma pequena quantidade de RAM que é uma porta única ou dupla. É chamada de RAM distribuída porque está espalhada pelo FPGA em vários LUTs.

Uma desvantagem da RAM distribuída é que ela não pode ser usada para projetos maiores, pois um único CLB é insuficiente. Porém, é possível implementar vários blocos RAMs em paralelo para obter maior memória. A ferramenta sintetizadora Xilinx infere qual tipo de memória usar com base no código.

A memória de bloco é um bloco dedicado de memória de duas portas, consistindo em vários kilobytes de RAM. Deve ser implementado em dispositivos maiores. O número de blocos RAM presentes em um FPGA depende de quão avançado ele é. Por exemplo, o FPGA Spartan 6 possui um bloco de RAM maior que o Spartan 3.

RAM distribuída e em bloco têm diferentes modos de operação. Embora a operação WRITE para cada um seja síncrona, a operação READ varia. Para RAM distribuída, os dados são lidos diretamente assim que são inseridos, o que significa que não aguardam o sinal do clock. Isso significa que é assíncrono.

Por outro lado, o bloco RAM opera em um modo de operação síncrono, de modo que os dados podem ser gravados na memória apenas na borda ascendente do clock.

O estilo de implementação pode selecionar qualquer tipo de RAM usando a restrição “ram_style”.

Programando um FPGA

As linguagens que podem ser usadas para programar um FPGA são VHDL, Verilog e SystemVerilog.

A linguagem de descrição de hardware (VHDL) de circuito integrado de muito alta velocidade (VHSIC) possui todos os recursos que o hardware da vida real possui.

Os principais recursos do VHDL incluem:

  • Uma linguagem simultânea, o que significa que as instruções podem ser implementadas de maneira paralela, semelhante ao hardware da vida real.
  • Uma linguagem sequencial, o que significa que as instruções são implementadas uma após a outra em uma sequência.
  • Uma linguagem específica de tempo. Os sinais, assim como os relógios, podem ser manipulados de acordo com um requisito específico. Por exemplo, você pode iniciar um processo quando o relógio estiver na borda ascendente, fornecendo atraso adequado, invertendo o relógio, etc.
  • Não faz distinção entre maiúsculas e minúsculas. O código VHDL é traduzido em fios e portas que são mapeados no dispositivo.

Os diferentes estilos de modelagem do VHDL incluem comportamental, estrutural, fluxo de dados e uma combinação dos três.

Instruções combinacionais e sequenciais podem ser usadas para implementar os estilos de modelagem. As instruções sequenciais são implementadas uma após a outra (serialmente), enquanto as instruções combinacionais são executadas simultaneamente (de maneira paralela).

No estilo comportamental, apenas as funções são descritas, normalmente usando a instrução PROCESS. A arquitetura dos registradores não está definida.

No tipo estrutural, o circuito é descrito em termos dos componentes interligados. Por exemplo, um somador completo é implementado em termos de dois meio-somadores.

No estilo de fluxo de dados, o circuito é descrito usando instruções simultâneas. Assim, um MUX poderia ser descrito em termos de portas, como EXOR – implementadas de acordo com a expressão booleana obtida da tabela verdade. (Embora esta não seja uma maneira ideal de escrever código porque possui várias dependências e usa instruções simultâneas.)

Os estilos de modelagem mistos usam qualquer combinação desses três estilos.

CÓDIGO: Uma implementação comportamental de um contador de 4 bits em VHDL

biblioteca IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

use work.display.all;

contador de entidade é

Porta (clk: em STD_LOGIC;

out_count: saída STD_LOGIC_VECTOR (3 até 0));

contador final;

arquitetura comportamental do contador é

começar

processo (clk)

contagem variável:std_logic_vector(3 até 0):=”0000″;

começar

if(clk'evento e clk='1′) então

contar:=contar+'1′;

if(contagem=”1111″) então

contagem:=”0000″;

fim se;

fim se;

out_count<=contagem;

fim do processo;

final Comportamental;

O esquema RTL

Esquema de um nível de transferência de registro ou RTL.

Verilog também é uma linguagem descritiva de hardware (HDL) normalmente usada para projetar e verificar circuitos digitais e o nível de transferência de registro ou RTL (ou seja, como os dados são transformados à medida que passam de registro para registro) de abstração. Assim, permite projetos em vários níveis de abstração. Possui uma sintaxe semelhante à C.

Exemplo mostrando como Verilog define hardware em dispositivos FPGA

Um exemplo de como a linguagem Verilog define hardware em dispositivos FPGA.

Verilog tem três níveis de abstração: comportamental, RTL e nível de portão.

Na abstração comportamental, um sistema é descrito por um algoritmo concorrente. No RTL, o sistema é implementado transferindo dados entre os registradores em relação ao relógio. No nível de abstração do portão, um sistema é caracterizado pelo tempo e pelos links lógicos.

O sistema Verilog é construído por módulos e portas. Os módulos contêm vários componentes e podem consistir em instâncias de outros módulos. As portas têm três tipos: entrada, saída e entrada.

Os módulos incluem:

1. Parâmetros: constantes com um valor especificado no momento da compilação.
2. Redes: conectar componentes.
3. Registros: servem como elementos de armazenamento, com valores armazenados durante as instruções procedimentais. (Os tipos de registradores são reg, inteiro, tipo e real.)
4. Primitivos e instâncias: tipos de módulos predefinidos, como portas lógicas.
5. Trabalhos contínuos: descrever como os dados se movem de um lugar para outro (de uma rede ou de um registro).
6. Bloqueios processuais: representam comportamento sequencial – são sequências de instruções executáveis.
7. Definições de tarefas/funções: implementado apenas dentro de um bloco processual.

Diagrama de blocos apresentando a hierarquia do sistema Verilog

A hierarquia de um sistema Verilog.

VHDL versus Verilog

As linguagens VHDL e Verilog são igualmente eficazes em termos de descrições de hardware. Normalmente, a seleção é baseada na preferência, nas ferramentas de automação de design eletrônico (EDA) disponíveis e nas metas comerciais, de negócios e de marketing.

VHDL permite a compilação de múltiplas unidades de projeto para residir no mesmo arquivo, o que é útil ao gerenciar grandes estruturas de projeto. É ideal para modelagem de hardware de alto nível, oferecendo diversas bibliotecas.

Em termos de tipos de dados, VHDL oferece uma ampla escolha de tipos de dados (definidos pelo usuário e outros). No Verilog, todos os tipos de dados são predefinidos. Apesar dessa desvantagem, os tipos de dados Verilog são fáceis de usar e concentram-se no aspecto de modelagem do hardware, e não no abstrato.

No Verilog, geralmente é usada uma compilação para agilizar a simulação. Esta linguagem é preferida pela sua simplicidade, mas não oferece bibliotecas.

No geral, o VHDL é ideal para gerenciar projetos grandes com a ajuda de configuração, geração genérica e pacote. A Verilog não possui declarações que ajudem a gerenciar grandes estruturas de design. Verilog exibe recursos semelhantes aos do C sem instruções, mas é mais fácil de aprender para iniciantes do que VHDL.

Aplicações FPGA

Os FPGAs são flexíveis e personalizáveis, tornando-os adequados para uma variedade de indústrias de alto nível, como aeroespacial, automotiva, energia, médica e defesa. Por exemplo, o conglomerado multinacional de tecnologia Cisco, que fabrica hardware e software de rede, usa FPGA em seus switches e roteadores para aumentar a velocidade do hardware.

O FPGA também é usado em eletrônica portátil, processamento de sinal digital (DSP) e radioastronomia, onde oferece desempenho computacional de alta qualidade em comparação com microprocessadores ou DSPs. Eles também são encontrados em sistemas de comunicação sem fio, sistemas de segurança, instrumentos científicos e computação de alto desempenho.

Na área médica, os FPGAs são atualmente usados ​​em tomógrafos, ressonâncias magnéticas, ultrassonografias, máquinas de raios X e sistemas cirúrgicos.

Os FPGAs oferecem uso potencial em usinas nucleares porque os sistemas podem ser mais simples, mais fáceis de testar e mais confiáveis ​​do que softwares complexos. Além disso, os sistemas baseados em FPGA estão começando a ser usados ​​em novas plantas e projetos de I&C (instrumentação e controle), bem como em substituições e atualizações de plantas em operação.

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.