O que acontece quando um FPGA é "programado"?

13

Pelo que entendi, o processo de programação de um FPGA vem em duas partes:

  1. Codifique a descrição do hardware em bits que o FPGA possa entender (por exemplo, escreva um pouco de HDL e compile-o)
  2. Carregue o HDL compilado no FPGA.

Minha pergunta é: "O que o FPGA faz com o HDL compilado?". No momento, penso nos FPGAs como "hardware moldável", onde fios e portas lógicas podem ser moldados para o que você quiser. Uma das coisas boas é que a moldabilidade é permanente: os FPGAs podem ser reprogramados.

Como os FPGAs interpretam o HDL compilado? Como é alcançada a moldabilidade permanente?

Randomblue
fonte
4
Na verdade, não é permanente - o fluxo de bits FPGA precisa ser recarregado da EEPROM toda vez que a energia é aplicada. Os CPLDs não têm esse problema e alguns FPGAs têm EEPROM embutido que carrega seu fluxo de bits a cada inicialização.
precisa saber é o seguinte
2
Eu acho que ele quer dizer "moldabilidade é permanente", ou seja, que o programa em si não é permanente.
ajs410

Respostas:

23

A julgar pela sua outra pergunta, você é um cara da Xilinx. Portanto, sugiro que você obtenha a folha de dados do seu chip Xilinx e vá para o capítulo Descrição Funcional. Para o chip Spartan 3 que eu uso, são 42 páginas de leitura divertida. Ele detalha exatamente quais componentes estão dentro de um FPGA - IOBs, CLBs, fatias, LUTs, RAM de bloco, multiplicadores, Digital Clock Manager, Clock Network, Interconnect e algumas informações básicas de configuração. Você precisa entender essas informações se quiser saber como é um "HDL compilado".

Quando você estiver familiarizado com a arquitetura do seu FPGA, poderá entender esse processo. Primeiro, seu design de HDL é executado no mecanismo de síntese, que transforma seu HDL em basicamente RTL. Em seguida, o Mapper processa os resultados do Synthesis, "mapeando-os" para as partes disponíveis da arquitetura FPGA. Em seguida, o roteador coloca e direciona (PAR), que descobre onde essas peças vão e como conectá-las. Finalmente, os resultados do PAR são transformados em um arquivo BIT. Normalmente, esse arquivo BIT é transformado de alguma forma para que possa ser carregado em um chip Flash, para que o FPGA possa ser programado automaticamente quando ele é ligado.

Este arquivo de bit descreve o programa FPGA inteiro. Por exemplo, os CLBs em um Spartan 3 são compostos por fatias, que são compostas por LUTs, que são apenas SRAMs de 1 bit e 16 endereços. Portanto, uma coisa que o arquivo BIT conterá é exatamente quais dados serão inseridos em cada endereço da SRAM. Outra coisa que o arquivo BIT contém é como cada entrada do LUT é conectada à matriz de conexão. O arquivo BIT também conterá os valores iniciais que vão dentro do bloco RAM. Ele descreverá o que está conectado ao conjunto e redefinirá os pinos de cada flip-flop em cada fatia. Ele descreverá como a cadeia de transporte está conectada. Ele descreverá a interface lógica para cada IOB (LVTTL, LVCMOS, LVDS, etc). Ele descreverá todos os resistores pull-up ou pull-down integrados. Basicamente, tudo.

Para o Xilinx, a memória do FPGA é apagada quando a configuração é iniciada (isto é, PROG_B é afirmado). Uma vez que a memória está limpa, INIT_B fica alto para indicar que a fase está concluída. O arquivo BIT é então carregado, através da interface do JTAG ou do chip Flash. Depois que o programa é carregado, o Global Set / Reset (GSR) é pulsado, redefinindo todos os chinelos para o estado inicial. O pino DONE fica alto, para indicar que a configuração está concluída. Exatamente um ciclo de clock mais tarde, o sinal global de três estados (GTS) é liberado, permitindo que as saídas sejam acionadas. Exatamente um ciclo de clock mais tarde, o Global Write Enable (GWE) é lançado, permitindo que os flip-flops comecem a mudar de estado em resposta às suas entradas. Observe que mesmo esse processo final de configuração pode ser ligeiramente reordenado, dependendo dos sinalizadores definidos no arquivo BIT.

