DEA ASIME/DESS CISAN

Transcription

DEA ASIME/DESS CISAN
Majeure MNO
Petite Classe n°1 « Système on Chip »
PHY 569A
PC « Architecture des micro-processeurs et microprogrammation »
A/ Programmation en langage machine
On souhaite écrire, en utilisant le jeu d’instructions du processeur P32 présenté en cours, un
petit programme qui réalise l’addition entre deux vecteurs X et Y possédant 100 composantes.
Les deux vecteurs sont représentés par des tableaux de 100 entiers rangés à des adresses
consécutives en mémoire. Le premier élément X(0) du tableau X est rangé à l’adresse 0 en
mémoire, et le dernier élément X(99) du tableau est donc rangé à l’adresse 99. Le premier
élément Y(0) du tableau Y est rangé à l’adresse 1000 en mémoire, et le dernier élément Y(99)
du tableau est donc rangé à l’adresse 1099. Le vecteur résultat est rangé en mémoire dans le
tableau X.
En langage C, ce programme s’écrirait avec une boucle de la façon suivante:
int
int
X[100] ;
Y[100] ;
for(i =99 ; i != 0 ; i--)
{ X[i] = X[i] + Y[i] ; }
Q1) Ecrire la boucle réalisant cette addition vectorielle en utilisant les instructions suivantes :
 lw Ai, imd(Aj): Ai <= M[Aj + imd] / PC<= PC + 1
 sw Ai, imd(Aj)
: M[Aj + imd] <= Ai / PC<= PC + 1
 add Ai, Aj, Ak : Ai <= Aj + Ak
/ PC<= PC + 1
 addi Ai, Aj, imd
: AI <= Aj + imd / PC<= PC + 1
 bne Ai imd
: PC <= PC+1 si Ai = 0 / PC <= PC+1+ imd sinon
On supposera que le registres A2 a été chargé préalablement et contient la valeur 99.
B/ Microprogrammation
On souhaite maintenant compléter le graphe de l’automate réalisant le séquenceur du processeur
P32.
Q2) Représenter graphiquement, en utilisant les notation définies en cours, le micro-programme
des instructions add, addi, sw et bne. Pour faciliter la lisibilité, on représentera le
microprogramme de chaque instruction sur une feuille séparée.
Q3) On rappelle que l’activation du signal RESET a pour effet d’interrompre le programme en
cours d’exécution, et de forcer l’exécution de la séquence de « boot » : Le processeur termine
d’exécuter l’instruction en cours, mais n’exécute pas l’instruction suivante du programme, qui
Majeure MNO
Petite Classe n°1 « Système on Chip »
est donc abandonné. Au contraire il se branche à une adresse conventionnelle (0xBFC0000 dans
le cas du processeur MIPS R3000) , où doit être rangée la première instruction du programme
d’initialisation (programme de « boot »). Cette adresse correspond généralement à une mémoire
non volatile (ROM) pour que ce programme soit toujours disponible.
Que faut-il modifier dans le chemin de données et comment faut-il modifier la structure de
l’automate du séquenceur pour prendre en compte le signal RESET ?
Pour les courageux : Décrire en langage VHDL (style fsm) l’automate réalisant le séquenceur
microprogrammé du processeur P32 (en se limitant aux 5 instructions ci-dessus), puis effectuer
la synthèse, le placement et le routage, en utilisant les outils CAO de la chaîne ALLIANCE.
Majeure MNO
Petite Classe n°1 « Système on Chip »
Corrigé PC
microprogrammation »
PHY
569
« architecture
des
micro-processeurs
et
Q1) Ecrire la boucle réalisant cette addition vectorielle
lw A0, 0(A2)
lw A1, 1000(A2)
add A0, A1, A0
sw A0, 0(A2)
addi A2, A2, -1
bne A2 –6
...
Q2) Représenter graphiquement, en utilisant les notation définies en cours, le
micro-programme del’instructions add.
PC <= PC + 1
NOP
Test (COP = add) et R
AD <= A0 + 0
NOP
AD <= A1 + 0
NOP
AD <= A2 + 0
NOP
AD <= A3 + 0
NOP
AD <= A1+AD
NOP
AD <= A2+AD
NOP
AD <= A3+AD
NOP
Test S
AD <= A0+AD
NOP
Test T
A0 <= 0+ AD
IR <= M[PC]
instruction addi.
A1 <= 0+AD
IR <= M[PC]
A2 <= 0+AD
IR <= M[PC]
A3 <= 0+AD
IR <= M[PC]
Majeure MNO
Petite Classe n°1 « Système on Chip »
PC <= PC + 1
NOP
test (COP = addi) et R
AD <= A0 + IX
NOP
AD <= A1 + IX
NOP
AD <= A2 + IX
NOP
AD <= A3 + IX
NOP
test T
A0 <= 0+AD
IR <= M[PC]
A2 <= 0+AD
IR <= M[PC]
A1 <= 0+AD
IR <= M[PC]
A3 <= 0+AD
IR <= M[PC]
instruction sw.
PC <= PC + 1
NOP
Test (COP = sw) et R
AD <= A0 + IX
NOP
AD <= A1 + IX
NOP
AD <= A2 + IX
NOP
AD <= A3 + IX
NOP
NOP <= A1+0
M[AD] <= RES
NOP <= A2+0
M[AD] <= RES
NOP <= A3+0
M[AD] <= RES
Test T
NOP <= A0+0
M[AD] <= RES
NOP
IR <= M[PC]
Majeure MNO
Petite Classe n°1 « Système on Chip »
Instruction bne
PC <= PC + 1
NOP
Test (COP = bne) et R
NOP <= A0+0
NOP
NOP <= A1+0
NOP
NOP <= A2+0
NOP
NOP <= A3+0
NOP
Test NUL
PC <= PC+IX
NOP
NOP
IR <= M[PC]
Q3) Comment faut-il modifier le chemin de données et la structure de l’automate
du séquenceur pour prendre en compte le signal RESET ?
Il faut introduire la valeur 0xBFC00000 dans les constantes utilisables comme
opérande Y, et donc un émetteur trois-etats supplémentaire sur le bus OPY, et un
code supplémentaire Y_CZ dans les codes possibles du champs OPY de la
micro-instruction.
Par ailleurs, il faut systématiquement tester le signal RESET dans la dernière
micro-instruction de toutes les instructions, et ajouter deux états dans
l’automate, pour effectuer le branchement à l’adresse 0xBFC0000.
PC <= PC + 1
NOP
PC <= BFC0000
NOP
PC <= BFC0000
NOP
microprogramme
d’exécution
desIRinstructions
<= M[PC] RESET = 0
RESET = 1