Première simulation E8bC controller

Le contrôleur est l’élément du microprocesseur qui émet les signaux de contrôle vers les différents registres et l’ALU.

Les premiers signaux de contrôle permettent de lire l’instruction à exécuter et d’incrémenter le registre counter pour qu’il pointe sur l’instruction suivante. Les signaux de contrôle suivants dépendent de l’instruction à exécuter.

La séquence des signaux de contrôle peut être implémentée via des circuits logiques. Nous avons plutôt choisi de les implémenter via un microcode dans une ROM interne au controller. Un registre d’adresse pointe sur la ROM contenant le microcode. Le registre d’adresse pointe au début sur l’adresse zéro qui correspond aux signaux de contrôle pour lire l’instruction. Le registre d’adresse est incrémenté à chaque impulsion d’horloge inversé (pour que les signaux de contrôle soient présents sur les registres et l’ALU lors de l’impulsion d’horloge suivante).

Un “ring counter” permet  d’exécuter successivement les signaux de commande communs qui sont repris aux adresses 0, 1 et 2 de la ROM contenant le microcode. Ensuite, le ring counter va charger dans le registre d’adresse l’instruction à exécuter, qui va pointer sur l’adresse ROM microcode correspondante. A la fin du microcode correspondant à l’instruction un signal reset permet de redémarrer la séquence du ring counter.

Vous trouverez la description de chaque instruction et des signaux de contrôle correspondants dans le fichier ControlWords.ods sur le dépôt du projet : https://github.com/CodingPat/E8BC/

Dans l’exemple de la vidéo, la ROM commence par l’instruction machine 3E AA, ce qui correspond à l’instruction assembleur MOVI A, AA. La valeur AA sera placée dans le registre A.

Après un reset, le registre counter=0 et pointe sur la première instruction de la ROM. Le registre instruction=0, Le registre A=0.

Le ring counter est un shift counter qui à chaque impulsion d’horloge inversé passe successivement à l’état T1 (reset) -> T2 -> T3 -> T4 (chargé instruction dans registre adresse).

Au démarrage, le microcode à l’adresse 0 active les signaux IR_WR (écrire dans le registre instruction) et ROM_RD (lire la ROM).

L’impulsion d’horloge inverse suivante incrémente le registre d’adresse qui pointe sur l’adresse 1 de la ROM contenant le microcode, qui active le signal COUNT_INC, qui incrémente le registre counter du microprocesseur.

Lors de l’impulsion d’horloge inverse suivante, le registre d’adresse pointe sur l’adresse 2 de la ROM contenant le microcode. La valeur =0, et donc aucun signal de contrôle n’est activé. Il s’agit d’une étape héritée de l’architecture du SAP de Malvino. Pour le moment nous n’en avons pas l’usage, et donc on perd juste un cycle pour rien.

Lors de l’impulsion suivante, le ring counter envoie un signal pour charger l’instruction dans le registre d’adresse. Chaque instruction pointe sur son propre microcode.

Le microcode de l’instruction est exécuté, et à la fin un signal est envoyé pour faire un reset du ring counter, et recommancer la séquence de signaux de contrôle correspondante à l’instruction suivante.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s