Veuillez consulter cette page à partir de l'interface principale.
YASEP16 vs YASEP32 template text
version : 2011-09-14

Les différentes variétés de YASEP

L'architecture YASEP définit deux versions du processeur, selon que le chemin de données est sur 16 ou 32 bits : ce sont respectivement les versions YASEP16 et YASEP32. Elles partagent approximativement 95% du comportement et on essaie de garder un maximum de points communs entre les deux.

YASEP16 et YASEP32 diffèrent par la taille des mots de données mais la taille des données est indépendante des instructions. Les deux versions utilisent les mêmes formes courtes, longues et étendues (16 et 32 bits de large). D'ailleurs, le format des instructions sur 32 bits est conçu pour être facile à décoder même avec un bus mémoire sur 16 bits (voir le microYASEP).

Nous parlerons donc surtout des différences ici.

 
  • La première différence évidente est la taille des mots, qui destine chaque version à des usages différents.
  •  
  • La seconde différence est évidemment la taille du circuit intégré : YASEP16 utilise environ deux fois moins de portes logiques que YASEP32. Comme il est plus compact, YASEP16 laissera plus de place pour des circuits périphériques que YASEP32 dans un FPGA. De plus, à technologie identique, YASEP16 tourne à peu près 15% plus vite puisque sa taille plus petite raccourcit les fils et les chemins critiques.
  •  
     
  • Une troisième différence existe au niveau de la mémoire. La taille d'un programme est presque identique (puisque les instructions sont les mêmes) mais on ne peut pas accéder à la mémoire de la même manière.  
  • La quatrième différence notable est dans le jeu d'instructions. Celles qui peuvent travailler avec des mots entiers (sur 32 bits) n'ont pas d'utilité dans le YASEP16, qui utilise des demi-mots (16 bits) pour tout. Les instructions suitantes sont spécifiques au YASEP32 et peuvent déclencher une erreur quand elles sont exécutées par le YASEP16 :
    (aucune)
     
    Et celles-ci sont spécifiques au YASEP16 :
    (aucune)
     
    Pour réduire les erreurs de programmation, les pseudo-instructions YASEP32 et YASEP16 ont été définies. Elles envoient un avertissement quand une instruction assemblée est invalide pour le cœur utilisé.
  •  

    Compatibilité

    La similarité entre les deux versions du cœur permet de réaliser facilement des séquences de code qui fonctionnent aussi bien sur le YASEP32 que le YASEP16, tant qu'on fait attention à la taille des données et aux instructions. Cela permet de détecter la taille du processeur, de partager du code source entre projets, etc.

    La plupart des mécanismes internes restent inchangés. Par exemple, les registres spéciaux ont les mêmes fonctions dans les premiers 65536 registres, le code peut donc être porté facilement. Le mécanisme d'interruption (gestion des événements externes) et d'exception (traitement des erreurs logicielles) a la même structure : ces mécanismes sont configurés via les premiers registres spéciaux.

     

    Détection

    Pour le YASEP32, le bit de signe est à la position 31 dans les registres, et bit n°15 pour le YASEP16. Sachant cela, il est facile de vérifier sur quelle variante un programme s'exécute : le code écrit sur le bit n°15 et lit le bit de signe. C'est possible avec la forme IMM20 de l'instruction MOV :

     MOV 8000h R1  ; R1=8000h pour YASEP16 ou 00008000h pour YASEP32
     ADD R2 R3 R4 MSB1 R1 ; exécute ADD si YASEP16

    Cette information sera aussi contenue dans un des Registres Spéciaux, parmi d'autres informations de configuration.