Nouvelle méthode pour une vérification matérielle efficace
La composition par morceaux améliore l'exécution symbolique pour une meilleure vérification de conception matérielle.
― 7 min lire
Table des matières
Vérifier les designs matériels est super important pour s'assurer qu'ils fonctionnent correctement et sont sécurisés. La méthode courante s'appelle la vérification basée sur des assertions (ABV), qui utilise des simulations pour tester et vérifier les designs. Cependant, cette méthode a ses limites. Une autre approche, appelée vérification formelle, essaie de prouver certaines propriétés du design. Une technique qui attire l'attention, c'est l'Exécution symbolique.
Exécution Symbolique
L'exécution symbolique est une méthode qui améliore les tests traditionnels. Au lieu d'utiliser des valeurs d'entrée réelles, elle les remplace par des symboles qui représentent plein de valeurs possibles. Ça permet au système d'analyser différents chemins à travers le design. Chaque chemin est associé à des conditions qui décrivent quelles valeurs mèneraient à ce chemin. Si un chemin montre une violation d'une assertion, les conditions peuvent indiquer quelles valeurs réelles bloqueraient le design.
Mais l'exécution symbolique fait face à un défi majeur : l'explosion des chemins. À mesure que les designs deviennent plus complexes, le nombre de chemins augmente rapidement, rendant difficile l'exploration complète de tous. Ça arrive parce que chaque point du design où il y a un choix entraîne la création de plus de chemins.
Pour résoudre ce problème, des travaux précédents ont combiné l'exécution symbolique avec la vérification de modèle ou limité son application à de petits designs.
Composition Par Morceaux
Cet article introduit une nouvelle technique appelée composition par morceaux. Cette méthode profite de la nature modulaire des designs matériels pour faciliter le problème de l'exploration des chemins en le confiant à des Solveurs SMT (satisfiabilité modulo théories). En se concentrant sur des parties indépendantes du design, on peut réduire considérablement le nombre de chemins à analyser.
Avec la composition par morceaux, le moteur peut analyser les chemins tout en étant capable de rassembler des infos sur comment les chemins se relient les uns aux autres dans le design. Cela permet d'obtenir un meilleur équilibre : réduire le boulot sans perdre d'infos importantes.
Comment ça Marche
La technique de composition par morceaux fonctionne en décomposant le design matériel en petits blocs indépendants. Chaque bloc est exploré une seule fois, puis les arbres d'exécution symbolique de chaque bloc sont combinés. Ça veut dire que le moteur n'a pas à revisiter le même code sans arrêt pendant qu'il explore le design.
Par exemple, si deux blocs indépendants existent, le moteur explorera d'abord l'un d'eux puis l'autre, évitant ainsi tout travail redondant. Quand vient le moment d'assembler les chemins, un solveur SMT vérifie quelles combinaisons de chemins sont valides.
Imagine avoir un puzzle avec plusieurs sections indépendantes. Au lieu de regarder tout le puzzle d'un coup, tu résous chaque section individuellement puis tu les mets ensemble. De cette façon, tu vois le tableau global sans avoir à refaire le travail.
Avantages de la Composition Par Morceaux
Le principal avantage de cette méthode, c'est qu'elle réduit considérablement le nombre de chemins à explorer. Dans les tests, la composition par morceaux a diminué le nombre de chemins examinés de façon significative tout en réduisant le temps d'exécution, avec des rapports montrant une réduction de temps de 97%.
En utilisant 84 propriétés de divers designs, la méthode a réussi à identifier des violations d'assertions dans plusieurs projets open-source, y compris des designs de systèmes sur puce (SoC) et d'unités centrales de traitement (CPU).
Processus de Vérification
Le processus de vérification commence par convertir les entrées réelles d'un design matériel en valeurs symboliques. Pendant que le moteur d'exécution symbolique parcourt le code, il maintient un état symbolique qui décrit l'exécution actuelle, y compris un stockage symbolique et une condition de chemin.
Quand le moteur rencontre un point de branchement dans le design, il vérifie la condition de chemin pour décider quelle direction prendre ensuite. Si aucune option n'est satisfaite, il se divise en deux chemins pour exploration. Ce processus continue, mais avec la composition par morceaux, le moteur peut limiter son attention à juste de nouveaux chemins qu'il n'a pas déjà couverts.
Contraintes et Techniques d'Optimisation
Dans l'exécution symbolique, deux coûts principaux apparaissent : le calcul de l'exécution symbolique et la détermination de la faisabilité de chaque branche d'un chemin. Avec la composition par morceaux, l'effort nécessaire pour ces deux parties est considérablement réduit. Des solveurs SMT avancés gèrent rapidement les vérifications de faisabilité, tandis que l'exploration des chemins devient beaucoup plus simple grâce à la nature modulaire de la méthode.
Le moteur d'exécution symbolique vérifie efficacement la logique combinatoire du design puis passe à la logique séquentielle qui suit. Chacun des blocs est traité une seule fois par cycle d'horloge.
Le moteur utilise des optimisations comme la détection de modules répétés, ce qui évite la nécessité de ré-analyser des parties du design qui sont identiques. Par exemple, si tu as plusieurs sections similaires dans un design, le moteur traite une section et applique ensuite les résultats aux autres au lieu de répéter le travail.
Une autre optimisation concerne l'analyse du cône d'influence. Cette forme d'analyse identifie quelles parties du design sont pertinentes pour les assertions que tu veux vérifier. En se concentrant uniquement sur ces sections, le moteur peut élaguer l'espace d'exploration, rendant le processus plus efficace.
Évaluation des Performances
Le moteur d'exécution symbolique utilisant la composition par morceaux a subi des évaluations approfondies. Les évaluations utilisent une variété de designs matériels ainsi que des assertions critiques obtenues de différentes sources.
Des expériences comparent les performances du moteur avec et sans composition par morceaux. Les résultats montrent que le moteur identifie les violations d'assertions rapidement, dépassant souvent les méthodes existantes de manière significative.
Dans des scénarios pratiques, alors que les méthodes traditionnelles peuvent prendre beaucoup de temps pour trouver des bugs, l'approche de composition par morceaux fonctionne beaucoup plus vite. Elle réduit efficacement le travail nécessaire pour vérifier chaque design, ce qui en fait une option attrayante pour vérifier les designs matériels.
Conclusion
La technique de composition par morceaux propose une solution prometteuse au problème de l'explosion des chemins dans l'exécution symbolique. En tirant parti de la structure modulaire des designs matériels et en réduisant la redondance dans l'exploration des chemins, cette approche améliore considérablement les performances.
Dans le monde de la vérification matérielle, où la complexité des designs ne fait qu'augmenter, des méthodes comme la composition par morceaux sont nécessaires pour maintenir l'efficacité et l'efficacité dans l'assurance de la correction et de la sécurité.
Cette méthode aide non seulement à une vérification plus rapide, mais permet aussi un processus plus gérable lorsqu'on s'occupe de designs matériels complexes. Avec les avancées continues dans les techniques et outils d'exécution symbolique, l'avenir de la vérification matérielle s'annonce radieux, ouvrant la voie à des designs plus robustes.
Titre: Countering the Path Explosion Problem in the Symbolic Execution of Hardware Designs
Résumé: Symbolic execution is a powerful verification tool for hardware designs, but suffers from the path explosion problem. We introduce a new approach, piecewise composition, which leverages the modular structure of hardware to transfer the work of path exploration to SMT solvers. We present a symbolic execution engine implementing the technique. The engine operates directly over register transfer level (RTL) Verilog designs without requiring translation to a netlist or software simulation. In our evaluation, piecewise composition reduces the number of paths explored by an order of magnitude and reduces the runtime by 97%. Using 84 properties from the literature we find assertion violations in 5 open-source designs including an SoC and CPU.
Auteurs: Kaki Ryan, Cynthia Sturton
Dernière mise à jour: 2023-04-11 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2304.05445
Source PDF: https://arxiv.org/pdf/2304.05445
Licence: https://creativecommons.org/licenses/by/4.0/
Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.
Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.
Liens de référence
- https://vm-web.pdos.csail.mit.edu/papers/rtlv:carrv21.pdf
- https://tex.stackexchange.com/questions/377122/typesetting-for-a-verilog-lstinput
- https://www.springer.com/gp/computer-science/lncs
- https://docs.google.com/presentation/d/1B5Tb-x7CKam_EzvUjMaM2WEsk0XKJwvozxwioQnxn00/edit?usp=sharing
- https://github.com/TeamVoss/VossII
- https://github.com/YosysHQ/sby
- https://github.com/seth-lab-tamu/hackdac-2018-soc
- https://github.com/YosysHQ/Yosys