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