Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial Internet of Things >> Integrado

Design integrado com FPGAs:Processo de desenvolvimento


Nota do editor:à medida que algoritmos avançados continuam a emergir para designs de produtos inteligentes, os desenvolvedores muitas vezes se encontram lutando para implementar sistemas incorporados capazes de atender às demandas de processamento associadas a esses algoritmos. FPGAs podem fornecer o desempenho necessário, mas projetar com FPGAs há muito tempo é considerado limitado ao alcance de especialistas em programação de FPGAs. Hoje, entretanto, a disponibilidade de FPGAs mais poderosos e ambientes de desenvolvimento mais eficazes tornou o desenvolvimento de FPGAs amplamente acessível. Neste trecho, Capítulo 4 do livro Architecting High-Performance Embedded Systems, o autor oferece uma revisão abrangente de dispositivos FPGA, linguagens de implementação e o processo de desenvolvimento de FPGA, bem como um passo a passo detalhado de como começar a implementar FPGAs por conta própria Projeto. O trecho completo é apresentado na seguinte série de parcelas:
1:Recursos de hardware
2:Linguagens de implementação
3:Processo de desenvolvimento (este artigo)
4:Construindo um projeto
5:Implementação

Adaptado de Architecting High-Performance Embedded Systems, de Jim Ledin.

O processo de desenvolvimento FPGA

Embora os FPGAs sejam usados ​​em uma ampla variedade de domínios de aplicação distintos, é possível identificar um conjunto de etapas de desenvolvimento que são amplamente aplicáveis ​​a qualquer projeto de desenvolvimento de FPGA. Esta seção discute as etapas usuais de desenvolvimento do FPGA na sequência em que normalmente ocorrem durante um projeto.

Definição de requisitos do sistema

A primeira etapa no desenvolvimento de um novo sistema, ou ao iniciar uma atualização significativa para um sistema existente, é desenvolver uma compreensão clara e detalhada do que o sistema deve fazer. O processo de definição de requisitos começa com uma descrição geral da funcionalidade pretendida do sistema, modos de operação e recursos-chave. Essas informações devem ser escritas em linguagem clara e inequívoca e compartilhadas com todas as partes interessadas no sucesso do esforço de desenvolvimento. O objetivo de compartilhar os requisitos do sistema é chegar a um consenso entre todas as partes quanto à integridade e exatidão das descrições.

As descrições dos requisitos devem ser elaboradas para incluir especificações para o nível necessário de desempenho do sistema em termos de taxas de amostragem de sinais de entrada e taxas de atualização para comandos de saída do atuador. Detalhes adicionais, como restrições de tamanho físico, vida útil mínima da bateria e faixas de temperatura ambiente toleráveis ​​guiarão o processo de design. Em geral, um conjunto abrangente de especificações deve ser desenvolvido para descrever os limites mínimos de desempenho para todos os parâmetros do sistema considerados relevantes para o sucesso geral do sistema.

O conjunto completo de requisitos do sistema deve ser completo de forma que qualquer solução de design que esteja em conformidade com todas as especificações declaradas deve ser uma solução adequada. Se for descoberto que um projeto que satisfaz todas as especificações é considerado inaceitável por algum motivo não relacionado, isso representa uma falha em declarar totalmente os requisitos do sistema.

Por exemplo, se uma solução tecnicamente adequada for considerada muito cara para ser produzida, a origem do problema provavelmente será uma falha em definir totalmente as restrições de contenção de custos durante o processo de desenvolvimento de requisitos.

Depois que os requisitos de sistema de nível superior foram definidos e acordados, geralmente é necessário dividir a configuração geral do sistema em uma coleção de subsistemas, cada um com uma finalidade coesa e seu próprio conjunto de requisitos descritivos e especificações técnicas. Em uma arquitetura de sistema embarcado em tempo real, a capacidade de processamento digital provavelmente será representada como um subsistema com uma coleção correspondente de requisitos

Alocação de funcionalidade para o FPGA

