création d'un processeur processor design steps

Les étapes de la création de Simple-CPU

La création de ce processeur ayant une vocation pédagogique, autant pour moi que pour vous je l'espère, je compte m'efforcer de décrire étape par étape le cheminement de la création de cette petite machine. Cette conception suivra le cheminement qui me semble le plus logique à savoir : décrire son architecture dans les très grande ligne au travers de carctéristique généraliste. Décrire ensuite ce que la CPU sera capable de faire : son jeu d'instruction. Décrire alors le comment, à savoir l'architecture détaillée issue de ce jeu d'instruction pour finir sur la réalisation et le codage VHDL.

Avant tout lui donner un nom !

C'est bien sure la première phase de tout projet : trouver un nom ! il faut un nom commercial, evocateur de rève, un synonyme de technologie d'avant-garde, un homonyme de puissance d'execution, un dérivé du champ lexical du grand ordonanceur ... Bref, c'est loupé ça sera simple-cpu ; tout simplement par ce que ça me plait bien. Enfin, sachez quand même que si vous fondez un jour ce composant, je vous remercierai bien de l'appeler par son petit nom : SC91-A pour Simple-Cpu (made by) disk91 - A (pour évolution A).

Seconde étape : Macro description d'architecture

Les choses sérieuses commencent, cette étape doit décrire dans les grandes ligne la cible qui est visée. Un processeur se décrit principalement par son type qui peut être RISC ou CISC.
Les processeurs RISC sont dits à jeu d'instruction réduit : c'est à dire qu'ils n'on que peu d'instruction, peu de mode d'adressage. En général, leurs instructions sont de taille fixe et le temps d'exécution de chacune n'est que d'un cycle.
Les processeurs CISC ont eux un jeu d'instruction dit complexe : les instructions peuvent exécuter des traitements complexes, leur taille est variable, comme leur temps de traitement. Un exemple bien connu est la famille 80x86 d'Intel avec de magnifiques instruction comme le CMPS capable d'incrémenter deux registres, de comparez les données présentent aux l'adresses données par ces dernier !

Le SC91-A sera un processeur de type RISC et l'une de ses caractéristique sera d'avoir le moins d'instruction possible. Toutes s'exécuteront en un unique cycle et toutes auront comme taille celle d'un mot. Par ailleurs, l'architecture sera de type Load-Store c'est à dire que la seule façon d'accéder à la mémoire sera d'employer une instruction Load pour la lecture et Store pour l'écriture. Il n'y aura pas de mode d'adressage direct, indexé ou autres.

Le choix suivant est celui de la taille du mot : il s'agit de définir le nombre de bit du processeurs. Les architectures d'aujourd'hui sont communement des 32bits et les nouvelles arrivante font 64 bits. Pour démarrer un processeur, on pourrait choisir une solution à taille de bus réduit mais finalement la taille de bus n'apporte pas de complexité fonctionnelle, de ce choix découle :

Simple-CPU se veut un processeur capable de faire fonctionner des applications légères mais utilisant des systèmes classique, la quantité de mémoire accessible doit donc être potentiellement de plusieurs dizaines de méga. Une solution basée sur 32 bits me semble donc répondre à ce critère. L'implémentation dans un composant programmable moderne me permet aussi de ne pas avoir trop d'inquiétude quand au nombre de portes nécessaires. Le spartan retenu offre un équivalent de 200.000 portes soit environ la taille d'un processeur CISC de type 386 d'une complexité bien supérieure à celle visée.
Ce choix s'applique directement à la taille des opérandes et donc des registres. Il impacte le nombre de registres qui sera implémentable dans la cible. Ceux-ci consomment beaucoup de bascules, elles-même très couteuses en transistor. Toutefois, le nombre de registre est un point dominant dans l'efficassité du traitement des instructions : les accès mémoire étant par définition très lents (surtout vis à vis de fréquence d'exécution actuelles) le fait d'avoir de multiple registre permet de privilégier l'utilisation de ceux-ci et ainsi réduire les accès de données à la mémoire.

Le SC91-A sera donc basé sur une architecture 32bits possédant 32 registres. Il faudra dont 1024 bacules pour réaliser celà ce qui passe largement dans la cible choisie. Toutefois dans une optique industrielle ou de réalisation sur cible plus légère je prévoit dors et déjà un version SC91-Al n'intégrant que 16 registres 32 bits.

Enfin, il faut décider si le processeur sera un big ou un little endian : s'il va enregistrer les valeur en mémoire en commençant par la partie haute (big-end first) ou la partie basse (little-end first). A pile ou face, je choisis donc une représentation big endian ; plus sérieusement, ce mode est plus naturel et évite entre autre des swap inutiles dans les couches de communication. Les octet de poids fort seront donc mémorisés à partir de l'adresse la plus faible.

Ces éléments d'architecture permettent de passer à la phase suivante de conception à savoir le choix des instructions que le processeur pourra utiliser.

Etape 3 : Choix du jeu d'instruction définition du jeu d'instruction du processeur
Simple-Cpu The Simple CPU project The Simple CPU project
Un projet de disk91
Small CPU project