PROGRAMAÇÃO DO FPGA 

1. Introdução  

         Esse é um dos processos mais importante ao se trabalhar com um FPGA. Durante a programação é que será definida a função lógica implementada pelo FPGA.
         A programação consiste em carregar o FPGA com os dados de programação em linguagem binária. A maneira mais usada de se carregar esses bits de configuração em um FPGA é serialmente, isto é, temos um bit de cada vez sendo armazenado no FPGA.
         Para que cada CLB e suas interconexões sejam configuradas são necessários algumas centenas de bits.         Cada bit de configuração define o estado de uma célula de memória estática (SRAM) que, ou controla um bit de uma função look-up table, ou seleciona uma entrada de um multiplexador ou define o estado de um transistor em uma interconexão.
         Após configurado o chip pode ser testado. Uma característica interessante em alguns tipos de FPGAs é que eles permitem uma reconfiguração no próprio sistema onde se encontra. Isso agiliza o processo de teste e possíveis reconfigurações. Esse tipo de programação será detalhada mais a frente. 

2. Ferramentas de desenvolvimento  

         Fazer a configuração de um FPGA manualmente seria uma tafera simplesmente impensável devido a complexidade do circuito. Por isso toda a parte de projeto, processamento, simulação e programação do FPGA é normalmente feita através de programas específicos.
         Cada fabricante disponibiliza programas que suportam seus próprios FPGAs ou fazem parcerias com empresas que produzam tais programas.
         O programa que a ALTERA utiliza para fazer a programação de suas PLDs se chama MAX+PLUS II, a XILINX disponibiliza o programa FOUNDATION.
         O MAX+PLUS é capaz de receber as descrições do circuito, em linguagem VHDL por exemplo, provenientes de outros programas ou criado no próprio MAX+PLUS, e gerar arquivos de programação que serão utilizados na configuração da PLD.
        
Para se programar o chip é necessário então transformar a informação desses arquivos de configuração para uma linguagem binária e carregar esses bits para as memórias estáticas do chip. O próprio MAX+PLUS pode fazer esse trabalho, porém é possível utilizar programas de outras empresas que suportem os chips da ALTERA para fazer a transformação e o armazenamento dos dados de configuração no chip.                 
        
O FPGA pode ser carregado com os dados de programação através da porta paralela ou serial de um computador ou através de uma PROM que já contenha todos os bits que serão utilizados para a configuração do chip. No primeiro caso é possível controlar a programação do chip pelo computador, enquanto que no segundo caso após carregada as informações na PROM não necessitamos mais de um computador controlando a entrada de dados no chip, teremos um circuito adcional fazendo esse controle.

3. Programação em Sistema (ISP)

3.1. Conceito

            Programação em sistema consiste basicamente numa tecnologia que permite a configuração, reconfiguração e testes do FPGA sem ter que retirá-lo do circuito onde se encontra. Utilizando a porta serial ou paralela de um computador para se conectar a um FPGA é possível, utilizando programas específicos, programar o FPGA, verificar sua programação, testá-lo com determinadas entradas e comparar suas saídas com as saídas esperadas, etc.

3.2. Vantagens em relação a outros tipos de PLDs  

            PLDs que se utilizam da tecnologia ISP possuem várias vantagens em relação a PLDs que não possuem essa tecnologia. Citaremos algumas dessas vantagens.
        
Não é necessário o uso de soquete. Já que a PLD pode ser reconfigurada enquanto está no circuito ela pode ser logo soldada na placa. Essa facilidade de reconfiguração permite ao projetista fazer alterações mais rápidas no dispostivo, o que reduz o tempo de programação, e diminui a probabilidade de acontecer algum dano devido ao excesso de manuseio.
         Outra vantagem é que o layout da placa pode ser feito durante a própria fase de projeto da lógica diminuindo ainda mais o tempo de fabricação de uma placa. 

3.3. Ferramentas usadas para implementar a ISP

         Existem vários tipos de softwares e hardwares que podem ser utilizados para se implementar a programação em sistema. Falaremos apenas de um tipo de software e um de hardware. Apesar de falarmos de apenas um número reduzido de ferramentas, é mais do que suficiente para retratar o processo de programação em sistema.

3.3.1. Linguagem JAM  

         Jam é uma linguagem otimizada para a programação de PLDs através de uma interface chamada JTAG, que será descrita mais a frente. A sintaxe dessa linguagem é bem parecida com BASIC, com instruções e aspectos adicionais ligados diretamente a interface JTAG. Abaixo temos o fluxo básico da linguagem JAM.
 

Figura – Fluxo Básico da Linguagem JAM

 

         O JAM Composer é um programa criado por algum fabricante de PLDs que gera um arquivo JAM para programar uma de suas PLDs. Temos como exemplo o MAX+PLUS II.
         O arquivo JAM contém tanto os dados de programação quanto o algoritmo de programação necessário para programar a PLD. 
        
O JAM Player é um programa que interpreta o arquivo JAM e através da interface JTAG programa a PLD.
         Qualquer JAM Player pode ler um arquivo JAM criado por um JAM Composer de qualquer fabricante, o que garante uma independência de fabricante.
         Um arquivo JAM, apesar de ser do tipo ASCII e conter tanto os dados de programação quanto o algoritmo de programação, é muito compacto, o que proporciona maior rapidez no processamento. Um método utilizado para se atingir essa nível de compactação foi o de comprimir os dados de programação. 

3.3.2. Interface JTAG

         JTAG é um tipo de interface de testes e programação padronizada que serve para interligar uma porta paralela ou serial com uma PLD .
        
Essa interface conecta-se normalmente com o chip através de 4 pinos sendo possível usar até 5 pinos em alguns casos. A PLD pode então ser programada através dessa interface, comandada por um programa, como o JAM Player, descrito acima. 

 

 

Figura – Ligação Serial – PLD via interface JTAG

 

[Índice]