Se os requisitos de processamento digital em uma arquitetura de sistema excederem as capacidades dos microcontroladores e microprocessadores que, de outra forma, seriam adequados para uso no sistema, pode ser apropriado considerar a incorporação de um FPGA no projeto. Algumas arquiteturas de sistema, particularmente aquelas que se beneficiam de hardware digital de alta velocidade executando operações paralelas, são candidatas naturais para implementação de FPGA. Outras arquiteturas de sistema podem ser capazes de desempenho adequado com processamento digital tradicional, mas pode haver oportunidades valiosas para tirar vantagem da flexibilidade e extensibilidade oferecidas por uma implementação de FPGA durante uma vida planejada que prevê atualizações substanciais do sistema no futuro.

Após a decisão de incorporar um FPGA ao projeto, a próxima etapa é alocar as partes dos requisitos gerais de processamento digital do sistema para o dispositivo FPGA. Isso normalmente inclui a especificação dos sinais de entrada e saída do FPGA, as taxas de atualização das entradas e saídas e a identificação dos componentes com os quais o FPGA deve interagir, incluindo peças como ADCs e dispositivos RAM.

Identificação dos recursos FPGA necessários

Tendo definido as funções a serem desempenhadas pelo FPGA, e com conhecimento das interfaces para outros dispositivos que o FPGA deve suportar, torna-se possível desenvolver uma lista de recursos que os candidatos a dispositivos FPGA devem fornecer.

Algumas famílias FPGA são projetadas para aplicações de baixo custo e menos complexas e, portanto, oferecem um conjunto limitado de recursos para implementação de lógica digital. Esses dispositivos podem operar com energia da bateria e requerem apenas resfriamento passivo. Outras famílias FPGA, mais poderosas, suportam designs digitais em grande escala e com recursos completos, destinam-se a operar com desempenho máximo e podem exigir resfriamento ativo contínuo.

Os requisitos do sistema associados ao aplicativo embarcado guiarão a seleção de uma família FPGA apropriada para o aplicativo. Neste ponto, provavelmente não é possível identificar um modelo específico de FPGA dentro da família preferencial porque os requisitos de recursos da implementação do FPGA não foram totalmente definidos. Porém, com a experiência, é possível identificar um pequeno número de modelos de FPGA que parecem adequados para o projeto.

Além dos recursos FPGA para implementação de circuito digital, muitos modelos FPGA incluem recursos adicionais que podem ser importantes para o projeto do sistema. Por exemplo, um ADC embutido pode ser útil para minimizar a contagem de peças do sistema. A lista de recursos FPGA necessários e desejados ajudará a restringir ainda mais a seleção de dispositivos FPGA apropriados para o sistema.

Implementação do design FPGA

Tendo identificado um modelo de FPGA candidato e com a definição detalhada da funcionalidade alocada ao FPGA em mãos, é hora de começar a implementação do design do FPGA. Isso geralmente envolve o uso do conjunto de ferramentas de desenvolvimento FPGA e geralmente consiste em desenvolver código HDL na linguagem preferida para o projeto.

Se apropriado, a implementação do FPGA pode começar com uma representação do diagrama de blocos do design do FPGA de nível superior. Conforme necessário, os componentes desenvolvidos em HDL ou C / C ++ podem ser incorporados ao design do bloco para concluir a implementação completa do sistema.

Como alternativa, também é comum que projetos de sistemas inteiros sejam desenvolvidos diretamente em HDL. Para desenvolvedores familiarizados com a linguagem e com uma compreensão total dos recursos e restrições do modelo FPGA em uso, isso pode levar ao resultado de design mais eficiente em termos de recursos e de melhor desempenho.

O desenvolvimento do FPGA prossegue em fases, à medida que o design inicial é especificado com mais detalhes, até que um arquivo de programação para o dispositivo FPGA seja produzido. É comum iterar por essas fases várias vezes para um grande projeto, desenvolvendo uma pequena parte do design total durante cada passagem pelas etapas. Essas fases são descritas nas seções a seguir.

Entrada de design

