Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial Internet of Things >> Embarqué

Conception embarquée avec FPGA :processus de développement

Note de l'éditeur :alors que des algorithmes avancés continuent d'émerger pour la conception de produits intelligents, les développeurs ont souvent du mal à mettre en œuvre des systèmes embarqués capables de répondre aux demandes de traitement associées de ces algorithmes. Les FPGA peuvent fournir les performances requises, mais la conception avec des FPGA a longtemps été considérée comme limitée aux experts en programmation FPGA. Aujourd'hui, cependant, la disponibilité de FPGA plus puissants et d'environnements de développement plus efficaces a rendu le développement de FPGA largement accessible. Dans cet extrait, chapitre 4 du livre Architecting High-Performance Embedded Systems, l'auteur propose une revue complète des périphériques FPGA, des langages d'implémentation et du processus de développement FPGA, ainsi qu'une procédure détaillée sur la façon de commencer à implémenter des FPGA dans votre propre conception. L'extrait complet est présenté dans la série de fascicules suivante :
1 :Ressources matérielles
2 :Langages d'implémentation
3 :Processus de développement (cet article)
4 :Construire un projet
5 :Implémentation

Adapté de Architecting High-Performance Embedded Systems, par Jim Ledin.


Le processus de développement FPGA

Alors que les FPGA sont utilisés dans une grande variété de domaines d'application disparates, il est possible d'identifier un ensemble d'étapes de développement qui sont largement applicables à tout projet de développement de FPGA. Cette section traite des étapes habituelles de développement du FPGA dans l'ordre dans lequel elles se produisent normalement au cours d'un projet.

Définition de la configuration système requise

La première étape du développement d'un nouveau système, ou lors du lancement d'une mise à niveau significative d'un système existant, consiste à développer une compréhension claire et détaillée de ce que le système est censé faire. Le processus de définition des exigences commence par une description générale de la fonctionnalité prévue du système, des modes de fonctionnement et des fonctionnalités clés. Ces informations doivent être rédigées dans un langage clair et sans ambiguïté et partagées avec toutes les parties concernées par le succès de l'effort de développement. L'objectif du partage des exigences du système est de parvenir à un consensus entre toutes les parties quant à l'exhaustivité et l'exactitude des descriptions.

Les descriptions des exigences doivent être étoffées pour inclure des spécifications pour le niveau requis de performance du système en termes tels que les taux d'échantillonnage des signaux d'entrée et les taux de mise à jour pour les commandes de sortie de l'actionneur. Des détails supplémentaires tels que les contraintes de taille physique, la durée de vie minimale de la batterie et les plages de températures environnementales tolérables guideront le processus de conception. En général, un ensemble complet de spécifications doit être développé qui décrit les seuils de performance minimum pour tous les paramètres du système qui sont jugés pertinents pour le succès global du système.

L'ensemble complet des exigences du système doit être complet dans la mesure où toute solution de conception conforme à toutes les spécifications énoncées doit être une solution adéquate. S'il s'avère qu'une conception qui satisfait à toutes les spécifications est jugée inacceptable pour une raison sans rapport, cela représente un échec à énoncer complètement les exigences du système.

Par exemple, s'il est déterminé qu'une solution techniquement adéquate est trop coûteuse à produire, la source du problème est probablement l'échec de la définition complète des contraintes de maîtrise des coûts au cours du processus de développement des exigences.

Une fois les exigences système de niveau supérieur définies et convenues, il est généralement nécessaire de diviser la configuration globale du système en un ensemble de sous-systèmes, chacun ayant un objectif cohérent et son propre ensemble d'exigences descriptives et de spécifications techniques. Dans une architecture de système embarqué en temps réel, la capacité de traitement numérique est susceptible d'être représentée comme un sous-système avec un ensemble correspondant d'exigences

Attribution de fonctionnalités au FPGA

