Analyser les conceptions FPGA grâce à des techniques de reverse engineering
Un aperçu des approches de rétro-ingénierie pour la clarté et l'analyse de la conception FPGA.
― 6 min lire
Table des matières
L'ingénierie inverse, c'est l'art d'analyser un design pour piger sa structure et sa fonctionnalité. Dans le contexte des designs FPGA (Field-Programmable Gate Array), ça veut dire qu’on prend le fichier de bitstream, qui sert à configurer le FPGA, et on extrait des infos utiles pour créer un modèle de haut niveau. Ce processus peut aider à valider des designs existants, surtout ceux qui sont vieux ou qui ne sont plus documentés.
Les designs FPGA utilisent souvent des chaînes de transport rapides. Ce sont des chemins spéciaux dans le matériel qui aident à faire des opérations arithmétiques plus vite. L'objectif ici, c'est d'analyser ces chaînes de transport pour détecter des opérations au niveau des mots, ce qui veut dire qu’on identifie des opérations plus grandes qui sont composées d'opérations plus simples.
Étapes de l'ingénierie inverse
Il y a trois étapes principales dans l'ingénierie inverse d'un design FPGA :
- Extraction du Bitstream : Cette étape récupère le fichier de bitstream utilisé pour programmer le FPGA.
- Extraction du Netlist : On crée une représentation détaillée du design au niveau des portes logiques à partir du bitstream.
- Découverte des Spécifications : Pendant cette étape, on extrait des composants fonctionnels de haut niveau à partir du netlist détaillé.
Bien qu'il existe de nombreux outils pour travailler avec des designs FPGA, ils se concentrent souvent soit sur les détails de bas niveau, soit sur les descriptions de haut niveau. Le but ici, c'est de combler ce fossé.
Le Problème
En faisant de l'ingénierie inverse, la structure modulaire originale du design peut se perdre. De plus, les structures au niveau des mots peuvent être mélangées ou optimisées avec d'autres parties du netlist. Ça peut créer de grands défis pour identifier ce que fait chaque partie du design, surtout sans connaître les noms des différents composants dans le netlist.
L'objectif principal de ce travail est de construire un outil automatisé qui peut analyser les représentations de bas niveau et générer une vue de haut niveau plus compréhensible. Ça implique d'étudier les chaînes de transport et d'utiliser des techniques existantes des designs ASIC (Application-Specific Integrated Circuit) pour aider à identifier diverses opérations.
Techniques d'ingénierie inverse
Chaînes de Transport
Les chaînes de transport sont cruciales dans les FPGA modernes car elles servent à accélérer les opérations arithmétiques. En regardant de plus près ces chaînes de transport, on peut discerner si une série d'opérations en chaîne vise à effectuer une addition, une soustraction ou des comparaisons.
L'architecture du module de transport dans les FPGA Xilinx est conçue pour identifier ces opérations rapidement. La structure se compose de portes logiques spécifiques qui travaillent ensemble pour terminer des calculs. Comprendre comment ces portes interagissent peut aider à identifier les opérations en cours.
Analyser les Chaînes de Transport
Pour analyser les chaînes de transport efficacement, on peut suivre quelques étapes systématiques :
- Identifier tous les éléments de transport dans le netlist.
- Vérifier les connexions pour déterminer si elles sont le début d'une chaîne de transport.
- Parcourir les connexions pour identifier tous les composants qui composent la chaîne de transport.
En effectuant cette analyse, on peut clarifier les opérations qui sont en cours.
Détecter les Opérations
Pour identifier les opérations spécifiques, on examine les caractéristiques de la chaîne de transport. On analyse les fonctions logiques associées à chaque broche et on les compare à une bibliothèque prédéfinie d'opérations connues. Si les caractéristiques correspondent, on peut confirmer l'opération en cours.
Gérer les Opérations Complexes
Des fois, une chaîne de transport peut effectuer plus d'une opération. Dans ces cas, on doit identifier les lignes de sélection qui signalent quelle opération exécuter. En observant les signaux d'entrée, on peut déterminer la condition sous laquelle chaque opération se produit.
Générer des Représentations de Haut Niveau
Une fois que les opérations ont été identifiées, l'étape suivante est de traduire ces résultats en une représentation de haut niveau, comme en Verilog ou VHDL. Cette représentation simplifie la compréhension de ce que fait le design, rendant plus facile la validation ou la modification à l'avenir.
Composants Séquentiels
En plus des chaînes de transport, il faut aussi s'occuper des composants séquentiels qui composent les designs. Ça inclut des flip-flops, des registre et des compteurs. Regrouper les flip-flops en fonction des signaux de contrôle aide à identifier des structures séquentielles plus grandes.
Identifier des Modules Séquentiels
Pour trouver ces composants séquentiels, on analyse les connexions entre les flip-flops. En développant des graphes qui montrent comment ces composants se connectent, on peut identifier des modules comme des compteurs ou des décalages.
Flux de Travail de l'Outil
Le processus d'ingénierie inverse peut être géré efficacement à travers une série d'étapes définies. Voici comment fonctionne le flux de l'outil :
- Analyser le Netlist : La première étape consiste à lire et traiter le netlist pour préparer l'analyse.
- Identification des Chaînes de Transport : Ensuite, l'outil identifie et catégorise toutes les chaînes de transport présentes dans le design.
- Regroupement des Composants Séquentiels : L'outil regroupe ensuite les flip-flops en fonction des signaux de contrôle partagés.
- Identification des Opérations par Bits : Après, l'analyse se concentre sur l'identification des opérations à bits.
- Génération de la Description RTL : Enfin, une description RTL est créée pour chaque module reconnu.
Exécution et Résultats
Après avoir mis en œuvre ces techniques à travers un outil, divers designs du monde réel ont été évalués. Les résultats montrent différents niveaux de succès dans la détection des opérations et l'identification des composants à travers différents benchmarks. Cela aide à donner une vision plus claire de la fonctionnalité et de la performance globales du design.
Conclusion et Travaux Futurs
En résumé, le flux d'outils proposé analyse efficacement les designs FPGA, améliorant la clarté et la compréhension des opérations sous-jacentes. Les techniques discutées, notamment autour de l'analyse des chaînes de transport, jouent un rôle clé dans l'ingénierie inverse.
Les travaux futurs consistent à élargir les méthodes actuelles pour identifier des opérations supplémentaires comme des multiplicateurs et des diviseurs. Améliorer l'identification des structures ALU sera également essentiel pour gérer des designs plus complexes.
En continuant à affiner ces techniques, on pourra mieux soutenir l'ingénierie inverse des designs FPGA, ouvrant la voie à une validation et à des évaluations de sécurité de design améliorées.
Titre: Reverse Engineering Word-Level Models from Look-Up Table Netlists
Résumé: Reverse engineering of FPGA designs from bitstreams to RTL models aids in understanding the high level functionality of the design and for validating and reconstructing legacy designs. Fast carry-chains are commonly used in synthesis of operators in FPGA designs. We propose a method to detect word-level structures by analyzing these carry-chains in LUT (Look-Up Table) level netlists. We also present methods to adapt existing techniques to identify combinational operations and sequential modules in ASIC netlists to LUT netlists. All developed and adapted techniques are consolidated into an integrated tool-chain to aid in reverse engineering of word-level designs from LUT-level netlists. When evaluated on a set of real-world designs, the tool-chain infers 34\% to 100\% of the elements in the netlist to be part of a known word-level operation or a known sequential module.
Auteurs: Ram Venkat Narayanan, Aparajithan Nathamuni Venkatesan, Kishore Pula, Sundarakumar Muthukumaran, Ranga Vemuri
Dernière mise à jour: 2023-03-05 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2303.02762
Source PDF: https://arxiv.org/pdf/2303.02762
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.