Entrada de design é a fase em que o desenvolvedor do sistema define a funcionalidade do sistema usando código HDL, diagramas de bloco e / ou código C / C ++. O código e outros artefatos, como diagramas de blocos, definem a funcionalidade lógica do sistema em termos abstratos. Em outras palavras, os artefatos de design definem um circuito lógico, mas não definem como ele é integrado ao resto do sistema.

Planejamento de E / S

Planejamento de I / O FPGA é o processo de identificar os pinos atribuídos para executar funções de E / S particulares e associar quaisquer recursos de dispositivo, como o padrão de sinal de E / S para usar para cada sinal. Como parte do processo de planejamento de E / S, pode ser importante considerar questões como a localização dos pinos de E / S no pacote do dispositivo físico. Esta etapa é importante para minimizar os comprimentos de rastreamento da placa de circuito impresso para sinais de alta velocidade e para evitar forçar os rastreamentos de sinal de circuito a se cruzarem desnecessariamente.

A definição dos requisitos de sinal de E / S é uma forma de restrição no processo de desenvolvimento do FPGA. A outra categoria de restrição primária consiste em requisitos de tempo que determinam o desempenho da solução FPGA. O processo de síntese FPGA usa o código HDL e as restrições do projeto para desenvolver uma solução FPGA funcionalmente correta que satisfaça todas as restrições definidas. Se a ferramenta não puder satisfazer todas as restrições, a síntese falhará.

Síntese

Síntese transforma o código-fonte em um projeto de circuito denominado netlist . A netlist representa o circuito construído a partir dos recursos do modelo FPGA alvo. A netlist representa uma versão lógica ou esquemática do circuito. Ele não define como o circuito será implementado no dispositivo FPGA físico. Isso ocorre na próxima etapa.

Lugar e rota

O lugar processo pega os recursos FPGA definidos na netlist e os atribui a elementos lógicos específicos dentro do FPGA selecionado. As colocações de recursos resultantes devem satisfazer quaisquer restrições que restrinjam a alocação desses elementos, incluindo restrições de E / S e restrições de tempo.

Após os elementos lógicos terem sido atribuídos às localizações físicas durante o processo de colocação, um conjunto de conexões entre os elementos lógicos é configurado durante a rota processo. O roteamento implementa todas as conexões entre os elementos lógicos e permite que o circuito funcione conforme descrito no código HDL. Após a conclusão das operações de local e rota, a configuração do FPGA está totalmente determinada.

Geração de fluxo de bits

A etapa final no processo de desenvolvimento do FPGA é a produção de um arquivo bitstream. Para atingir o mais alto desempenho, a maioria dos dispositivos FPGA modernos armazenam sua configuração internamente usando RAM estática ( SRAM )

Você pode pensar na SRAM de configuração do FPGA como um registrador de deslocamento muito grande, contendo talvez milhões de bits. O conteúdo deste registrador de deslocamento especifica totalmente todos os aspectos da configuração e operação do dispositivo FPGA. O arquivo bitstream produzido durante o desenvolvimento do FPGA representa as configurações do shift register que fazem com que o dispositivo execute as funções pretendidas especificadas pelo HDL e pelas restrições. Em termos de processos tradicionais de desenvolvimento de software, o arquivo bitstream é análogo a um programa executável produzido por um vinculador.

SRAM é volátil e perde seu conteúdo cada vez que a energia do dispositivo é removida. A arquitetura do sistema embarcado em tempo real deve fornecer um meio para carregar o arquivo de fluxo de bits no FPGA cada vez que a energia é aplicada. Normalmente, o fluxo de bits é carregado da memória flash localizada no dispositivo ou de uma fonte externa, como um PC, conectada ao dispositivo durante cada ciclo de inicialização.

Depois de concluída a compilação do fluxo de bits do FPGA, a próxima etapa é testar a implementação para verificar se ela funciona corretamente. Esta etapa não é diferente do teste exigido no final de um processo tradicional de construção de software.

Testando a implementação