Si les exigences de traitement numérique dans une architecture de système dépassent les capacités des microcontrôleurs et des microprocesseurs qui seraient autrement adaptés à une utilisation dans le système, il peut être approprié d'envisager d'incorporer un FPGA dans la conception. Certaines architectures système, en particulier celles qui bénéficient d'un matériel numérique haute vitesse effectuant des opérations parallèles, sont des candidats naturels pour la mise en œuvre de FPGA. D'autres architectures de système peuvent être capables de performances adéquates avec le traitement numérique traditionnel, mais il peut y avoir de précieuses opportunités pour tirer parti de la flexibilité et de l'extensibilité offertes par une implémentation FPGA sur une durée de vie planifiée qui envisage des mises à niveau substantielles du système à l'avenir.

Une fois que la décision a été prise d'incorporer un FPGA dans la conception, l'étape suivante consiste à allouer les parties des exigences globales de traitement numérique du système au dispositif FPGA. Cela inclut généralement la spécification des signaux d'entrée et de sortie du FPGA, les taux de mise à jour des entrées et des sorties et l'identification des composants avec lesquels le FPGA doit interagir, y compris des pièces telles que les CAN et les périphériques RAM.

Identification des fonctionnalités FPGA requises

Après avoir défini les fonctions à exécuter par le FPGA, et avec la connaissance des interfaces avec d'autres dispositifs que le FPGA doit prendre en charge, il devient possible de développer une liste de fonctionnalités que les dispositifs FPGA candidats doivent fournir.

Certaines familles de FPGA sont conçues pour des applications à faible coût et moins complexes et offrent ainsi un ensemble limité de ressources pour la mise en œuvre de la logique numérique. Ces appareils peuvent fonctionner sur batterie et ne nécessiter qu'un refroidissement passif. D'autres familles de FPGA, plus puissantes, prennent en charge des conceptions numériques complètes à grande échelle, sont conçues pour fonctionner à des performances optimales et peuvent nécessiter un refroidissement actif continu.

La configuration système requise associée à l'application embarquée guidera la sélection d'une famille de FPGA appropriée pour l'application. À ce stade, il n'est probablement pas possible d'identifier un modèle de FPGA spécifique au sein de la famille préférée car les besoins en ressources de la mise en œuvre du FPGA n'ont pas été entièrement définis. Cependant, avec l'expérience, il est possible d'identifier un petit nombre de modèles de FPGA qui semblent adaptés à la conception.

En plus des ressources FPGA pour la mise en œuvre des circuits numériques, de nombreux modèles FPGA incluent des fonctionnalités supplémentaires qui peuvent être importantes pour la conception du système. Par exemple, un ADC intégré peut être utile pour minimiser le nombre de pièces du système. La liste des fonctionnalités FPGA requises et souhaitées aidera à affiner davantage la sélection de périphériques FPGA appropriés pour le système.

Implémentation de la conception FPGA

Après avoir identifié un modèle de FPGA candidat et avec la définition détaillée de la fonctionnalité allouée au FPGA en main, il est temps de commencer la mise en œuvre de la conception du FPGA. Cela impliquera généralement l'utilisation de la suite d'outils de développement FPGA et consiste généralement en grande partie à développer du code HDL dans le langage préféré pour le projet.

Le cas échéant, la mise en œuvre du FPGA peut commencer par une représentation sous forme de diagramme de la conception du FPGA de niveau supérieur. Si nécessaire, des composants développés en HDL ou C/C++ peuvent être intégrés à la conception du bloc pour compléter la mise en œuvre complète du système.

Alternativement, il est également courant que des conceptions de systèmes entiers soient développées directement en HDL. Pour les développeurs familiarisés avec le langage et ayant une compréhension complète des fonctionnalités et des contraintes du modèle FPGA utilisé, cela peut conduire au résultat de conception le plus économe en ressources et le plus performant.

Le développement du FPGA se déroule par phases au fur et à mesure que la conception initiale est spécifiée plus en détail jusqu'à ce qu'un fichier de programmation pour le dispositif FPGA soit produit. Il est courant de parcourir ces phases plusieurs fois pour un grand projet, en développant une petite partie de la conception totale au cours de chaque passage à travers les étapes. Ces phases sont décrites dans les sections suivantes.

Entrée de conception

