3. FPGA
3.2.1. CLB (configurable logic blocks)
Os Blocos Lógicos Configuráveis (CLBs), são responsáveis pela implementação de toda a lógica presente num projeto de hardware em FPGA. Esses blocos estão divididos em três
66
subgrupos: os elementos lógicos (LEs), os blocos de DSP (multiplicadores embarcados) e blocos de memória RAM dedicada.
• Elementos lógicos (LE)
O elemento lógico é capaz de implementar uma pequena lógica combinacional, com a opção de se registrar a saída. A lógica é implementada através de uma tabela verdade (Look-up Table - LUT), e o registro opcional, por um Flip-Flop do tipo D, presente após a implementação da LUT.
O Flip-Flop possui alguns controles auxiliares, como enable, clear e reset síncronos ou assíncronos. Além disso, o clock do Flip-Flop vem de uma entrada dedicada, proveniente da rede de clock do chip, que por sua vez está conectada à PLL utilizada para geração de clock.
O elemento lógico é otimizado para a arquitetura pipeline (Sun, Wirthlin, & Neuendorffer, 2007), na qual, o caminho percorrido pelo fluxo de dados é sempre seccionado em várias partes, por registradores, a fim de possibilitar mais altas taxas de clock de operação.
A Figura 31 mostra uma representação simplificada de um elemento lógico presente numa FPGA pertencente à família Cyclone IV da ALTERA®. Na figura, podem ser vistas as partes combinacional (LUT) e a parte registrada (registrador tipo D) do LE, que podem ser usadas de forma independente. A LUT apresentada na figura, possui 4 entradas. As entradas e saídas de
Carry e da cadeia de registradores dos LEs, permitem a implementações de lógicas e de
registros maiores do que as de apenas um LE. Além disso, existe a possibilidade de realimentação do registrador para a LUT dentro do próprio LE. Esses recursos foram criados a fim de proporcionar um melhor desempenho do circuito e otimização de fitting. A saída do LE se comunica com a malha de interconexões configuráveis.
67 Entrada de registrador do LE anterior D ENA Q Entrada de Carry do LE anterior C a d e ia d e C a r ry Saída de Carry do LE LUT Enable Clock Entradas da tabela verdade Clear Saída
Saída para cadeia de registradores
CLRN
Figura 31: Representação simplificada de um Elemento Lógico (LE).
Dentro da FPGA, os LEs são agrupados em conjuntos de 16 LEs, na forma de coluna. Cada conjunto é um Bloco de Arranjo Lógico - LAB (Logic Array Block). Cada LAB possui alguns recursos, como sinais de controle, cadeia de Carry, cadeia de registradores e interconexões locais. Os LABs servem para otimizar a combinação de LEs em sínteses de lógicas mais complexas. Um esquema de um LAB e suas conexões locais são mostrados posteriormente nas Figuras 36 e 37.
• Blocos DSP
Esses blocos são voltados para aplicações que envolvem Processamento Digital de Sinais (DSP), nas quais estão presentes muitas operações de multiplicação, soma, subtração e acumulação. A Figura 32 mostra um bloco DSP multiplicador do mesmo chip cujo LE foi mostrado anteriormente. Esse bloco está representado com a configuração que admite duas entradas de até 18 bits cada. Nela é possível ver os sinais de controles, as entradas, a saída e o núcleo de multiplicação, com opções de registro. As entradas de dados A e B podem, ou não, ser sinalizadas, de forma independente uma da outra, conforme os controles “signa” e “signb”.
68 D ENA Q CLRN D ENA Q CLRN Saída [35:0] D ENA Q CLRN Dado A [17:0] Dado B [17:0] 18 18 36 Multiplicador 18 × 18 Multiplicador Embarcado signa signb aclr clock ena Figura 32: Bloco DSP.
Para multiplicações de palavras de dados com larguras maiores do que suportam as entradas, mais de um bloco DSP é conectado em cascata. Não há restrição quanto à largura da palavra que se deseja multiplicar, obedecendo, obviamente, a capacidade do dispositivo. Porém, quanto maior for a largura, mais lento será o processo final de multiplicação (Cyclone IV, Device Handbook, 2010).
Os elementos DSP estão dispostos também em colunas, entre os LABs, de forma a obterem melhor integração com o circuito (Figura 33).
M u ltip lic a d o r e m b a rca d o Coluna de multiplicadores embarcados LAB
69
• Blocos de memória
A estrutura de memória embarcada também consiste em colunas formadas por blocos de memória entre os LABs. Eles possuem registradores de entrada que sincronizam a escritas e registradores de saída para projetos em pipeline, a fim de melhorar a performance do sistema (Cyclone II, 2008).
Os blocos de memória podem ser configurados de várias formas a fim de cobrir diversas funções de memória, como memória RAM, shift registers, memória ROM e FIFO buffers.
Exemplo 3.1
As memórias contidas nas FPGAs da família Cyclone IV, por exemplo, são divididas em blocos de 9 Kbits (M9K)4 e, além de poderem operar com largura de barramento configurável,
possuem diversos modos de operação:
• Memória single port; • Memória dual port simples; • True dual port;
• Shift register∗;
• ROM – com conteúdo inicial programável (memory initialization file .mif ); • FIFO*.
Operações de shift register são utilizadas, principalmente, para aplicações de Processamento Digital de Sinais (DSP), como implementação de filtros FIR. Tais aplicações, exigem o armazenamento local de dados, tradicionalmente realizados com Flip-Flops, o que, rapidamente, consome muitas células lógicas da FPGA para grandes registradores de deslocamento. Uma forma mais eficiente de implementação é utilizando as memórias embarcadas.
4 Especificamente 8192 bits de memória por bloco (9216 bits por bloco incluindo os bits de paridade, para fins de detecção de erros de leitura/escrita).
70
A Figura 34 mostra o modo de operação shift register, numa FPGA da família Cyclone IV, para um registrador de deslocamento de tamanho w × m × n, onde w é a largura da palavra a ser deslocada, m é o comprimento de cada tap, e n é o número de taps.
m-Bit Shift Register
w
···
···
w w···
w···
w w w wm-Bit Shift Register
m-Bit Shift Register
m-Bit Shift Register w x m x n Shift Register
···
n - número de taps
Figura 34: Representação da memória da FPGA configurada como shift register.