Chapitre 2: La méthode de conception conjointe logicielle/matérielle (codesign) PDF

Document Details

TopsHeliotrope9172

Uploaded by TopsHeliotrope9172

2024

Tags

embedded systems hardware/software co-design system design computer science

Summary

This document details the method of joint software/hardware design (co-design) for embedded systems. It describes the stages involved in this process, including specifications, hardware/software partitioning, synthesis/compilation, and testing.

Full Transcript

CHAPITRE 2: LA MÉTHODE DE CONCEPTION CONJOINTE LOGICIELLE/MATÉRIELLE (CO- DESIGN) Mastère Professionnel en systèmes embarqués & IoT Année Universitaire 2024-2025 Plan  Rappel  La Méthode de Conception Conjointe Logiciel/Matériel (Codesig...

CHAPITRE 2: LA MÉTHODE DE CONCEPTION CONJOINTE LOGICIELLE/MATÉRIELLE (CO- DESIGN) Mastère Professionnel en systèmes embarqués & IoT Année Universitaire 2024-2025 Plan  Rappel  La Méthode de Conception Conjointe Logiciel/Matériel (Codesign)  La spécification  Le partitionnement matériel/logiciel  Synthèse / compilation et interfaçage  Test et validation RAPPEL  Quoi de neuf dans un SoC  Assemblage de composants virtuels  IP: Intellectual Properties  « IP core »  Partitionnement logiciel – matériel Evolution des  Interfaces entre IP méthodologies  Vérification Co-Design Nouveau flot de conception  Solutions architecturales Flot de conception continu depuis les spécifications systèmes jusqu'à l'implémentation CO-DESIGN - Le support logiciel dans un SoC est une composante importante qu’il ne faut pas négliger. Il est important de prévoir la possibilité de configurer, corriger, utiliser ou faire utiliser le produit après la fabrication du circuit. - À l’opposé d’un circuit programmable générique, qui doit anticiper proposer des fonctionnalités qui pour des applications non connues à l’avance, pour un SoC destiné à une application spécifique, l’étape de partitionnement est très importante. À partir du cahier des charges, on doit identifier les fonctionnalités qui peuvent être implémentées de façon logicielle et évaluer les performances nécessaires pour une cible processeur. Si cela est compatible avec les objectifs de coût et de consommation en utilisant des cibles existantes, il n’est peut-être pas utile de développer un matériel dédié. Sinon, il faut décider quelles fonctionnalités auront besoin d’une implémentation matérielle et comment partager les tâches. CO-DESIGN  Le CoDesign logiciel/matériel propose une approche structurée pour la conception d’une classe de systèmes numériques  les systèmes dédiées Quatre grands étapes sont distinguées dans l’approche CoDesign : 1-) Spécification 2-) Partitionnement 3-) Synthèse logicielle & matérielle 4-) Co-simulation La réalisation finale est une réalisation conjointe matérielle/logicielle CO-DESIGN Estimations Spécification Optimisations Modèles Partitionnement HW/SW Synthèse logicielle Synthèse Interfaces Synthèse matérielle Proc / DSP Co-Simulation ASIC / FPGA La Spécification La spécification est une étape fondamentale dans la conception des systèmes embarqués. Elle consiste à définir de manière détaillée et précise toutes les exigences du système avant de passer à la phase de développement. Une bonne spécification sert de base pour toutes les étapes suivantes, garantissant que le système final répondra aux attentes et aux besoins des utilisateurs. Principaux Aspects de la Spécification : 1. Fonctionnalités : - Décrire les fonctions principales que le système doit accomplir. - Préciser les interactions attendues entre les différentes composantes du système. - Identifier les cas d’utilisation et les scénarios typiques que le système doit gérer. 2. Performances : - Spécifier les exigences en termes de temps de réponse, débit de traitement, fréquence d'exécution des tâches, etc. - Définir les performances minimales et maximales attendues, ainsi que les conditions sous lesquelles elles doivent être atteintes. 3. Contraintes Temporelles : - Inclure des délais précis pour l'exécution de tâches critiques (exigences temps réel). - Définir des deadlines strictes pour certaines opérations qui ne doivent pas être dépassées. 4. Contraintes Énergétiques : - Prendre en compte la consommation d'énergie, surtout pour les systèmes embarqués fonctionnant sur batterie. - Définir les exigences d’efficacité énergétique pour assurer une autonomie suffisante tout en maintenant les performances nécessaires. 5. Contraintes de Coûts : - Établir un budget pour les coûts de développement, de production, et de maintenance du système. - Prendre en compte les compromis potentiels entre les coûts et d'autres aspects comme la performance ou la qualité. 6. Interfaces Utilisateur : - Définir les interfaces par lesquelles l'utilisateur interagira avec le système. - Inclure les spécifications sur l'ergonomie, l'accessibilité, et l'expérience utilisateur (UX). Importance de la Spécification : - Guide pour le Développement : Une spécification claire et détaillée permet à l'équipe de développement de savoir exactement ce qui doit être fait, réduisant ainsi le risque de malentendus et de retours en arrière. 15 - Réduction des Risques : Elle aide à identifier les risques techniques et à prévoir les solutions avant de commencer la phase de développement. - Base de la Validation : Les tests de validation à la fin du projet se basent sur la spécification pour vérifier que toutes les exigences ont été respectées. Exemple Pratique : Dans le développement d'un système embarqué pour une voiture autonome, la spécification pourrait inclure des détails sur : - Les fonctions de détection des obstacles et leur temps de réaction. - Les contraintes énergétiques liées à l'autonomie de la batterie. - Les performances minimales des algorithmes de navigation. - Les interfaces utilisateur pour le tableau de bord et l'interaction avec le conducteur. Le Partitionnement Matériel/Logiciel Le partitionnement matériel/logiciel est une étape clé dans la conception des systèmes embarqués. Cette étape consiste à déterminer quelles parties du système seront implémentées en matériel (hardware) et lesquelles seront gérées par le logiciel (software). Cette décision a un impact direct sur les performances, les coûts, la consommation d'énergie, et la flexibilité du système. Principes du Partitionnement : 1. Identification des Composants : - Commencer par identifier toutes les fonctions et les tâches que le système doit réaliser. - Ces fonctions peuvent inclure le traitement des données, le contrôle des périphériques, les interfaces utilisateur, la gestion des communications, etc. 2. Analyse des Exigences : - Pour chaque fonction identifiée, analyser les exigences en termes de performance, de réactivité, de consommation d'énergie, et de coût. - Les fonctions nécessitant des temps de réponse très rapides ou un traitement intensif peuvent être mieux adaptées à une implémentation matérielle. - Les fonctions nécessitant une flexibilité ou une mise à jour fréquente peuvent être mieux gérées par le logiciel. 3. Décision d'Implémentation : - Décider si une fonction doit être implémentée en matériel ou en logiciel en se basant sur les analyses précédentes. - Les composants matériels typiques incluent les FPGA (Field Programmable Gate Arrays), les ASIC (Application-Specific Integrated Circuits), et les processeurs. - Les fonctions logicielles seront exécutées sur des processeurs embarqués, des microcontrôleurs, ou des systèmes d'exploitation en temps réel (RTOS). Critères de Partitionnement : 1. Performance : Les tâches critiques en termes de temps ou de traitement intensif (par exemple, le traitement du signal, le décodage vidéo) sont souvent implémentées en matériel pour des performances optimales. 2. Coût : Le matériel personnalisé (comme les ASIC) peut être coûteux à développer, mais très efficace en production de masse. Le logiciel, en revanche, est plus flexible et peut être déployé à moindre coût sur du matériel générique. 3. Consommation d'Énergie : -Le matériel peut être optimisé pour une faible consommation d'énergie, ce qui est crucial dans les systèmes embarqués alimentés par batterie. - Le logiciel peut être plus énergivore, surtout s'il fonctionne sur un processeur généraliste. 4. Flexibilité : - Le logiciel est plus facilement modifiable et adaptable, ce qui est un avantage pour les systèmes nécessitant des mises à jour régulières ou des ajustements après déploiement. - Le matériel, une fois fabriqué, est difficile à modifier, mais il offre une grande robustesse et une exécution rapide. 5. Complexité de Développement : - Développer du matériel est souvent plus complexe et prend plus de temps que de développer du logiciel. - Le choix de la solution doit tenir compte des ressources disponibles pour le projet, notamment en termes de compétences techniques et de délais. Exemple de Partitionnement : Dans un système embarqué de traitement d'image, le traitement initial de l'image (filtrage, compression) pourrait être réalisé en matériel pour accélérer le processus, tandis que l'analyse des images et la prise de décision pourraient être effectuées en logiciel pour plus de flexibilité. Conclusion : Le partitionnement matériel/logiciel est une étape cruciale qui nécessite un équilibre délicat entre performance, coût, énergie, et flexibilité. Une bonne décision de partitionnement permet d’optimiser le système embarqué pour qu'il réponde efficacement aux exigences spécifiques du projet tout en respectant les contraintes imposées. Les Ordonnancements L’ordonnancement est une étape cruciale dans la gestion des tâches et des ressources d’un système embarqué. Il s'agit de déterminer l'ordre et le moment exact où les différentes tâches du logiciel doivent être exécutées, en tenant compte des priorités, des délais, et des ressources disponibles. Un bon ordonnancement est essentiel pour garantir que le système fonctionne de manière efficace, en respectant les contraintes temporelles critiques. Types d’Ordonnancements : 1. Ordonnancement Statique : -Dans l’ordonnancement statique, le planning des tâches est défini à l'avance et ne change pas pendant l'exécution du système. - Les tâches sont planifiées en fonction de leur priorité et de leur fréquence d'exécution. Le calendrier est souvent calculé hors ligne, avant l'exécution du système. - Ce type d'ordonnancement est utilisé dans des systèmes où les tâches et leurs délais sont bien connus à l'avance, comme les systèmes embarqués temps réel rigides. 2. Ordonnancement Dynamique : - Dans l’ordonnancement dynamique, les décisions concernant l’exécution des tâches sont prises en temps réel, en fonction de l'état actuel du système. - Ce type d'ordonnancement est plus flexible et peut s'adapter aux variations de charge de travail, aux événements imprévus, et aux tâches nouvellement arrivées. - Les algorithmes d'ordonnancement dynamique incluent des techniques comme le round-robin, l’ordonnancement basé sur la priorité dynamique, ou encore le rate-monotonic scheduling. Critères pour l’Ordonnancement : 1. Priorité des Tâches : - Les tâches critiques (comme celles liées à la sécurité ou au contrôle en temps réel) reçoivent généralement une priorité plus élevée et doivent être exécutées avant les autres. - Les tâches moins critiques peuvent être programmées avec une priorité plus faible et exécutées lorsque les ressources sont disponibles. 2. Délais (Deadlines) : -Les tâches avec des délais stricts (deadline) doivent être exécutées dans un temps imparti pour éviter des défaillances du système. - L'ordonnancement doit s'assurer que ces délais sont respectés pour maintenir la fiabilité du système. 3. Ressources Disponibles : -L'ordonnancement doit prendre en compte les ressources limitées du système (comme le processeur, la mémoire, ou les périphériques d'entrée/sortie) et les allouer efficacement aux tâches. - Dans des environnements à ressources contraintes, il est crucial de maximiser l'utilisation des ressources tout en évitant les situations de contention. Algorithmes d'Ordonnancement Courants : 1. Round-Robin : -Chaque tâche reçoit une quantité de temps égale pour s'exécuter. Si elle ne termine pas dans le temps imparti, elle est mise en attente jusqu'à ce que ce soit à nouveau son tour. - Simple et équitable, mais peut être inefficace pour les tâches avec des délais critiques. 2. Rate-Monotonic Scheduling (RMS) : -Les tâches sont priorisées en fonction de leur fréquence d'exécution. Les tâches les plus fréquentes reçoivent une priorité plus élevée. - Utilisé souvent dans des systèmes temps réel pour garantir que les tâches fréquentes respectent leurs délais. 3. Earliest Deadline First (EDF) : -Les tâches sont planifiées en fonction de leur deadline, avec celles ayant la deadline la plus proche exécutée en premier. - Cet algorithme est optimal pour minimiser les dépassements de délai dans les systèmes dynamiques. Importance de l’Ordonnancement : - Assurance de Temps Réel : Dans les systèmes temps réel, l'ordonnancement garantit que les tâches critiques sont exécutées dans les délais impartis. - Optimisation des Ressources : Une bonne gestion des tâches permet une utilisation efficace des ressources limitées, évitant les goulets d'étranglement et maximisant les performances globales. - Fiabilité du Système : Un ordonnancement approprié contribue à la fiabilité du système en évitant les conditions de course, les blocages, et les dépassements de délai qui pourraient compromettre le fonctionnement du système. Exemple d’Application : Dans un système embarqué pour le contrôle d’un robot industriel, l’ordonnancement devra s'assurer que les tâches critiques comme la détection d'obstacles et la commande des moteurs sont exécutées en priorité, tandis que les tâches de diagnostic ou de communication avec un superviseur peuvent être traitées en arrière-plan. Conclusion : L'ordonnancement est une composante vitale de la conception des systèmes embarqués, assurant que les tâches sont exécutées de manière optimale en fonction des contraintes du système. Un ordonnancement bien conçu permet non seulement de respecter les exigences de temps réel, mais aussi d'optimiser l'utilisation des ressources disponibles, garantissant ainsi la robustesse et l'efficacité du système. Synthèse / Compilation et Interfaçage La synthèse ou la compilation ainsi que l’interfaçage sont des étapes cruciales dans la conception des systèmes embarqués. Ces processus permettent de transformer le code haut niveau en une forme exécutable par le matériel cible et de garantir que le matériel et le logiciel communiquent de manière efficace et sans erreur. Synthèse / Compilation 1. Traduction du Code Haut Niveau : -La synthèse ou la compilation consiste à traduire le code écrit dans un langage de programmation de haut niveau (comme C/C++, VHDL, Verilog) en un code binaire ou microcode directement exécutable par le matériel (processeur, FPGA, ASIC). - Pour les processeurs, cela implique la génération de code machine à partir du code source. Pour les circuits logiques programmables (comme les FPGA), la synthèse traduit les descriptions logiques en configurations matérielles spécifiques.  Il faudra prévoir des itérations de test et de validation:  pour le logiciel  pour le matériel  conjoint Synthèse logicielle C File C File Asm. File Compiler Assembler Binary Binary Binary File File File Linker Debugger Library Exec. File Profiler Phase de Phase de développement vérification SYNTHÈSE MATÉRIELLE SUM := A1+B1 Algorithme Circuit 2. Optimisation des Performances : cours de la synthèse ou de la compilation, des optimisations -Au sont effectuées pour améliorer les performances du code. Cela peut inclure l'optimisation du temps d'exécution, la réduction de la taille du code, ou la diminution de la consommation d'énergie. - Les outils de compilation peuvent appliquer des techniques comme l'optimisation de la boucle, la gestion efficace des registres, ou l'élimination du code mort pour améliorer l'efficacité globale du programme. 3. Génération du Microcode - Dans certains cas, la compilation inclut la génération du microcode, qui est une séquence d'instructions de bas niveau spécifique au matériel cible. Le microcode contrôle directement les opérations internes du processeur, telles que le décodage des instructions, le contrôle des unités de calcul, et la gestion des interruptions. 4. Vérification et Simulation : - Après la synthèse, le code généré est souvent simulé pour vérifier qu'il fonctionne correctement sur le matériel cible. Cette étape permet de détecter et de corriger les erreurs avant la mise en production. - Les simulations peuvent inclure des tests de performance, des vérifications de timing, et des analyses de consommation d'énergie pour s'assurer que le système respecte les spécifications initiales. Interfaçage 1. Définition des Protocoles de Communication : - L'interfaçage garantit que le logiciel et le matériel peuvent échanger des informations de manière cohérente. Cela implique la définition des protocoles de communication, qui déterminent comment les données sont envoyées, reçues, et interprétées entre les différents composants du système. Synthèse des communications - Les protocoles peuvent être standards (comme I2C, SPI, UART, CAN) ou spécifiques à l'application, en fonction des besoins du système. 2. Gestion des Bus de Données : - Les bus de données sont les canaux par lesquels les informations circulent entre les différents composants matériels (processeurs, mémoires, périphériques). L'interfaçage comprend la configuration de ces bus pour assurer une communication efficace et sans conflit. - Une gestion efficace des bus de données est essentielle pour éviter les goulets d'étranglement et garantir que les données circulent à la vitesse nécessaire pour respecter les délais du système. 3. Configuration des Périphériques : - L'interfaçage inclut également la configuration des périphériques matériels, tels que les capteurs, les actionneurs, les interfaces utilisateur, et les modules de communication. Chaque périphérique doit être correctement configuré pour fonctionner en harmonie avec le reste du système. - Cela peut inclure la définition des registres de contrôle, la gestion des interruptions, et la synchronisation des opérations entre les différents composants. 4. Test de l'Interfaçage : Une fois l'interfaçage mis en place, il est testé pour s'assurer que toutes les communications entre le matériel et le logiciel fonctionnent correctement. Des outils de débogage et d'analyse de bus peuvent être utilisés pour surveiller les échanges de données et identifier les éventuels problèmes de communication. Importance de la Synthèse/Compilation et de l’Interfaçage - Efficacité et Performance : Une bonne synthèse et compilation garantissent que le code est optimisé pour le matériel cible, maximisant ainsi les performances du système tout en minimisant la consommation de ressources. - Fiabilité : L’interfaçage garantit que toutes les composantes du système communiquent correctement, ce qui est crucial pour éviter les erreurs de communication et les dysfonctionnements. - Adaptabilité : Un interfaçage bien conçu permet de rendre le système plus modulaire, facilitant les mises à jour ou les modifications ultérieures. Exemple d’Application Dans un système embarqué utilisé pour le contrôle d'un drone, la synthèse/compilation permet de traduire les algorithmes de contrôle de vol en un code exécutable optimisé pour le processeur embarqué. L'interfaçage assure que les capteurs de position, les moteurs, et les modules de communication sans fil interagissent correctement pour maintenir la stabilité du drone en vol. Conclusion La synthèse/compilation et l’interfaçage sont des étapes essentielles qui traduisent les intentions de conception en un système fonctionnel. Elles assurent que le logiciel et le matériel travaillent ensemble de manière harmonieuse, garantissant ainsi la performance, la fiabilité, et l’efficacité du système embarqué. Test et Validation Les étapes de test et validation sont cruciales dans la conception des systèmes embarqués, car elles permettent de vérifier que le système final répond aux spécifications initiales et qu'il fonctionne correctement dans toutes les conditions d'utilisation prévues. Ces étapes garantissent que le système est fiable, performant, et conforme aux normes et exigences établies. Types de Tests et Validation : 1. Tests Fonctionnels : - Objectif : Vérifier que toutes les fonctionnalités du système embarqué fonctionnent comme prévu. - Méthode : Chaque fonction du système est testée individuellement et en combinaison avec d'autres fonctions pour s'assurer qu'elle produit les résultats attendus. Les tests fonctionnels incluent des cas normaux, ainsi que des cas limites ou des situations inhabituelles pour s'assurer que le système se comporte correctement en toutes circonstances. 2. Tests de Performance : - Objectif : Évaluer la capacité du système à fonctionner de manière efficace sous différentes charges et conditions. - Méthode : Ces tests mesurent les performances du système en termes de temps de réponse, de débit, de consommation d'énergie, et d'utilisation des ressources. Ils permettent d'identifier les goulets d'étranglement potentiels et d'optimiser les performances du système. 3. Tests de Robustesse : -Objectif :S'assurer que le système peut fonctionner correctement même en présence de conditions perturbatrices ou de pannes partielles. - Méthode : Les tests de robustesse incluent des scénarios comme les coupures d'alimentation, les défaillances de composants, ou les interférences électromagnétiques. Le système est également testé pour sa résistance aux intrusions et aux erreurs humaines. 4. Tests de Conformité : - Objectif :Vérifier que le système respecte toutes les normes et réglementations pertinentes, y compris celles de sécurité, d'interopérabilité, et de compatibilité. - Méthode : Le système est soumis à des tests spécifiques pour s'assurer qu'il est conforme aux normes industrielles, aux régulations gouvernementales, et aux standards de communication. Cela peut inclure des tests de compatibilité électromagnétique (CEM), des certifications de sécurité, ou des vérifications d’interopérabilité avec d’autres systèmes. Outils et Méthodes Utilisés : 1. Simulation : Les simulations permettent de tester le système dans un environnement contrôlé où des scénarios divers peuvent être rapidement configurés et exécutés. Les simulations sont particulièrement utiles pour tester des aspects comme la logique de contrôle, les algorithmes, et la gestion des ressources sans nécessiter de matériel réel. 2. Émulation : L'émulation implique l'utilisation de systèmes qui reproduisent fidèlement le comportement du matériel cible. Cela permet de tester le code sur un modèle du matériel réel avant que celui-ci ne soit disponible ou fabriqué, ce qui accélère le processus de développement. 3. Tests sur Bancs d'Essai Réels : Les bancs d'essai sont des environnements physiques où le système embarqué est testé sur du matériel réel. Cela permet de valider le comportement du système dans des conditions proches de celles de son utilisation finale. Les tests sur banc d'essai sont essentiels pour évaluer la robustesse, la performance, et l'interaction avec d'autres systèmes ou périphériques. 4. Tests de Régression : Chaque fois qu'une modification est apportée au système, des tests de régression sont effectués pour s'assurer que les nouvelles fonctionnalités ou corrections de bugs n'ont pas introduit de nouveaux problèmes ou dégradé les performances des fonctionnalités existantes. Importance du Test et de la Validation : -Fiabilité : Les tests assurent que le système est fiable et fonctionnera correctement dans toutes les conditions d'utilisation prévues. -Qualité : La validation garantit que le produit final répond aux normes de qualité attendues par les utilisateurs et les régulateurs. -Sécurité : En testant les aspects liés à la sécurité, les concepteurs s'assurent que le système ne présente pas de risques pour les utilisateurs et est protégé contre les cybermenaces. - Conformité : Les tests de conformité vérifient que le système respecte toutes les régulations et normes applicables, ce qui est crucial pour la commercialisation et l'acceptation du produit sur le marché. Exemple Pratique : Pour un système embarqué dans une voiture, les tests incluront la validation des fonctions de contrôle moteur, des systèmes de sécurité (comme les freins ABS), et des interfaces utilisateur (comme le tableau de bord numérique). Des tests de performance garantiront que le système répond en temps réel aux commandes du conducteur, et des tests de robustesse vérifieront que le système continue de fonctionner correctement dans des conditions extrêmes, comme des températures élevées ou de fortes vibrations. Conclusion : Le test et la validation sont des étapes essentielles pour garantir que le système embarqué est prêt à être déployé dans des environnements réels. Ils assurent que le système est performant, fiable, conforme aux normes, et capable de fonctionner de manière optimale dans toutes les conditions prévues. Ces étapes permettent de réduire les risques de défaillance après le déploiement et d'assurer la satisfaction des utilisateurs finaux.

Use Quizgecko on...
Browser
Browser