Entrée de conception est la phase où le développeur du système définit les fonctionnalités du système à l'aide de code HDL, de schémas fonctionnels et/ou de code C/C++. Le code et d'autres artefacts, tels que les schémas fonctionnels, définissent la fonctionnalité logique du système en termes abstraits. En d'autres termes, les artefacts de conception définissent un circuit logique, mais ils ne définissent pas comment il est intégré au reste du système.

Planification des E/S

Planification des E/S FPGA est le processus d'identification des broches affectées à l'exécution de fonctions d'E/S particulières et d'association de toutes les fonctionnalités de périphérique telles que la norme de signal d'E/S à utiliser pour chaque signal. Dans le cadre du processus de planification des E/S, il peut être important de prendre en compte des problèmes tels que l'emplacement des broches d'E/S sur le boîtier du périphérique physique. Cette étape est importante pour minimiser les longueurs des pistes de circuits imprimés pour les signaux à grande vitesse et pour éviter de forcer les pistes de signaux de circuits à se croiser inutilement.

La définition des exigences de signal d'E/S est une forme de contrainte dans le processus de développement du FPGA. L'autre catégorie de contrainte principale comprend les exigences de temps qui déterminent les performances de la solution FPGA. Le processus de synthèse FPGA utilise le code HDL et les contraintes du projet pour développer une solution FPGA fonctionnellement correcte qui satisfait toutes les contraintes définies. Si l'outil ne peut pas satisfaire toutes les contraintes, la synthèse échouera.

Synthèse

Synthèse transforme le code source en une conception de circuit appelée netlist . La netlist représente le circuit construit à partir des ressources du modèle FPGA cible. La netlist représente une version logique ou schématique du circuit. Il ne définit pas comment le circuit sera implémenté dans le dispositif FPGA physique. Cela se produit à l'étape suivante.

Lieu et itinéraire

Le lieu Le processus prend les ressources FPGA définies dans la netlist et les affecte à des éléments logiques spécifiques au sein du FPGA sélectionné. Les placements de ressources qui en résultent doivent satisfaire toutes les contraintes qui restreignent l'allocation de ces éléments, y compris les contraintes d'E/S et les contraintes de temps.

Une fois que les éléments logiques ont reçu des emplacements physiques pendant le processus de placement, un ensemble de connexions entre les éléments logiques est configuré pendant le route traiter. Le routage met en œuvre toutes les connexions entre les éléments logiques et permet au circuit de fonctionner comme décrit dans le code HDL. Une fois les opérations de placement et de routage terminées, la configuration du FPGA est entièrement déterminée.

Génération de flux de bits

La dernière étape du processus de développement du FPGA est la production d'un fichier bitstream. Pour obtenir les meilleures performances, la plupart des appareils FPGA modernes stockent leur configuration en interne à l'aide de la RAM statique (SRAM ).

Vous pouvez considérer la SRAM de configuration FPGA comme un très grand registre à décalage, contenant peut-être des millions de bits. Le contenu de ce registre à décalage spécifie entièrement tous les aspects de la configuration et du fonctionnement des dispositifs FPGA. Le fichier bitstream produit lors du développement du FPGA représente les paramètres du registre à décalage qui amènent le périphérique à exécuter les fonctions prévues spécifiées par le HDL et les contraintes. En termes de processus de développement de logiciels traditionnels, le fichier bitstream est analogue à un programme exécutable produit par un éditeur de liens.

La SRAM est volatile et perd son contenu chaque fois que l'alimentation du périphérique est coupée. L'architecture du système embarqué en temps réel doit fournir un moyen de charger le fichier bitstream dans le FPGA chaque fois que l'alimentation est appliquée. En règle générale, le flux binaire est chargé soit à partir de la mémoire flash située dans l'appareil, soit à partir d'une source externe, telle qu'un PC, connectée à l'appareil lors de chaque cycle de mise sous tension.

Après avoir terminé la compilation du flux binaire FPGA, l'étape suivante consiste à tester l'implémentation pour vérifier qu'elle fonctionne correctement. Cette étape n'est pas différente des tests requis à la fin d'un processus de création de logiciel traditionnel.

Test de l'implémentation