EDITAR:

Devo acrescentar também que a razão pela qual o programa FPGA não é permanente é porque a estrutura lógica é composta de memória volátil (por exemplo, SRAM). Então, quando o FPGA perde energia, o programa é esquecido. É por isso que eles precisam, por exemplo, de chips Flash como armazenamento não volátil para o programa FPGA, para que ele possa ser carregado sempre que o dispositivo estiver ligado.

ajs410
fonte
6

A compilação do HDL resulta em um padrão de bits que indica quais conexões dentro do FPGA devem ser ativadas. O FPGA não precisa mais interpretar o HDL. O padrão de bits é programado em um carregador serial Flash / EEPROM e, após a inicialização, esse padrão é deslocado para o FPGA, fazendo as conexões necessárias.

stevenvh
fonte
1
SÍNTESE significa três frases 1. Geração Netlist 2. Otimização no Nível da Porta 3. Mapeamento da Tecnologia.
perfil completo de Sandun
4

O resultado da compilação é um fluxo de bits (literalmente um fluxo de bits) que é carregado após a inicialização. Isso muda através do FPGA sendo armazenado em algumas células de memória (travas). Essas células são conectadas a várias entidades lógicas, multiplexadores, tabelas de consulta, blocos de RAM, matrizes de roteamento e constituem o que é chamado de "configuração". Uma vez carregado o fluxo de bits, o FPGA começa a operar - os bits nos trincos de configuração "informam" cada pequeno pedaço de FPGA como operar.

EDITAR 24 de abril de 2012: Os chinelos que eu mencionei não são para as tabelas de consulta ou para a configuração delas. Como @ ajs410 disse que aqueles estão na RAM, que é ainda menos transistores. Os flip-flops são para armazenamento de dados da LUT, se esse armazenamento estiver ativado.

Martin Thompson
fonte
Quanto do circuito em um FPGA típico tem lógica e roteamento reais e quanto é suportado pela programação?
supercat
Tecnicamente, as "células de memória" são chinelos, não trincos. Ou seja, eles são acionados pela borda.
18712 Brian Brianton
@BrianCarlton: Os chinelos são realmente usados ​​para todas as células de armazenamento de programas? Pelo meu entendimento, chinelos precisam de algo da ordem de 12 a 16 MOSFETs por bit; por outro lado, outras técnicas totalmente estáticas para bloquear dados requerem apenas 5-8.
Supercat 17/04
1
Uma LUT normalmente é feita de SRAM. Os chinelos estão conectados à saída da SRAM.
ajs410
1
@supercat: Ouvi dizer que 90% de um FPGA é o roteamento ... o resto é lógica e configuração - não consegue encontrar uma referência rapidamente embora :(
Martin Thompson
1

O termo padrão é "configuração" e não "programação" para um FPGA. O FPGA é geralmente um dispositivo baseado em SRAM. Uma SRAM armazena bits que indicam quais conexões são formadas e interrompidas dentro da "malha lógica" do dispositivo. Quando a configuração ocorre, um fluxo de bits é enviado para o FPGA, que grava nesta SRAM. Quando o FPGA baseado em SRAM é comutado, os dados SRAM são apagados e quando o FPGA é ativado, ele precisa ser configurado novamente.

Agora saiba disso, são vários métodos para "configurar" e FPGA e, portanto, existem diferentes formatos de arquivos contendo esse "fluxo de bits". No final do dia, a estrutura desses arquivos e os detalhes de como o FPGA é configurado com precisão são de propriedade do fabricante e essas informações nunca são compartilhadas. Mas o princípio geral permanece o mesmo nos FPGAs.

quantum231
fonte