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 90% du comportement et on essaie
de garder un maximum de points communs entre les deux.
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.
- YASEP16 va avoir du mal à travailler avec des valeurs sur 32 bits, donc il est adapté pour les
applications classiques des microcontrôleurs, par exemple.
- YASEP32 est plus à l'aise quand des flux de données rapides sont traités,
puisque les chemins de données sur 32 bits doublent la bande passante vers la mémoire.
YASEP32 peut donc être utilisé lorsqu'il y a du graphisme simple
ou des proctocoles un peu sophistiqués, tel TCP/IP.
La seconde différence évidente est 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 tout à fait de la même manière.
-
Puisque ses pointeurs sont sur 16 bits seulement, YASEP16 ne peut accéder qu'à 64K
octets à la fois. Il est donc adapté aux petits programmes.
Un mécanisme d'extension d'adresses peut être réalisé pour étendre
la taille totale de mémoire adressable, et différents programmes
pourront alors accéder à différentes zones de mémoire (et même les partager)
mais un pointeur reste limité à 64K octets.
-
YASEP32, dans l'architecture actuelle, peut accéder à
4G octets par programme. Cependant il n'est pas prévu de supporter ou d'implémenter
autant pour le moment.
La quatrième différence notable est dans le jeu d'instructions.
Celles qui peuvent travailler avec des mots entiers n'ont
pas d'utilité dans YASEP16, qui utilise des demi-mots (16-bit) pour tout.
Les instructions
LSH,
LZH,
SH et
SHH
sont spécifiques à YASEP32 et peuvent déclencher une erreur quand elles sont
exécutées par YASEP16.
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 coeur utilisé.
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.