Le développement FPGA est sensible à tous les types de bogues qui perturbent les efforts de développement de logiciels traditionnels. Au cours du développement du FPGA, vous serez probablement confronté à de nombreux messages d'erreur liés à une syntaxe incorrecte, à des tentatives d'utilisation de ressources actuellement inaccessibles et à de nombreux autres types de violations. Comme dans tout effort de programmation, vous devrez identifier la source de chaque erreur et résoudre le problème.

Même après que l'application FPGA ait franchi avec succès toutes les étapes de la génération de flux binaire, il n'y a aucune garantie que la conception fonctionnera comme prévu. Pour réussir une conception dans un délai raisonnable, il est absolument essentiel d'effectuer des tests adéquats à chaque étape du développement.

La première phase de test doit tester minutieusement le comportement du code HDL pour démontrer qu'il fonctionne comme prévu. L'exemple de projet à la fin de ce chapitre démontrera l'utilisation de la suite d'outils Vivado pour effectuer un test approfondi de la logique HDL dans la conception.

Une fois le flux binaire généré, rien ne remplace un test complet du FPGA tel qu'implémenté dans la configuration finale du système. Ce test doit tester minutieusement toutes les fonctionnalités et tous les modes du FPGA, y compris sa réponse aux conditions hors de portée et d'erreur.

À chaque étape du processus de conception, de développement et de test, le personnel du projet doit rester attentif à la possibilité de mettre en œuvre des fonctionnalités du système susceptibles d'avoir un comportement inapproprié dans des situations peu probables ou rares. L'apparition de ce genre de problèmes peut représenter des bogues extrêmement difficiles à reproduire et qui peuvent ternir à jamais la perception de la conception du système embarqué et de l'organisation qui l'a produit. Si vous faites un excellent travail de test, la probabilité de ce résultat sera considérablement réduite.

La section suivante fournit une description détaillée des étapes de développement, de test et de mise en œuvre d'un projet FPGA simple utilisant la carte de développement Arty A7 et la suite d'outils Xilinx Vivado.

Réimprimé avec la permission de Packt Publishing. Copyright © 2021 Édition Packt


Jim Ledin est le PDG de Ledin Engineering, Inc. Jim est un expert en conception, développement et test de logiciels et de matériel embarqués. Il est également accompli dans l'évaluation de la cybersécurité des systèmes embarqués et les tests d'intrusion. Il a un B.S. diplôme en génie aérospatial de l'Iowa State University et un M.S. diplôme en génie électrique et informatique du Georgia Institute of Technology. Jim est un ingénieur électricien professionnel enregistré en Californie, un professionnel certifié de la sécurité des systèmes d'information (CISSP), un hacker éthique certifié (CEH) et un testeur de pénétration certifié (CPT).

Contenus associés :

  • Conception embarquée avec FPGA :ressources matérielles
  • Conception embarquée avec FPGA :langages d'implémentation
  • Les outils open source aident à simplifier la programmation FPGA
  • Implémentation d'algorithmes à virgule flottante dans les FPGA ou les ASIC
  • Tirer parti des FPGA pour l'apprentissage en profondeur
  • Les outils logiciels migrent le code GPU vers les FPGA pour les applications d'IA
  • Les FPGA remplacent les ASIC dans les ADAS basés sur la vision Subaru Eyesight

Pour plus d'informations sur Embedded, abonnez-vous à la newsletter hebdomadaire d'Embedded.


Embarqué

  1. Conception à sécurité intégrée
  2. Qu'est-ce que la programmation système embarquée et ses langages
  3. Qu'est-ce que le chatbot :processus de conception et son architecture
  4. Qu'est-ce que la conception de systèmes embarqués :étapes du processus de conception
  5. ADI présente des technologies pour chaque domaine de la conception de systèmes embarqués
  6. Axiomtek :système embarqué avec switch PoE géré de couche 2 intégré
  7. IBASE :système Mini-ITX mince avec SoC AMD Ryzen Embedded V1000 embarqué
  8. MicroSys :informatique Edge intégrée avec processeur NPX LS1028A et IEEE TSN
  9. Tout compris avec additif