Architecture des Ordinateurs Processeur MIPS Rapport Xavier Perseguers, [email protected] Tadeusz Senn, [email protected] 1er mai 2002 COLE POLYTECHNIQUE FDRALE DE LAUSANNE
Architecture des Ordinateurs
Processeur MIPSRapport
Xavier Perseguers, [email protected]
Tadeusz Senn, [email protected]
1er mai 2002
ÉCOLE POLYTECHNIQUEFÉDÉRALE DE LAUSANNE
Rapport : Processeur MIPS – BB 1
Processeur MIPS – BB
Introduction
Ce rapport presente la realisation d’un processeur MIPS 32 bits enVHDL. Le processeur, surnomme BB, a ete cree avec un petit nombre d’ins-tructions (arithmetiques : ADD, SUB et ADDI ; logiques : AND et OR ; desaut conditionnel : BEQ ; et d’acces a la memoire : SW et LW ). La techniquedu pipelining n’a pas ete abordee.
Il decrit la methodologie utilisee pour implementer le processeur, les testseffectues pour verifier son bon fonctionnement, les problemes rencontres etleurs solutions, ainsi que certaines ameliorations possibles.
Methodologie
La methodologie choisie a ete de creer les composants et de les tester aufur et a mesure.
Nous utilisons au maximum la bibliotheque arithmetique. De cette facon,notre approche est plus comportementale que structurelle. C’est aussi pour-quoi nous preferons ne pas reutiliser les composants developpes separement.
Unite de controle
L’unite de controle est une machine de Moore, i.e. une machine dontl’etat futur ne depend que de l’etat present. Elle est composee de sept etatsorganises selon la figure 1 :
Fetch : lecture de l’instruction suivante (IRWrite et MemiCS a 1 ), incre-mentation du Program Counter (PC) (PCWrite active, et PCSrc de-sactive pour que le PC soit incremente de la valeur par defaut 4, i.e.PC = PC + 4 comme dans tous les etats ou il est desactive).
Decode : determination de l’etat futur en fonction de l’instruction lue dansl’etat Fetch. De plus, si l’instruction est un SW, preparation de l’adresseen desactivant ALUSrc (explications dans la section Problemes et So-lutions, en page 6).
Rapport : Processeur MIPS – BB 2
Fetch
DecodeLW Addi
R-Type
SW BEQ
Op LW
Op SW
Op R-Type
Op BEQ
Op Addi
Fig. 1 – Graphe des etats de l’unite de controle
Les etats suivants sont des operations :
Addi
ALUCtrl : signal a 010 pour effectuer l’addition avec l’ALU.
ALUSrc : active (signal a 1 ) pour selectionner la valeur immediatecomme l’une des sources de l’addition.
RegWrite : active pour enregistrer le resultat dans un registre.
RegDst : desactive (signal a 0 ) pour prendre l’adresse du registredestination RT venant des bits 20 a 16 de l’instruction.
BEQ
ALUCtrl : signal a 110 pour effectuer une soustraction avec l’ALU.La soustraction permet de comparer la valeur des deux registres.Si le resultat est nul, le flag zero de l’ALU sera active et provo-quera la mise a jour du PC.
PCSrc : active pour remplacer la valeur du PC par la sortie de l’ad-ditionneur calculant le Branch Target.
PCWriteCond : active pour ecrire dans le PC pour autant que le bitzero de l’ALU soit aussi active.
ALUSrc : desactive pour que la seconde sortie du Register File arrivesur l’ALU.
Rapport : Processeur MIPS – BB 3
RegDst : desactive pour prendre l’adresse du registre destination RTvenant des bits 20 a 16 de l’instruction.
SW
ALUCtrl : signal a 010 pour effectuer une addition avec l’ALU. L’ad-dition permet de calculer l’adresse memoire en combinant l’adressestockee et l’offset.
ALUSrc : active pour prendre comme seconde operande de l’ALU les16 bits de poids faible (sign extended), c’est-a-dire la partie offsetde l’instruction.
MemdCS : active pour selectionner la memoire.
MemdWE : active pour remplacer le contenu de la memoire designepar l’adresse par le contenu de DataIn.
RegDst : desactive pour prendre l’adresse du registre destination RTvenant des bits 20 a 16 de l’instruction.
LW
ALUCtrl : signal a 010 pour calculer l’adresse memoire comme dansl’etat SW.
ALUSrc : active comme dans l’etat SW.
MemdCS : active comme dans l’etat SW.
MemtoReg : active pour copier le contenu de la memoire dans unregistre.
RegWrite : active pour autoriser l’ecriture dans le registre.
RegDst : desactive pour prendre l’adresse du registre destination RTvenant des bits 20 a 16 de l’instruction.
R-Type
ALUCtrl : determine par les bits Funct de l’instruction. Permet dechoisir l’operation arithmetique ou logique a effectuer.
RegDst : active pour signifier que le registre de destination du resultatde l’operation est determine par les bits 15 a 11 de l’instruction(partie RD).
RegWrite : active comme dans l’etat LW.
ALUSrc : desactive pour que la seconde sortie du Register File arrivesur l’ALU.
Donner une valeur initiale a tous les signaux sortants, y compris l’etat futur,empeche la synthese de latches et simplifie le code. De plus, cela permet aucircuit d’etre dans un etat stable par defaut.
Rapport
:P
rocesse
ur
MIP
S–
BB4
Decode R-Type (ALUCtrl[2..0]/Funct[5..0])
Fetch SW Autres Addi Beq SW LW Add Sub And Or
ALUCtrl[2..0] 010 010 010 110 010/100000 110/100010 000/100100 001/100101
ALUSrc 1 0 1 0 1 1 0 0 0 0
IRWrite 1
MemdCS 1 1
MemdWE 1
MemiCS 1
MemtoReg 1
PCSrc 1
PCWrite 1
PCWriteCond 1
RegDst 0 0 0 0 1 1 1 1
RegWrite 1 1 1 1 1 1
Etat suivant Decode Fetch
Tab. 1 – Synthese des signaux de l’unite de controle — inspire de la figure 5.20 p. 361 du COD.
Rapport : Processeur MIPS – BB 5
Tests Effectues
La premiere verification du bon fonctionnement a ete faite avec le pro-gramme propose dans la memoire d’instructions. Ensuite, les operations lo-giques (AND et OR) ainsi que l’acces en ecriture a la memoire (SW ) ontete rajoutes parce qu’ils n’etaient pas testes dans le programme original.
Enfin, nous avons ecrit un programme calculant le produit de deux fac-teurs initialement stockes en memoire (cf. listing 1). Le programme est struc-ture comme une procedure. Les adresses des deux facteurs sont stockeesrespectivement dans $a0 et $a1, et celle de retour, dans $v0. La premierepartie permet d’initialiser le contenu de la memoire (memdata) ; la secondeeffectue la multiplication, basee sur sa definition mathematique :
a · b =a∑
1
b
Listing 1: Programme de multiplication : 6 · 8
1 # I n i t i a l i z a t i o n
3 addi $s0 , $zero , 6 # $s0 = 64 addi $s1 , $zero , 8 # $s1 = 85 add $a0 , $zero , $zero # $a0 = 06 addi $a1 , $a0 , 4 # $a1 = 47 addi $v0 , $a1 , 4 # $v0 = 88 sw $s0 , 0 ( $a0 ) # mem[ $a0 ] = $s09 sw $s1 , 0 ( $a1 ) # mem[ $a1 ] = $s1
11 # Mul t i p l i c a t i o n
13 lw $s0 , 0 ( $a0 ) # $s0 = operand #114 lw $s1 , 0 ( $a1 ) # $s1 = operand #215 add $s2 , $zero , $zero # $s2 : temp r e s u l t16 add $s3 , $zero , $zero # $s3 : loop counter17 Loop :18 add $s2 , $s2 , $s1 # $s2 = $s2 + $s119 addi $s3 , $s3 , 1 # $s3 = $s3 + 120 beq $s3 , $s0 , End # i f $s3=$s1 GOTO End21 beq $zero , $zero , Loop # GOTO Loop22 End :23 sw $s2 , 0 ( $v0 ) # mem[ $v1 ] <= r e s u l t
25 Etern i ty :26 beq $zero , $zero , Ete rn i ty # i n f i n i t e loop
Rapport : Processeur MIPS – BB 6
Fig. 2 – Deroulement du programme
Problemes et Solutions
Le premier probleme est apparu lors de la simulation : un signal avaitune valeur ‘X’ alors que le programme n’utilisait que des ‘0’ et des ‘1’. Nousavions initialise les signaux dans le processus Reset de l’unite de controle(processus propre) et au debut du processus principal. Or l’un des signauxavait une autre assignation dans l’etat Fetch. Comme solution, seul l’etatest remis a Fetch dans le Reset, et tous les signaux sont initialises a chaquecoup d’horloge dans le processus principal.
Dans l’ALU, le flag zero doit etre active quand un resultat est nul.Comme le resultat temporaire (dans notre cas tp result) est defini commeun signal, il est indispensable de definir la valeur de ce flag a l’exterieur duprocessus de calcul sous peine d’avoir un decalage d’un coup d’horloge entrele nouveau resultat et son activation eventuelle.
L’operation de saut conditionnel BEQ peut etre effectuee, theoriquement,par les operations AND ou SUB de l’ALU. En pratique, le signal zero est in-dispensable pour que la valeur du PC puisse etre differente de PC = PC+4 ;d’ou le choix de la soustraction qui active ce signal si les operandes sontegales.
Le dernier probleme s’est pose avec l’instruction SW. En effet, lors despremiers tests et comme nous nous sommes bases tout d’abord sur le graphedes etats du cours (cf. figure 1, p. 2), l’instruction commencait par ecriren’importe ou en memoire avant de le faire a la bonne adresse. En exami-nant le schema de l’unite de traitement, il est apparu que l’adresse n’estvalide qu’apres son calcul dans l’ALU, lequel requiere un coup d’horlogesupplementaire par rapport au signal de selection en ecriture de la memoire(MemdWE ). Ainsi, il etait envisageable d’ajouter un etat intermediaire,entre les etats Decode et SW, pour laisser du temps a l’ALU. Toutefoisnous avons trouve plus astucieux de preparer l’adresse dans l’etat Decode.
Rapport : Processeur MIPS – BB 7
Ameliorations
Le design du processeur mis a part, des ameliorations au niveau desperformances et des possibilites intrinseques sont envisageables.
Actuellement, toutes les instructions demandent, pour s’executer, troiscoups d’horloge pendant lesquels une partie du processeur n’est pas uti-lisee. Il serait interessant d’implementer le pipelining pour reduire le tempstotal d’execution et avoir une meilleure gestion des ressources du proces-seur. Le pipelining permet de commencer a executer une nouvelle instruc-tion alors que la precedente est encore traitee. Il faut evidemment remarquerqu’une instruction de saut ou un test empechent l’application de cette tech-nique. Le nombre de coups d’horloge pour une instruction n’est pas reduit,mais comme les operations se chevauchent, le temps total d’execution d’unesequence d’instructions est diminue.
Le Processeur MIPS – BB a un jeu d’instructions quelque peu restreint.Des instructions telles que des decalages (SLL et SRL), un autre com-parateur (SLT ) et une nouvelle operation logique (NOR) augmenteraientde facon significative les possibilites de programmation. Les decalages per-mettent des multiplications et divisions par 2 ; le comparateur ‘<’ completeles instructions de sauts conditionnels ; et le NOR permet de calculer toutesles autres fonctions logiques, en particulier la fonction NOT.
Enfin, la gestion des exceptions permettrait de detecter les depassementsde capacite dans les operations arithmetiques ainsi que les instructions nonreconnues ou incorrectes.
Conclusion�
�
�
�17.04.2002 11h49: CA MARCHE !!!
Pour realiser le Processeur MIPS – BB, les solutions choisies — parexemple les bibliotheques arithmetiques — nous sont apparues comme evi-dentes du fait de leur simplicite et de leur logique. De plus, plutot que decoder les instructions utilisees pour la multiplication en binaire, nous avonsprefere creer, en informaticiens, le programme MIPS Assembler 1.
Finalement, ce projet nous a permis de nous familiariser avec la logiqued’un processeur, son architecture et son fonctionnement. Nous esperons gar-der en memoire les quelques subtilites decouvertes pour pouvoir les exploiterdans notre avenir en ingenierie informatique.
1. Disponible sur http://diwww.epfl.ch/∼persegue/mips/
Rapport : Processeur MIPS – BB 8
References
[1] D.A. Patterson et J.L. Hennessy. Computer Organization & Design,2nd Edition. Morgan Kaufmann Publishers, 1998.
[2] E. Sanchez et P. Ienne. Notes du cours Conception des Processeurs,2001-2002.
[3] E. Sanchez et P. Ienne. Notes du cours Architecture des Ordinateurs,2002.
[4] B. Orwell. Nineteen Eighty-Four. Penguin Books, 1948.
Rapport : Processeur MIPS – BB 9
Annexes
Fichiers VHDL
add synth.vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10alu synth.vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11and 2 synth.vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13controlunit synth.vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14ir synth.vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17memdata synth.vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18meminstr synth.vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20mux 2 synth.vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22or 2 synth.vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23pc synth.vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24reg 32 synth.vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25regfile 32 synth.vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26shiftleft2 synth.vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28signextend synth.vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Rapport : Processeur MIPS – BB 10
Listing 2: add synth.vhd
1 LIBRARY i e e e ;2 USE i e e e . s t d l o g i c 1 1 6 4 . a l l ;3 USE i e e e . s t d l o g i c a r i t h . a l l ;4 USE i e e e . s t d l o g i c un s i g n ed . a l l ;
6 ENTITY add IS
7 PORT(8 a : IN s t d l o g i c v e c t o r ( 3 1 downto 0 ) ;9 b : IN s t d l o g i c v e c t o r ( 3 1 downto 0 ) ;
10 r e s u l t : OUT s t d l o g i c v e c t o r ( 3 1 downto 0 )11 ) ;12 END add ;
14 −− Simple op e ra t i on ar i t hm e t i que ( add i t i on )15 −− u t i l i s a n t l a b i b l i o t h e q u e ar i t hm e t i que
17 ARCHITECTURE synth OF add IS
18 BEGIN
19 r e s u l t <= a + b ;20 END synth ;
Rapport : Processeur MIPS – BB 11
Listing 3: alu synth.vhd
1 LIBRARY i e e e ;2 USE i e e e . s t d l o g i c 1 1 6 4 . a l l ;3 USE i e e e . s t d l o g i c a r i t h . a l l ;4 USE i e e e . s t d l o g i c un s i g n ed . a l l ;
6 ENTITY a lu IS
7 PORT(8 a : IN s t d l o g i c v e c t o r ( 3 1 downto 0 ) ;9 b : IN s t d l o g i c v e c t o r ( 3 1 downto 0 ) ;
10 r e s u l t : OUT s t d l o g i c v e c t o r ( 3 1 downto 0 ) ;11 zero : OUT s t d l o g i c ;12 op : IN s t d l o g i c v e c t o r ( 2 downto 0 )13 ) ;14 END a lu ;
16 ARCHITECTURE synth OF a lu IS
17 SIGNAL t p r e s u l t : s t d l o g i c v e c t o r (31 downto 0 ) ;18 BEGIN
20 −− Processus p r i n c i p a l decodant l e s i g n a l op .21 −− Choix de ‘U’ pour des op e ra t i ons non reconnues
23 PROCESS ( op , a , b)24 BEGIN
25 CASE op IS
26 WHEN ”000” => t p r e s u l t <= a AND b ;27 WHEN ”001” => t p r e s u l t <= a OR b ;28 WHEN ”010” => t p r e s u l t <= a + b ;29 WHEN ”110” => t p r e s u l t <= a − b ;30 WHEN others => t p r e s u l t <= (OTHERS => ’U ’ ) ;31 END CASE;32 END PROCESS;
34 −− Gest ion du f l a g zero
36 PROCESS ( t p r e s u l t )37 BEGIN
38 IF ( t p r e s u l t = (31 downto 0 = > ’ 0 ’ ) ) THEN
39 zero <= ’1 ’;40 ELSE
41 zero <= ’0 ’;42 END IF ;
Rapport : Processeur MIPS – BB 12
43 END PROCESS;
45 −− Passage par un s i g n a l temporaire pour que l a46 −− s o r t i e r e s u l t a i t t ou jour s une va l eur
48 r e s u l t <= tp r e s u l t ;
50 END synth ;
Rapport : Processeur MIPS – BB 13
Listing 4: and 2 synth.vhd
1 LIBRARY i e e e ;2 USE i e e e . s t d l o g i c 1 1 6 4 . a l l ;3 USE i e e e . s t d l o g i c a r i t h . a l l ;
5 ENTITY And 2 IS
6 PORT(7 In0 : IN s t d l o g i c ;8 In1 : IN s t d l o g i c ;9 Out0 : OUT s t d l o g i c
10 ) ;11 END And 2 ;
13 −− Simple op e ra t i on l o g i q u e (ET l o g i q u e )14 −− u t i l i s a n t l a b i b l i o t h e q u e ar i t hm e t i que
16 ARCHITECTURE synth OF And 2 IS
17 BEGIN
18 Out0 <= In0 AND In1 ;19 END synth ;
Rapport : Processeur MIPS – BB 14
Listing 5: controlunit synth.vhd
1 LIBRARY i e e e ;2 USE i e e e . s t d l o g i c 1 1 6 4 . a l l ;
4 ENTITY ControlUnit IS
5 PORT(6 Funct : IN s t d l o g i c v e c t o r ( 5 downto 0 ) ;7 Op : IN s t d l o g i c v e c t o r ( 5 downto 0 ) ;8 c l k : IN s t d l o g i c ;9 r e s e t : IN s t d l o g i c ;
10 ALUCtrl : OUT s t d l o g i c v e c t o r ( 2 downto 0 ) ;11 ALUSrc : OUT s t d l o g i c ;12 IRWrite : OUT s t d l o g i c ;13 MemdCS : OUT s t d l o g i c ;14 MemdWE : OUT s t d l o g i c ;15 MemiCS : OUT s t d l o g i c ;16 MemtoReg : OUT s t d l o g i c ;17 PCSrc : OUT s t d l o g i c ;18 PCWrite : OUT s t d l o g i c ;19 PCWriteCond : OUT s t d l o g i c ;20 RegDst : OUT s t d l o g i c ;21 RegWrite : OUT s t d l o g i c22 ) ;23 END ControlUnit ;
25 ARCHITECTURE synth OF ControlUnit IS
27 −− d e c l a r a t i on des 7 e t a t s28 type State Type i s ( Fetch , Decode , Addi , Beq ,29 RType , SW, LW) ;30 signal c u r r e n t s t a t e : State Type ;31 signal nex t s t a t e : State Type ;
33 BEGIN
35 PROCESS ( cu r r en t s t a t e , op , Funct )36 BEGIN
38 −− I n i t i a l i s a t i o n de tous l e s s ignaux39 −− a chaque changement d ’ e t a t
41 ALUCtrl <= (OTHERS = > ’0 ’ ) ;42 ALUSrc <= ’0 ’;
Rapport : Processeur MIPS – BB 15
43 IRWrite <= ’0 ’;44 MemdCS <= ’0 ’;45 MemdWE <= ’0 ’;46 MemiCS <= ’0 ’;47 MemtoReg <= ’0 ’;48 PCSrc <= ’0 ’;49 PCWrite <= ’0 ’;50 PCWriteCond <= ’0 ’;51 RegDst <= ’0 ’;52 RegWrite <= ’0 ’;53 nex t s t a t e <= Fetch ;
55 CASE c u r r e n t s t a t e IS
57 −− Fetch : Charger l ’ i n s t r u c t i o n su i van te
59 WHEN Fetch =>
60 IRWrite <= ’1 ’;61 PCWrite <= ’1 ’;62 MemiCS <= ’1 ’;63 nex t s t a t e <= Decode ;
65 −− Decode : Decoder l ’ i n s t r u c t i o n66 −− Pour SW, c a l c u l e r l ’ ad re s s e en p l u s
68 WHEN Decode =>
69 CASE Op IS
70 WHEN ”001000 ” => nex t s t a t e <= Addi ;71 WHEN ”000100 ” => nex t s t a t e <= Beq ;72 WHEN ”000000 ” => nex t s t a t e <= RType ;73 WHEN ”101011 ” =>
74 ALUCtrl <= ”010” ;75 ALUSrc <= ’1 ’;76 MemdCS <= ’1 ’;77 nex t s t a t e <= SW;78 WHEN ”100011 ” => nex t s t a t e <= LW;79 WHENOTHERS => nex t s t a t e <= Fetch ;80 END CASE;
82 −− Operat ions
84 WHEN Addi =>
85 ALUCtrl <= ”010” ;86 ALUSrc <= ’1 ’;
Rapport : Processeur MIPS – BB 16
87 RegWrite <= ’1 ’;88 WHEN Beq =>
89 −− Sous t rac t i on pour un saut90 ALUCtrl <= ”110” ;91 PCSrc <= ’1 ’;92 PCWriteCond <= ’1 ’;93 WHEN RType =>
94 −− Choix de l ’ op e ra t i on de type R−type95 CASE Funct IS
96 WHEN ”100000 ” => ALUCtrl <= ”010” ;97 WHEN ”100010 ” => ALUCtrl <= ”110” ;98 WHEN ”100100 ” => ALUCtrl <= ”000” ;99 WHEN ”100101 ” => ALUCtrl <= ”001” ;
100 WHENOTHERS => ALUCtrl <= ”UUU” ;101 END CASE;102 RegDst <= ’1 ’;103 RegWrite <= ’1 ’;104 WHEN SW =>
105 ALUCtrl <= ”010” ;106 ALUSrc <= ’1 ’;107 MemdCS <= ’1 ’;108 MemdWE <= ’1 ’;109 WHENLW=>
110 ALUCtrl <= ”010” ;111 ALUSrc <= ’1 ’;112 MemdCS <= ’1 ’;113 MemtoReg <= ’1 ’;114 RegWrite <= ’1 ’;115 END CASE;116 END PROCESS;
118 −− Processus Reset :119 −− I n i t i a l i s e uniquement l ’ e t a t courant
121 PROCESS ( c lk , r e s e t )122 BEGIN
123 IF ( r e s e t = ’ 1 ’ ) THEN
124 c u r r e n t s t a t e <= fe t ch ;125 ELSIF ( c lk ’ event AND c l k = ’ 1 ’ ) THEN
126 c u r r e n t s t a t e <= nex t s t a t e ;127 END IF ;128 END PROCESS;
130 END synth ;
Rapport : Processeur MIPS – BB 17
Listing 6: ir synth.vhd
1 LIBRARY i e e e ;2 USE i e e e . s t d l o g i c 1 1 6 4 . a l l ;
4 ENTITY IR IS
5 PORT(6 a : IN s t d l o g i c v e c t o r ( 3 1 downto 0 ) ;7 q : OUT s t d l o g i c v e c t o r ( 3 1 downto 0 ) ;8 we : IN s t d l o g i c ;9 c l k : IN s t d l o g i c
10 ) ;11 END IR ;
13 ARCHITECTURE synth OF IR IS
14 BEGIN
16 −− Reg i s t r e d ’ i n s t r u c t i o n (32 b i t s )17 −− a c t i v e en e c r i t u r e avec un s i g n a l18 −− supp l ementa i re ( ‘ we ’ )
20 PROCESS ( c lk , a , we)21 BEGIN
22 IF ( c lk ’ event AND c l k = ’ 1 ’ ) THEN
23 IF ( we = ’ 1 ’ ) THEN
24 q <= a ;25 END IF ;26 END IF ;27 END PROCESS;
29 END synth ;
Rapport : Processeur MIPS – BB 18
Listing 7: memdata synth.vhd
1 LIBRARY i e e e ;2 USE i e e e . s t d l o g i c 1 1 6 4 . a l l ;3 USE i e e e . s t d l o g i c un s i g n ed . a l l ;
5 ENTITY memdata IS
6 PORT(7 adr : IN s t d l o g i c v e c t o r ( 7 downto 0 ) ;8 Data Out : OUT s t d l o g i c v e c t o r ( 3 1 downto 0 ) ;9 cs : IN s t d l o g i c ;
10 we : IN s t d l o g i c ;11 Data In : IN s t d l o g i c v e c t o r ( 3 1 downto 0 ) ;12 oe : IN s t d l o g i c13 ) ;14 END memdata ;
16 ARCHITECTURE synth OF memdata IS
17 TYPE memdtype IS ARRAY(((2∗∗8)/4) −1 downto 0 ) OF
18 s t d l o g i c v e c t o r (31 downto 0 ) ;19 SIGNAL memoired : memdtype :=20 (0 => ” 00000000000000000000000000000100 ” ,21 1 => ” 00000000000000000000000000000011 ” ,22 OTHERS=> ” 00000000000000000000000000000000 ” ) ;23 BEGIN
25 −− Memoire de donnees :26 −− Doit e t r e s e l e c t i o nn e e ( ’ cs ’ )27 −− pu i s deux modes : l e c t u r e e t e c r i t u r e28 −− en f onc t i on de ‘we ’29 −− ( c onv in t e g e r n e c e s s a i r e parce que l ’ index de l a30 −− memoire e s t de type i n t e g e r )
32 PROCESS ( cs , oe , we , adr , Data In )33 BEGIN
34 Data Out <= (OTHERS => ’Z ’ ) ;
36 IF ( c s = ’ 1 ’ ) THEN
37 IF ( we = ’ 1 ’ ) THEN
39 −− Mode : Ecr i tu re40 memoired (CONV INTEGER( adr )) <= Data In ;
42 ELSE
Rapport : Processeur MIPS – BB 19
44 −− Mode : Lecture45 IF ( oe = ’ 1 ’ ) THEN
46 Data Out <= memoired (CONV INTEGER( adr ) ) ;47 END IF ;
49 END IF ;50 END IF ;51 END PROCESS;
53 END synth ;
Rapport : Processeur MIPS – BB 20
Listing 8: meminstr synth.vhd
1 LIBRARY i e e e ;2 USE i e e e . s t d l o g i c 1 1 6 4 . a l l ;3 USE i e e e . s t d l o g i c un s i g n ed . a l l ;
5 ENTITY meminstr IS
6 PORT(7 adr : IN s t d l o g i c v e c t o r ( 7 downto 0 ) ;8 data : OUT s t d l o g i c v e c t o r ( 3 1 downto 0 ) ;9 cs : IN s t d l o g i c ;
10 oe : IN s t d l o g i c11 ) ;12 END meminstr ;
14 ARCHITECTURE synth OF meminstr IS
15 TYPE memitype IS ARRAY(((2∗∗8)/4) −1 downto 0 ) OF
16 s t d l o g i c v e c t o r (31 downto 0 ) ;
18 signal memoirei : memitype := (19 −− addi $s0 , $zero , 620 0 => ” 00100000000100000000000000000110 ” ,21 −− addi $s1 , $zero , 822 1 => ” 00100000000100010000000000001000 ” ,23 −− add $a0 , $zero , $zero24 2 => ” 00000000000000000010000000100000 ” ,25 −− addi $a1 , $a0 , 426 3 => ” 00100000100001010000000000000100 ” ,27 −− addi $v0 , $a1 , 428 4 => ” 00100000101000100000000000000100 ” ,29 −− sw $s0 , 0 ( $a0 )30 5 => ” 10101100100100000000000000000000 ” ,31 −− sw $s1 , 0 ( $a1 )32 6 => ” 10101100101100010000000000000000 ” ,33 −− lw $s0 , 0 ( $a0 )34 7 => ” 10001100100100000000000000000000 ” ,35 −− lw $s1 , 0 ( $a1 )36 8 => ” 10001100101100010000000000000000 ” ,37 −− add $s2 , $zero , $zero38 9 => ” 00000000000000001001000000100000 ” ,39 −− add $s3 , $zero , $zero40 10 => ” 00000000000000001001100000100000 ” ,41 −− add $s2 , $s2 , $s142 11 => ” 00000010010100011001000000100000 ” ,
Rapport : Processeur MIPS – BB 21
43 −− addi $s3 , $s3 , 144 12 => ” 00100010011100110000000000000001 ” ,45 −− beq $s0 , $s3 , 146 13 => ” 00010010011100000000000000000001 ” ,47 −− beq $zero , $zero , −448 14 => ” 00010000000000001111111111111100 ” ,49 −− sw $s2 , 0 ( $v0 )50 15 => ” 10101100010100100000000000000000 ” ,51 −− beq $zero , $zero , −152 16 => ” 00010000000000001111111111111111 ” ,
54 OTHERS => ” 00000000000000000000000000000000 ” ) ;
56 BEGIN
58 −− Memoire d ’ i n s t r u c t i o n contenant l e programme59 −− de mu l t i p l i c a t i o n
61 PROCESS ( cs , oe , adr )62 BEGIN
63 IF ( c s = ’1 ’ AND oe = ’ 1 ’ ) THEN
64 data <= memoirei (CONV INTEGER( adr ) ) ;65 ELSE
66 −− i n a c t i v e => ’Z ’ en s o r t i e67 data <= (OTHERS => ’Z ’ ) ;68 END IF ;69 END PROCESS;
71 END synth ;
Rapport : Processeur MIPS – BB 22
Listing 9: mux 2 synth.vhd
1 LIBRARY i e e e ;2 USE i e e e . s t d l o g i c 1 1 6 4 . a l l ;
4 ENTITY mux 2 IS
5 PORT(6 e0 : IN s t d l o g i c v e c t o r ( 3 1 downto 0 ) ;7 e1 : IN s t d l o g i c v e c t o r ( 3 1 downto 0 ) ;8 o : OUT s t d l o g i c v e c t o r ( 3 1 downto 0 ) ;9 s e l : IN s t d l o g i c
10 ) ;11 END mux 2 ;
13 ARCHITECTURE synth OF mux 2 IS
14 BEGIN
16 −− Mul t i p l e xeur 2 en t r e e s de 32 b i t s17 −− avec 1 b i t de con t r o l e .18 −− Si l e s i g n a l ‘ s e l ’ d i f f e r e de ‘ 0 ’ ou de ‘ 1 ’ ,19 −− envo i de ‘U’ en s o r t i e
21 PROCESS ( e0 , e1 , s e l )22 BEGIN
23 CASE s e l IS
24 WHEN ’ 0 ’ => o <= e0 ;25 WHEN ’ 1 ’ => o <= e1 ;26 WHENOTHERS => o <= (OTHERS => ’U’ ) ;27 END CASE;28 END PROCESS;
30 END synth ;
Rapport : Processeur MIPS – BB 23
Listing 10: or 2 synth.vhd
1 LIBRARY i e e e ;2 USE i e e e . s t d l o g i c 1 1 6 4 . a l l ;
4 ENTITY or 2 IS
5 PORT(6 In0 : IN s t d l o g i c ;7 In1 : IN s t d l o g i c ;8 Out0 : OUT s t d l o g i c9 ) ;
10 END or 2 ;
12 −− Simple op e ra t i on l o g i q u e (OU l o g i q u e )13 −− u t i l i s a n t l a b i b l i o t h e q u e ar i t hm e t i que
15 ARCHITECTURE synth OF or 2 IS
16 BEGIN
17 Out0 <= In0 OR In1 ;18 END synth ;
Rapport : Processeur MIPS – BB 24
Listing 11: pc synth.vhd
1 LIBRARY i e e e ;2 USE i e e e . s t d l o g i c 1 1 6 4 . a l l ;
4 ENTITY pc IS
5 PORT(6 c l k : IN s t d l o g i c ;7 a : IN s t d l o g i c v e c t o r ( 3 1 downto 0 ) ;8 q : OUT s t d l o g i c v e c t o r ( 3 1 downto 0 ) ;9 we : IN s t d l o g i c ;
10 r e s e t : IN s t d l o g i c11 ) ;12 END pc ;
14 ARCHITECTURE synth OF pc IS
15 BEGIN
17 −− Reg i s t r e PC 32 b i t s18 −− Processus Reset e t p r i n c i p a l
20 PROCESS ( c lk , r e s e t )21 BEGIN
22 IF ( r e s e t = ’ 1 ’ ) THEN
23 q <= (OTHERS = > ’0 ’ ) ;24 ELSIF ( c lk ’ event and c l k = ’ 1 ’ ) THEN
25 IF ( we = ’ 1 ’ ) THEN
26 q <= a ;27 END IF ;28 END IF ;29 END PROCESS;
31 END synth ;
Rapport : Processeur MIPS – BB 25
Listing 12: reg 32 synth.vhd
1 LIBRARY i e e e ;2 USE i e e e . s t d l o g i c 1 1 6 4 . a l l ;
4 ENTITY r eg 32 IS
5 PORT(6 c l k : IN s t d l o g i c ;7 a : IN s t d l o g i c v e c t o r ( 3 1 downto 0 ) ;8 q : OUT s t d l o g i c v e c t o r ( 3 1 downto 0 )9 ) ;
10 END r eg 32 ;
12 ARCHITECTURE synth OF r eg 32 IS
13 SIGNAL r e g s i g n a l : s t d l o g i c v e c t o r ( 3 1 downto 0 ) ;14 BEGIN
16 −− Reg i s t r e 32 b i t s s e q u e n t i e l17 −− sans s i g n a l Reset
19 PROCESS ( c l k )20 BEGIN
21 IF ( c lk ’ event AND c l k = ’ 1 ’ ) THEN
22 r e g s i g n a l <= a ;23 END IF ;24 END PROCESS;
26 q <= r e g s i g n a l ;
28 END synth ;
Rapport : Processeur MIPS – BB 26
Listing 13: regfile 32 synth.vhd
1 LIBRARY i e e e ;2 USE i e e e . s t d l o g i c 1 1 6 4 . a l l ;3 USE i e e e . s t d l o g i c un s i g n ed . a l l ;
5 ENTITY RegFi l e 32 IS
6 PORT(7 c l k : IN s t d l o g i c ;8 aa : IN s t d l o g i c v e c t o r ( 4 downto 0 ) ;9 ab : IN s t d l o g i c v e c t o r ( 4 downto 0 ) ;
10 aw : IN s t d l o g i c v e c t o r ( 4 downto 0 ) ;11 a : OUT s t d l o g i c v e c t o r ( 3 1 downto 0 ) ;12 b : OUT s t d l o g i c v e c t o r ( 3 1 downto 0 ) ;13 WData : IN s t d l o g i c v e c t o r ( 3 1 downto 0 ) ;14 RegWrite : IN s t d l o g i c15 ) ;16 END RegFi l e 32 ;
18 ARCHITECTURE synth OF RegFi l e 32 IS
19 TYPE addre s s type i s array ( 3 1 downto 0 ) of
20 s t d l o g i c v e c t o r ( 3 1 downto 0 ) ;21 SIGNAL r f a dd r e s s : addre s s type ;22 BEGIN
24 −− Reg i s t r e Pr in c i p a l
26 PROCESS ( aa , ab , c lk , RegWrite , aw)27 BEGIN
29 −− So r t i e s cons tan t e s30 a <= r f add r e s s (CONV INTEGER ( aa ) ) ;31 b <= r f add r e s s (CONV INTEGER ( ab ) ) ;
33 −− Ecr i tu re s e q u e n t i e l l e34 IF ( c lk ’ event AND c l k = ’ 1 ’ ) THEN
36 −− Adresse ‘ ‘ 000 ’ ’ i n t e r d i t e37 IF ( RegWrite = ’1 ’ AND aw /= ”000” ) THEN
38 r f a dd r e s s (CONV INTEGER (aw)) <= WData ;39 END IF ;40 END IF ;
42 END PROCESS;
Rapport : Processeur MIPS – BB 27
44 −− Reg i s t r e zero45 r f a dd r e s s (0) <= (others = > ’0 ’ ) ;
47 END synth ;
Rapport : Processeur MIPS – BB 28
Listing 14: shiftleft2 synth.vhd
1 LIBRARY i e e e ;2 USE i e e e . s t d l o g i c 1 1 6 4 . a l l ;
4 ENTITY s h i f t l e f t 2 IS
5 PORT(6 ent r e e : IN s t d l o g i c v e c t o r ( 3 1 downto 0 ) ;7 s o r t i e : OUT s t d l o g i c v e c t o r ( 3 1 downto 0 )8 ) ;9 END s h i f t l e f t 2 ;
11 ARCHITECTURE synth OF s h i f t l e f t 2 IS
12 BEGIN
14 −− Decalage ve r s l a gauche de 2 b i t s15 −− en a jou tan t des ’ 0 ’
17 s o r t i e <= ent r e e (29 downto 0 ) & ”00” ;
19 END synth ;
Rapport : Processeur MIPS – BB 29
Listing 15: signextend synth.vhd
1 LIBRARY i e e e ;2 USE i e e e . s t d l o g i c 1 1 6 4 . a l l ;
4 ENTITY SignExtend IS
5 PORT(6 ent r e e : IN s t d l o g i c v e c t o r ( 1 5 downto 0 ) ;7 s o r t i e : OUT s t d l o g i c v e c t o r ( 3 1 downto 0 )8 ) ;9 END SignExtend ;
11 ARCHITECTURE synth OF SignExtend IS
12 BEGIN
14 −− Extension du b i t 15 aux b i t s 31−16 de l ’ en t r e e
16 s o r t i e <= (31 downto 16 => ent r e e (15 ) ) & ent r e e ;
18 END synth ;