• Nenhum resultado encontrado

2.2 DISPOSITIVOS FPGA (“FIELD-PROGRAMMABLE GATE ARRAY”)

2.2.1 Descrição Geral dos FPGA’s

O hardware programável, mais especificamente os FPGA´s, onde um circuito que implemente uma lógica projetada para solucionar uma determinada situação possa ser desenvolvido, configurado e programado no próprio local pelo usuário programador/projetista, por sua vez, implementa a funcionalidade necessária de forma que diversas funções possam ser executadas concomitantemente, caracterizando o paralelismo e consequente aumento de velocidade para a solução de uma determinada tarefa. Para uma estrutura em pipeline1, característica do processamento

de imagens digitais, circuitos individuais são construídos para cada operação de processamento de imagem do pipeline. O paralelismo lógico inerente a uma operação de processamento de imagem é implementado de forma adequada em um FPGA; assim, os algoritmos de processamento são bastante acelerados (BAILEY, 2011).

Um FPGA é um circuito integrado projetado para ser configurado e programado pelo usuário final, criado pela Xilinx em 1985, logo seguida pela Altera (adquirida pela Intel em 2015), que até hoje são as duas maiores fabricantes de FPGA’s. (WIKIPEDIA, 2018). Um breve relato destes fabricantes e suas famílias de componentes FPGA é apresentado no item 2.2.2.

FPGA’s são constituídos basicamente por três tipos de componentes, dispostos conforme a 17:

17 - Arquitetura básica de um FPGA. Fonte: o Autor, adaptado de BAILEY, 2011

 Blocos lógicos configuráveis (CLB), que contêm o circuito básico necessário, em geral constituído de flip-flops e tabelas de pesquisa (Look-up table – LUT) baseadas em memória RAM, para a implementação de funções lógicas combinacionais arbitrárias, gerando um único bit de saída, com saída direta e, na maioria das vezes, também registradas através de um latch, conforme a Figura 18. Anteriormente os FPGA’s eram constituídas de um número bastante elevado de pequenos CLB’s como o indicado na Figura 18, que executam operações lógicas simples; atualmente, há uma tendência de se fabricar FPGA’s tanto com CLB’s simples quanto com CLB’s mais complexos, visando a acelerar operações mais comumente utilizadas (multiplicação, divisão etc.) (BAILEY, 2011). Outras funções comumente utilizadas incluem os blocos PLL (“Phase-Locked Loop”) para implementação de relógios de sistema de frequências diversas daquela do oscilador original do FPGA, memórias dedicadas implementadas e gerenciadas dentro do FPGA, blocos matemáticos complexos (radiciação, exponenciação) etc.

Figura 18 - Bloco lógico de um FPGA. Fonte: adaptado de BAILEY, 2011.

 Matriz de chaves de interconexão programável (Switch Array), cujo propósito é interligar os CLB’s visando a implementar a funcionalidade desejada (BAILEY, 2011). Embora em qualquer aplicação nem todas as conexões sejam utilizadas, deve estar previsto que cada bloco lógico possa ser interligado a qualquer outro ou, pelo menos, ao maior número possível de outros componentes, visando a aumentar a flexibilidade do FPGA, sem comprometer a utilização do seu espaço físico interno na pastilha de semicondutor, que poderia ser melhor aproveitada aumentando-se o número de CLB’s. A 17 ilustra o conceito de matriz de chaves de interconexão. O ato de conectar os diversos CLB´s e IOB’s (explanado a seguir) se chama roteamento.

B it s P ro g ra máv e is Entradas

 Blocos de entrada e saída de sinais (IOB), que permitem a conexão do FPGA a dispositivos externos. Com o compromisso da flexibilidade, os pinos de I/O devem permitir ser configurados como de entrada, de saída ou ambos, conectados diretamente ou através de latches à lógica interna do FPGA. A Figura 19 apresenta um bloco de I/O genérico; os multiplexadores são controlados por um bit de configuração programável, o que aumenta a flexibilidade do bloco.

Figura 19 - Bloco de I/O genérico. Fonte: adaptado de BAILEY, 2011.

Alguns FPGA’s trazem atualmente, blocos de I/O dedicados para tarefas específicas, como alta velocidade, níveis de tensão diferenciados, protocolos de comunicação de alto nível etc., que permitem uma otimização dos recursos do FPGA.

Os projetos e suas funcionalidades podem ser programados nos FPGA’s de diversas formas, como diagramas descritivos do circuito ou funcionalidade a ser implementada, blocos de propriedade intelectual (IP) convenientemente configurados e interligados ou linguagem de descrição de hardware (HDL), como VHDL ou Verilog, vistas a seguir.

 VHDL (Very High Speed Integrated Circuit Hardware Description Language): a linguagem VHDL tornou-se o padrão IEEE 1076 em 1987, com diversas revisões; atualmente, está na versão draft de 06/2018.

A VHDL é uma linguagem fortemente baseada em tipos de variáveis; sendo assim, os tipos dos operandos e dos resultados devem coincidir exatamente, e qualquer diferença irá gerar um erro de compilação (BAILEY, 2011). Até por isso, a VHDL é uma linguagem mais robusta mas cuja curva de

Entrada Saída Habilita Saída

aprendizado é mais lenta, sendo indicada para aqueles que já possuem experiência em programação de HDL (SMITH, 1996).

Cada bloco dentro da VHDL é composto de duas partes: uma entity, que define o bloco e suas intrerfaces e uma architeture, que descreve a sua implementação. Existem três tipos de estilo de descrição que podem ser utilizados na architeture: estilo estrutural, que cria um projeto baseado em instâncias e conexões de blocos do tipo component, aproximadamente como se fosse um diagrama esquemático; o segundo estilo é mais voltado ao fluxo dos dados através do bloco e descreve a implementação em termos de atribuições concorrentes signal; o terceiro estilo de descrição define a implementação em termos de seu comportamento através de uma ou mais declarações process. Todos os três estilos podem estar presentes em uma implementação, sem prejuízo do desempenho do projeto final ou em termos de compilação (BAILEY, 2011).

 Verilog: a linguagem Verilog tornou-se o padrão IEEE em 1995; no entanto, é de domínio público desde 1990. Antes disso, foi criada em 1983. Atualmente está na versão IEEE 1800 de 2017. Diferentemente da VHDL, desenvolvida originalmente na linguagem Ada, fortemente baseada em tipos de variáveis e bastante prolixa, a Verilog é uma linguagem de modelagem que lembra vagamente C; consequentemente, é uma linguagem mais concisa do que a VHDL.

Cada bloco dentro do projeto é chamado de module, com suas entradas e saídas associadas. A implementação das funcionalidades de um projeto é definida fazendo-se referência a module’s de níveis mais baixos e na forma como estes estão interconectados (BAILEY, 2011). Desta forma, o processo de criação de um projeto é bastante estruturado, ainda que bastante rigoroso também em sua sintaxe.

Qualquer estrutura de hardware pode ser eficientemente modelada tanto em VHDL quanto em Verilog. O que vai distinguir qual das linguagens utilizar recai em preferência pessoal, ferramentas eletrônicas de automação de projeto (EDA tools) disponíveis e critérios de marketing, comerciais ou de negócio, e não apenas na capacidade ou eficiência técnica das linguagens (SMITH, 1996).

Um comparativo entre as principais características das linguagens VHDL e Verilog pode ser encontrado em SMITH, 1996.

Documentos relacionados