Thèse soutenue

Contribution à la simulation de processeur : conception d'un générateur de librairie de simulateurs fonctionnels

FR  |  
EN
Auteur / Autrice : Tahiry Ratsiambahotra
Direction : Pascal Sainrat
Type : Thèse de doctorat
Discipline(s) : Informatique
Date : Soutenance en 2010
Etablissement(s) : Toulouse 3

Résumé

FR  |  
EN

L'adoption de la simulation comme un outil de test et de validation est unanime surtout dans le domaine des systèmes embarqués, domaine dans lequel les applications sont souvent complexes et où les méthodes formelles trouvent vite leurs limites. Cette simulation se base sur le noyau principal du matériel à embarquer qui est le processeur. Les systèmes à simuler sont de plus en plus complexes. Il en découle que concevoir un simulateur requiert beaucoup de temps et est passible d'erreurs. Parallèlement, le délai alloué à cette conception est raccourci à cause des délais de mise à disposition sur le marché de plus en plus courts. Ainsi, depuis les années 1990, la recherche sur la génération automatique de simulateur s'est accrue. Il devient de plus en plus indispensable de décrire le système à simuler avec un langage de haut niveau et ensuite de générer le simulateur pour minimiser les erreurs. Ce langage de haut niveau est appelé langage de description d'architecture ou ADL (Architecture Description Language). Nous nous intéressons dans cette thèse aux langages de description d'architectures de processeurs pour développer notre générateur automatique de simulateurs fonctionnels. Un générateur associé à un ADL peut viser à produire automatiquement plusieurs outils en même temps : un simulateur ou émulateur, un compilateur-assembleur ou générateur de code, un désassembleur-débogueur. En vérité, c'est une bibliothèque qui est produite et les outils sont générés à partir de templates d'utilisation de fonctions de la bibliothèque. L'approche modulaire a été proposée pour faire évoluer efficacement la description d'un processeur. Cette approche, que nous avons adoptée, propose de découpler la description de la partie fonctionnelle du processeur de la description structurelle. Ainsi, non seulement il est possible de faire évoluer l'une ou l'autre partie indépendamment mais un langage différent peut être utilisé pour chaque partie. Alors, pour la partie structurelle, des langages HDL (Hardware Description Language) comme SystemC ou VHDL sont appropriés tandis que, pour la partie fonctionnelle, un ADL est nettement préférable. D'une part, vu la diversité des jeux d'instructions (encodage, taille des instructions, mode d'adressage), et des outils ciblés (compilateur-simulateur), il est difficile de trouver, parmi les ADLs existants, un langage capable de décrire toutes les familles de jeux d'instructions existants. Pourtant durant la phase de conception, il est très important d'avoir le maximum de choix d'implémentations possibles. Plus il y a de choix d'implémentations, plus l'architecture qui en découle est sûre d'être la meilleure possible. D'autre part, dans les systèmes critiques, le principe de dissymétrie impose au concepteur de composer avec au moins deux architectures processeur différentes, son système embarqué. Même si ces choix dépendent de plusieurs facteurs, ils sont aussi limités par la capacité de l'ADL à décrire les architectures visées. L'idéal est donc de posséder un ADL qui est capable de décrire toute architecture. Nous avons adopté le langage ADL " nML " de l'université de Aachen, qui a été source d'inspiration de plusieurs firmes et chercheurs dans ce domaine pour réaliser notre générateur de librairie de simulation fonctionnelle : GLISS. Nous l'avons étendu afin que, d'une part, le langage soit capable de décrire toutes les familles de jeu d'instructions existantes (RISC, VLIW, CISC) et, d'autre part, que la taille du code généré soit plus compacte et la vitesse de simulation plus grande. Ces trois facteurs (universalité, compacité du code généré et vitesse de simulation) sont importants pour l'intégration du générateur dans un environnement de simulation complet. Nous avons actuellement, généré cinq librairies de simulateurs fonctionnels pour le HCS12X de Freescale, l'ARM V5 (y compris l'extension Thumb), l'IBM PowerPC750, le Sharc d'Analog Devices et le Tricore d'Infineon). Cependant, la bibliothèque générée par GLISS peut être utilisée dans n'importe quel outil acceptant le code C.