Microarchitecture du processeur CALF

Le processeur CALF est un processeur libre et ouvert basé sur l’architecture RISC-V. Au sein de la plateforme CALF, il est responsable de l’exécution des programmes permettant la réalisation d’application. La microarchitecture du processeur est conçu autour d’une machine d’états finis. Il réalise donc une implémentation multi-cycle de l’exécution des opérations, pouvant aller de 4 à 7 cycles selon le type d’instructions et des paramètres utilisés.

Machine d’états finis

Au sein du processeur, une machine d’états finis (ou FSM) est resonsable du séquencement de l’exécution de chaque instruction. Voici les différentes états existants:

  • s0BOOT est l’état au démarrage du système. Le processeur reste dans cet état jusqu’à ce que le bootloader ait terminé ses différentes opérations au démarrage.
  • s1IF0 et s1IF1 sont les deux états nécessaires à la récupération en mémoire de l’instruction (Instruction Fetch). Durant le cycle s1IF0, une requête de lecture est envoyée vers la mémoire à l’adresse contenu par le PC (Program Counter). Durant le cycle s1IF1, la réponse de la mémoire est sauvegardée dans le registre interne instr contenant l’instruction à exécuter. Dans le cas où les accès mémoires s’effectuent en un seul cycle, seul s1IF0 est utilisé: tout est effectué dans le même cycle.
  • s2ID est l’état où se déroule le décodage de l’instruction (Instruction Decode). L’instruction récupérée précédemment est interprétée et traduite en signaux internes pour pilotes les différentes mécanismes d’exécution (ALU, accès mémoires etc.). C’est également à ce cycle que sont lus les différents registres servant d’opérandes depuis les registres généraux (GPR pour General Purpose Registers).
  • s3ALU est l’état durant lequel la plupart des opérations arithmétiques et logique sont effectuées.
  • s3BRU est l’état durant lequel les opérations liées aux branchements conditionnels et aux sauts sont effectuées.
  • s3ADDR est l’état durant lequel l’adresse mémoire pour les accès (chargement ou rangement) est calculée.
  • s4MEM0 et s4MEM1 sont les deux états nécessaires pour effectuer un accès mémoire pour une donnée. Durant le cycle s4MEM0, une requête de lecture est envoyée vers la mémoire à l’adresse calculées dans s3ADDR. Durant le cycle s4MEM1, la réponse de la mémoire est sauvegardée dans les registres internes. Dans le cas où les accès mémoires s’effectuent en un seul cycle, seul s4MEM0 est utilisé: tout est effectué dans le même cycle.
  • s5WB est l’état où se déroule l’écriture du résultat (Write Back). Selon l’instruction exécutée, le registre de destination correspondant dans les GPR est modifié avec la valeur précédemment calculée.

Interface mémoire

Ajout d’une instruction

Le processeur CALF est basé sur l’ISA RISC-V. Ce jeu d’instructions est organisé autour d’une base d’instructions extensibles pour permettre le support d’opérations gérées par le matériel selon les besoins du système final. Dans cette partie, nous allons voir comment le processeur peut être modifié pour ajouter de nouvelles instructions.

Arithmétique ou logique

Exemple maxu extension B