Projet de spécialité - Simulation du jeu d'instruction RISC-V

De Ensiwiki
Aller à : navigation, rechercher

Projet de spécialité 2018-2019 suivi par Frédéric Pétrot

Contexte

Le projet GL utilise aujourd'hui comme cible matériel un processeur fictif. Une des raisons qui rent délicat l'usage d'un processeur plus « réaliste » est l'absence de simulateur adapté au projet. En effet, les simulateurs classiques (qemu, ...) exécutent le binaire sans se poser de question, comme une vraie machine. Hors dans le projet GL, nous avons besoin de n'exécuter que du code utilisateur simple, mais en revanche la capacité du simulateur à détecter rapidement les erreurs, par exemple de type, dès que possible est nécessaire pour aider à la mise au point du compilateur.

L'objectif du projet est donc (a) de développer un simulateur ad-hoc d'un sous-ensemble minimal du RISC-V (RISC-T), (b) de faire produire de l'assembleur RISC-T, éventuellement annoté, au générateur de code du projet GL, et (c) de vérifier un "certain nombre" de propriétés lors de l'exécution.

Simulateur

Le risc-v présente 32 registres à usage général plus quelques registres spécifiques (genre pc). Le sous-ensemble d'instructions qui nous intéresse, que nous appellerons RISC-T pour ‘tiny’ contient en gros les instructions utilisateur, qui sont au nombre de 35 (au minimum, 43 si l'on souhaite ajouter la multiplication et la division entière).

En sus de l’ultra classique interprétation d’instructions (la partie la plus facile), ce simulateur devra intégrér des vérifications à l'exécution. Ces vérifications sont à définir, et pourront s’appuyer sur des méta-informations produites par le générateur de code qui est l’objet de l’autre partie du projet.

On pourra s'inspirer par exemple des travaux suivants [1] qui proposent une méthode qui semble appropriée au besoin.

Générateur de code

La production du code se fait par l’appel à une API spécifique, que l’on pourra être amené à étendre, pour générer de l’assembleur risc-v enrichi de méta-informations. Comme nous utiliserons l’assembleur disponible sur le système pour la production du binaire au format elf en vue de son interprétation, les méta-informations devront être stockées dans le format de débug dwarf.

Prérequis

Cours Archi/CEP/C en 1A, intérêt pour les aspects bas niveau de l'informatique. HLCDC (Hacker Level C Development Certificate) serait un plus :)

Outillage

Outils de cross-development RISC-V, libelf-dev, libdwarf-dev, make/cmake, ...

Contact

Frédéric Pétrot <frederic.petrot@univ-grenoble-alpes.fr>