TD : Notre processeur en VHDL (2 séances)
1 Dans le VHDL (0)
Allez chercher le tgz du processeur sur la page du cours, et décompressez-le dans un coin.
C’est votre processeur, mais pas tout-à fait fini de cuire : il est actuellement capable de réaliser les
instructions d’addition et soustraction uniquement. Et encore, pas testées plus que cela.
Question 1
Ouvrez tous ces fichiers, regardez (juste) toutes les déclarations d’entités, et adoptez leurs
notations pour la suite. Posez des questions si quelquechose n’est pas clair.
2 Au tableau (1)
Le but de cette partie est de dessiner au tableau, en grand, l’équivalent de la figure 9.2 du poly pour votre
processeur.
Différences de fond :
—
l’ALU ne sort pas les drapeaux. A la place, posez à côté de l’ALU une “boite à snif” dont vous
définirez les entrées, et qui sort un unique bit “exec”.
— certaines instructions ne peuvent écrire que dans les 8 premiers registres.
Question 2
Posez toutes les boîtes en nommant leur ports comme les entités du VHDL. Tracez les fils
qui les relient. Reportez sur ces fils les noms des signaux du VHDL fourni, quand ils existent (il en manque
beaucoup).
Ne détaillez pas trop les extensions de signe etc : c’est dans le VHDL qu’on le fera.
Question 3
Par contre, définissez soigneusement tous les signaux de contrôle (les write enable des
registres PC, IR (instruction register) et exec ; les signaux de commande des différents MUX qui apparaissent
sur le dessin ; etc).
Question 4
Réfléchissez à comment on traduit en matériel que l’instruction suivant un
snif
ne s’exécute
pas, pour les différentes classes d’instruction. Prévoyez les signaux de commande que devra positionner
l’automate.
Question 5 Passez rapidement sur toutes les instructions de votre ISA pour vérifier que tout marche.
3 Dans le VHDL (1)
La figure ??, à compléter, représente l’automate actuellement implémenté.
Ses états sont calqués sur la description moisie du cycle de von Neuman qu’on trouve dans le poly.
—
InstrFetch positionne le PC sur la mémoire et attend que la mémoire renvoie l’instruction à exécuter
sur le bus de données. Il positionne aussi weIR à 1.
—
Ainsi, au front montant qui termine InstrFetch, IR est chargé avec l’instruction à exécuter. Il le
conservera jusqu’au chargement de la prochaine instruction : c’est la stabilité qu’il nous faut pour
exécuter cette instruction tranquillement.
—
InstrDecode décide quel chemin l’automate doit prendre. Dans la suite on va rajouter des flèches qui
sortent : “si le code op est celui de wmem, il faut faire ci, si le code op est celui de rmem il faut faire
cela”.
— RegWrite aurait pu s’appeler ExecALU. Il positionne le write enable de la boite à registres.
Si vous avez l’impression qu’on pourrait comprimer ces trois états en deux ou un, vous avez raison. Mais la
suite du TP serait plus compliquée.
1