Etude et r�alisation d'un microprocesseur g�n�ral
Fabrice Bellard et Sylvain Delas
-
Microprocesseur g�n�ral rapide pouvant adresser 64kB de m�moire.
-
Gestion des entr�es-sorties : afficheurs 7 segments, clavier, et
�ventuellement port s�rie.
-
Minimisation du nombre de CLB.
-
Utilisation du microprocesseur pour simuler une calculatrice simple.
-
16 bits : avantage au niveau de l'adressage m�moire, mais risque de consommer
trop de CLB.
-
8 bits : simplification de la logique, mais n�cessit� d'utiliser une paire de
registres pour g�n�rer une adresse m�moire ou pour les sauts.
-
L'utilisation de beaucoup de registres diminue le nombre d'acc�s m�moire et
permet d'avoir des instructions courtes. Mais cela augmente le nombre de CLB
utilis�s.
-
Une paire de registres 8 bits doit �tre utilis�e pour le chargement du PC
et pour g�n�rer une adresse m�moire.
-
Sur quels registres l'ALU doit-elle travailler et quelles op�rations sont
indispensables ? L'utilisation d'un accumulateur permet de diminuer le
nombre de chemins de donn�es. Mais il faut aussi pr�voir un m�canisme pour
sauver l'accumulateur dans les autres registres.
-
La mise � jour de flags par l'ALU peut servir pour faire des sauts
conditionnels ; les sauts relatifs sont int�ressants car ils minimisent la
taille des programmes.
Un format homog�ne simplifie beaucoup le d�codeur d'instruction. Des
instructions sur 1 octet simplifient le s�quenceur, mais un probl�me se
pose pour le chargement de constantes de grande taille ( 8 ou 16 bits ).
D'un autre c�t�, si on inclut un champ d'adresse dans les instructions, la
taille moyenne des programmes sera plus faible.
Une gestion hardware (notamment des afficheurs) rend le d�bogage plus
facile, mais occupe beaucoup de CLB. Une gestion totalement software
complique sensiblement le logiciel, mais donne plus de souplesse.
-
Microprocesseur 8 bits adressant 64kB de m�moire avec au maximum 16
registres 8 bits plus un accumulateur 8 bits. En fait seulement 8 registres
ont �t� impl�ment�s pour limiter le temps de compilation du circuit.
-
L'ALU peut faire les op�rations suivantes: MOVR, MOVA, ADD, SUB, XOR, OR, AND. La
rotation � droite a �t� pr�vue dans le jeu d'instruction mais non
impl�ment�e faute de temps (elle est simul�e par des rotations � gauche).
Les calculs sont de la forme :
ou
. Le flag
Z (r�sultat nul) est mis � jour apr�s chaque calcul, et le flag C (retenue)
l'est seulement apr�s ADD,SUB,ROR. L'op�ration XOR remet le flag C � z�ro.
-
On peut charger des constantes de 4 bits dans le quartet poids faible (avec
extension du signe au quartet poids fort) et dans le quartet poids fort de
ACC.
-
Les registres
servent pour g�n�rer une adresse 16 bits utilis�e
dans les sauts absolus et les acc�s m�moire. Le chargement du PC se fait
aussi dans
. Quatre instructions sp�ciales permettent la lecture
et l'�criture m�moire (en utilisant ACC comme op�rande), et la
sauvegarde et la restauration du PC.
-
Les sauts conditionnels relatifs utilisent ACC pour le d�placement. Ils
testent les flags Z et C.
-
Les p�riph�riques ont d'abord �t� g�r�s de fa�on hardware pour
faciliter le d�bogage, puis de fa�on totalement software pour limiter
le nombre de CLB. Trois registres d�di�s sont utilis�s :
pour la
s�lection de l'afficheur et de la colonne du clavier actifs et la sortie
s�rie,
pour la commande des segments des afficheurs, et
pour
lire la touche press� sur la colonne du clavier s�lectionn�e.

Nous avons r�alis� un macro-assembleur pour g�n�rer facilement les s�quences
de code les plus courantes. Un simulateur complet (incluant la simulation du
hardware) a �t� r�alis� sous XWindows et sur Macintosh.
Le microprocesseur fonctionne. Il utilise 190 CLB. Nous avons programm� une
calculatrice 4 op�rations avec affichage en d�cimal et un jeu de labyrinthe.
Cela suffit � d�montrer que notre microprocesseur est g�n�ral.
La version test�e atteint une vitesse de 0.3 MIPS, et peut �tre acc�l�r�e
jusqu'� 1 MIPS.
La gestion par logiciel des p�riph�riques permet d'avoir une grande
souplesse d'utilisation.
-
Finalement, il aurait �t� aussi facile de faire des instructions sur un nombre
d'octets variable pour inclure des constantes de plus grande taille.
-
Le nombre de cycle par instruction pourrait lui aussi �tre variable (ajout
d'un reset sur le s�quenceur).
-
L'utilisation de buffers 3 �tats au niveau des registres aurait simplifi�
l'ensemble, mais nous aurions d� router certaines parties du circuit � la
main.
-
Il est possible d'utiliser encore moins de CLB si on autorise un code
automodifiant et des instructions op�rant toutes sur un accumulateur et une
adresse m�moire.
Tue Oct 15 03:37:32 MET 1996
Fabrice Bellard (fabrice.bellard at free.fr)