O desenvolvimento de FPGAs é suscetível a todos os tipos de bugs que afetam os esforços tradicionais de desenvolvimento de software. Durante o desenvolvimento do FPGA, você provavelmente verá muitas mensagens de erro relacionadas à sintaxe incorreta, tentativas de usar recursos não acessíveis no momento e muitos outros tipos de violações. Como em qualquer empreendimento de programação, você precisará identificar a origem de cada erro e corrigir o problema.

Mesmo depois que o aplicativo FPGA prossegue com sucesso por todos os estágios da geração de fluxo de bits, não há garantia de que o projeto funcionará conforme o esperado. Para obter um design bem-sucedido em um prazo razoável, é absolutamente crítico realizar testes adequados em cada estágio de desenvolvimento.

A primeira fase de teste deve exercitar completamente o comportamento do código HDL para demonstrar que ele funciona conforme o esperado. O projeto de exemplo no final deste capítulo demonstrará o uso do conjunto de ferramentas Vivado para realizar um teste completo da lógica HDL no design.

Depois que o fluxo de bits foi gerado, não há substituto para o teste abrangente do FPGA conforme implementado na configuração final do sistema. Este teste deve exercitar completamente todos os recursos e modos do FPGA, incluindo sua resposta a condições de erro e fora do intervalo.

Em cada etapa do processo de design, desenvolvimento e teste, o pessoal do projeto deve permanecer atento à possibilidade de implementar recursos do sistema que são suscetíveis a comportamento impróprio em situações improváveis ​​ou raras. A ocorrência desse tipo de problema pode representar bugs extremamente difíceis de duplicar e que podem manchar para sempre a percepção do design do sistema embarcado e da organização que o produziu. Se você fizer um excelente trabalho de teste, a probabilidade desse resultado será reduzida substancialmente.

A próxima seção fornece uma descrição detalhada das etapas de desenvolvimento, teste e implementação de um projeto FPGA simples usando a placa de desenvolvimento Arty A7 e o conjunto de ferramentas Xilinx Vivado.

Reimpresso com permissão da Packt Publishing. Copyright © 2021 Packt Publishing


Jim Ledin é o CEO da Ledin Engineering, Inc. Jim é um especialista em software embarcado e design, desenvolvimento e teste de hardware. Ele também tem experiência em avaliação de segurança cibernética de sistemas embarcados e testes de penetração. Ele tem um B.S. formado em engenharia aeroespacial pela Iowa State University e um M.S. graduado em engenharia elétrica e da computação pelo Georgia Institute of Technology. Jim é um engenheiro elétrico profissional registrado na Califórnia, um Certified Information System Security Professional (CISSP), um Certified Ethical Hacker (CEH) e um Certified Penetration Tester (CPT).

Conteúdos Relacionados:
  • Design integrado com FPGAs:recursos de hardware
  • Design integrado com FPGAs:linguagens de implementação
  • Ferramentas de código aberto ajudam a simplificar a programação FPGA
  • Implementação de algoritmos de ponto flutuante em FPGAs ou ASICs
  • Aproveitando FPGAs para aprendizagem profunda
  • Ferramentas de software migram código GPU para FPGAs para aplicativos de IA
  • FPGAs substituem ASICs em ADAS baseado em visão Subaru Eyesight

Para obter mais informações sobre o Embedded, assine o boletim informativo semanal por e-mail da Embedded.



Integrado

  1. Design à prova de falhas
  2. O que é programação de sistema incorporado e seus idiomas
  3. O que é Chatbot:Processo de Design e Sua Arquitetura
  4. O que é design de sistema incorporado:etapas no processo de design
  5. Noções básicas de sistema incorporado e aplicativos
  6. ADI mostra tecnologias para cada área de design de sistema embarcado
  7. Axiomtek:sistema integrado com switch PoE gerenciado de camada 2 integrado
  8. IBASE:sistema Mini-ITX fino com AMD Ryzen Embedded V1000 SoC
  9. MicroSys:Computação Embedded Edge com CPU NPX LS1028A e IEEE TSN
  10. All in com aditivo