You are on page 1of 30

Architecture des Ordinateurs

Processeur MIPS
Rapport

Xavier Perseguers, xavier.perseguers@epfl.ch Tadeusz Senn, jeantadeusz.senn@epfl.ch 1er mai 2002

ÉCOLE POLYTECHNIQUE FÉDÉRALE DE LAUSANNE

Rapport : Processeur MIPS – BB

1

Processeur MIPS – BB
Introduction
Ce rapport pr´sente la r´alisation d’un processeur MIPS 32 bits en e e VHDL. Le processeur, surnomm´ BB, a ´t´ cr´´ avec un petit nombre d’inse e e ee tructions (arithm´tiques : ADD, SUB et ADDI ; logiques : AND et OR ; de e saut conditionnel : BEQ ; et d’acc`s a la m´moire : SW et LW ). La technique e ` e du pipelining n’a pas ´t´ abord´e. ee e Il d´crit la m´thodologie utilis´e pour impl´menter le processeur, les tests e e e e effectu´s pour v´rifier son bon fonctionnement, les probl`mes rencontr´s et e e e e leurs solutions, ainsi que certaines am´liorations possibles. e

M´thodologie e
La m´thodologie choisie a ´t´ de cr´er les composants et de les tester au e ee e fur et a mesure. ` Nous utilisons au maximum la biblioth`que arithm´tique. De cette fa¸on, e e c notre approche est plus comportementale que structurelle. C’est aussi pourquoi nous pr´f´rons ne pas r´utiliser les composants d´velopp´s s´par´ment. ee e e e e e

Unit´ de contrˆle e o
L’unit´ de contrˆle est une machine de Moore, i.e. une machine dont e o l’´tat futur ne d´pend que de l’´tat pr´sent. Elle est compos´e de sept ´tats e e e e e e organis´s selon la figure 1 : e Fetch : lecture de l’instruction suivante (IRWrite et MemiCS a 1 ), incr´` e mentation du Program Counter (PC) (PCWrite activ´, et PCSrc d´e e sactiv´ pour que le PC soit incr´ment´ de la valeur par d´faut 4, i.e. e e e e P C = P C + 4 comme dans tous les ´tats o` il est d´sactiv´). e u e e Decode : d´termination de l’´tat futur en fonction de l’instruction lue dans e e l’´tat Fetch. De plus, si l’instruction est un SW, pr´paration de l’adresse e e en d´sactivant ALUSrc (explications dans la section Probl`mes et Soe e lutions, en page 6).

Rapport : Processeur MIPS – BB

2

Fetch

LW

Op LW

Decode

Op Addi

Addi

Op SW

Op BEQ

Op R-Type SW BEQ

R-Type

Fig. 1 – Graphe des ´tats de l’unit´ de contrˆle e e o Les ´tats suivants sont des op´rations : e e Addi ALUCtrl : signal a 010 pour effectuer l’addition avec l’ALU. ` ALUSrc : activ´ (signal a 1 ) pour s´lectionner la valeur imm´diate e ` e e comme l’une des sources de l’addition. RegWrite : activ´ pour enregistrer le r´sultat dans un registre. e e RegDst : d´sactiv´ (signal a 0 ) pour prendre l’adresse du registre e e ` destination 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 r´sultat est nul, le flag zero de l’ALU sera activ´ et provoe e quera la mise a jour du PC. ` PCSrc : activ´ pour remplacer la valeur du PC par la sortie de l’ade ditionneur calculant le Branch Target. PCWriteCond : activ´ pour ´crire dans le PC pour autant que le bit e e zero de l’ALU soit aussi activ´. e ALUSrc : d´sactiv´ pour que la seconde sortie du Register File arrive e e sur l’ALU.

` R-Type ALUCtrl : d´termin´ par les bits Funct de l’instruction. Permet de e e choisir l’op´ration arithm´tique ou logique a effectuer. e e ` RegDst : activ´ pour signifier que le registre de destination du r´sultat e e de l’op´ration est d´termin´ par les bits 15 a 11 de l’instruction e e e ` (partie RD).Rapport : Processeur MIPS – BB 3 RegDst : d´sactiv´ pour prendre l’adresse du registre destination RT e e venant des bits 20 a 16 de l’instruction. y compris l’´tat futur. ` e empˆche la synth`se de latches et simplifie le code. L’ad` dition permet de calculer l’adresse m´moire en combinant l’adresse e stock´e et l’offset. ` LW ALUCtrl : signal a 010 pour calculer l’adresse m´moire comme dans ` e l’´tat SW. RegDst : d´sactiv´ pour prendre l’adresse du registre destination RT e e venant des bits 20 a 16 de l’instruction. e e ALUSrc : d´sactiv´ pour que la seconde sortie du Register File arrive e e sur l’ALU. ` SW ALUCtrl : signal a 010 pour effectuer une addition avec l’ALU. RegWrite : activ´ pour autoriser l’´criture dans le registre. e ALUSrc : activ´ pour prendre comme seconde op´rande de l’ALU les e e 16 bits de poids faible (sign extended). cela permet au e e circuit d’ˆtre dans un ´tat stable par d´faut. e e MemtoReg : activ´ pour copier le contenu de la m´moire dans un e e registre. c’est-`-dire la partie offset a de l’instruction. e ALUSrc : activ´ comme dans l’´tat SW. e e RegDst : d´sactiv´ pour prendre l’adresse du registre destination RT e e venant des bits 20 a 16 de l’instruction. De plus. MemdCS : activ´ pour s´lectionner la m´moire. e e MemdCS : activ´ comme dans l’´tat SW. Donner une valeur initiale a tous les signaux sortants. RegWrite : activ´ comme dans l’´tat LW. e e e MemdWE : activ´ pour remplacer le contenu de la m´moire d´sign´ e e e e par l’adresse par le contenu de DataIn. e e e .

0] ALUSrc IRWrite MemdCS MemdWE MemiCS MemtoReg PCSrc PCWrite PCWriteCond RegDst RegWrite Etat suivant Decode SW Autres 1 0 Addi 010 1 Beq 010 0 SW 010 1 1 1 LW 110 1 1 R-Type (ALUCtrl[2.. 361 du COD.0]/Funct[5.20 p. 1 – Synth`se des signaux de l’unit´ de contrˆle — inspir´ de la figure 5. e e o e 4 .0]) Add Sub And Or 010/100000 110/100010 000/100100 001/100101 0 0 0 0 1 1 1 1 1 0 1 Decode 1 0 0 0 1 1 1 Fetch 1 1 1 1 1 1 Tab...Rapport : Processeur MIPS – BB Fetch ALUCtrl[2.

$zero . $s3 . $ z e r o $a0 . les op´rations loe e e giques (AND et OR) ainsi que l’acc`s en ´criture a la m´moire (SW ) ont e e ` e ´t´ rajout´s parce qu’ils n’´taient pas test´s dans le programme original. $v0 . Loop # # # # $s0 $s1 $s2 $s3 = = : : operand #1 operand #2 temp r e s u l t loop counter 13 14 15 16 17 18 19 20 21 22 23 $s2 . $zero # $s2 = $s2 + $s1 # $s3 = $s3 + 1 # i f $s3=$s1 GOTO End # GOTO Loop # mem[ $v1 ] <= r e s u l t $s2 . Les adresses des deux facteurs sont stock´es e e e respectivement dans $a0 et $a1. et celle de retour. 8 $zero . $s1 $s3 . Le programme est struce e tur´ comme une proc´dure. E t e r n i t y # i n f i n i t e l o o p . La premi`re e partie permet d’initialiser le contenu de la m´moire (memdata) . la seconde e effectue la multiplication. ee e e e Enfin. $a0 . $ z e r o $s2 .Rapport : Processeur MIPS – BB 5 Tests Effectu´s e La premi`re v´rification du bon fonctionnement a ´t´ faite avec le proe e ee gramme propos´ dans la m´moire d’instructions. bas´e sur sa d´finition math´matique : e e e a a·b= 1 b Listing 1: Programme de multiplication : 6 · 8 1 # Initialization addi addi add addi addi sw sw $s0 . $s1 . $s1 . Ensuite. 1 $s0 . 0 ( $v0 ) 25 26 Eternity : beq $zero . $s0 . 6 $zero . $zero . 4 $a1 . . $a1 . 0 ( $a0 ) 0 ( $a1 ) $zero . 4 0 ( $a0 ) 0 ( $a1 ) # $s0 = 6 # $s1 = 8 # $a0 = 0 # $a1 = 4 # $v0 = 8 # mem[ $a0 ] = $s0 # mem[ $a1 ] = $s1 3 4 5 6 7 8 9 11 # Multiplication lw lw add add Loop : add addi beq beq End : sw $s0 $s1 $s2 $s3 . End . listing 1). dans $v0. nous avons ´crit un programme calculant le produit de deux face teurs initialement stock´s en m´moire (cf. . $ z e r o $zero . $s3 . $zero . .

e e e entre les ´tats Decode et SW. Ainsi. figure 1. le flag zero doit ˆtre activ´ quand un r´sultat est nul. et tous les signaux sont initialis´s a chaque ` e ` coup d’horloge dans le processus principal. th´oriquement. Dans l’ALU. p. e e e e Comme le r´sultat temporaire (dans notre cas tp result) est d´fini comme e un signal. En examiu e ` nant le sch´ma de l’unit´ de traitement.Rapport : Processeur MIPS – BB 6 Fig. 2 – D´roulement du programme e Probl`mes et Solutions e Le premier probl`me est apparu lors de la simulation : un signal avait e une valeur ‘X’ alors que le programme n’utilisait que des ‘0’ et des ‘1’. pour laisser du temps a l’ALU. e e e e par les op´rations AND ou SUB de l’ALU. e e L’op´ration de saut conditionnel BEQ peut ˆtre effectu´e. le signal zero est ine dispensable pour que la valeur du PC puisse ˆtre diff´rente de P C = P C +4 . e e e . l’instruction commen¸ait par ´crire e c e n’importe o` en m´moire avant de le faire a la bonne adresse. Comme solution. Toutefois e ` nous avons trouv´ plus astucieux de pr´parer l’adresse dans l’´tat Decode. En effet. Or l’un des signaux e avait une autre assignation dans l’´tat Fetch. 2). e Le dernier probl`me s’est pos´ avec l’instruction SW. lors des e e premiers tests et comme nous nous sommes bas´s tout d’abord sur le graphe e des ´tats du cours (cf. Nous avions initialis´ les signaux dans le processus Reset de l’unit´ de contrˆle e e o (processus propre) et au d´but du processus principal. lequel requi`re un coup d’horloge e e suppl´mentaire par rapport au signal de s´lection en ´criture de la m´moire e e e e (MemdWE ). seul l’´tat e e est remis a Fetch dans le Reset. e e d’o` le choix de la soustraction qui active ce signal si les op´randes sont u e ´gales. il est apparu que l’adresse n’est e e valide qu’apr`s son calcul dans l’ALU. il ´tait envisageable d’ajouter un ´tat interm´diaire. il est indispensable de d´finir la valeur de ce flag a l’ext´rieur du e ` e processus de calcul sous peine d’avoir un d´calage d’un coup d’horloge entre e le nouveau r´sultat et son activation ´ventuelle. En pratique.

la gestion des exceptions permettrait de d´tecter les d´passements e e de capacit´ dans les op´rations arithm´tiques ainsi que les instructions non e e e reconnues ou incorrectes.epfl.04. eee e Finalement. son architecture et son fonctionnement. Des instructions telles que des d´calages (SLL et SRL). Il serait int´ressant d’impl´menter le pipelining pour r´duire le temps e e e e total d’ex´cution et avoir une meilleure gestion des ressources du procese seur. e 1. en particulier la fonction NOT. e mais comme les op´rations se chevauchent. des am´liorations au niveau des ` e performances et des possibilit´s intrins`ques sont envisageables. toutes les instructions demandent. Les d´calages perc e e mettent des multiplications et divisions par 2 . les solutions choisies — par e exemple les biblioth`ques arithm´tiques — nous sont apparues comme ´vie e e dentes du fait de leur simplicit´ et de leur logique. et le NOR permet de calculer toutes les autres fonctions logiques. en informaticiens.ch/∼persegue/mips/ . le temps total d’ex´cution d’une e e s´quence d’instructions est diminu´. Enfin. Conclusion § ¦ 17. trois e coups d’horloge pendant lesquels une partie du processeur n’est pas utilis´e. ce projet nous a permis de nous familiariser avec la logique d’un processeur. pour s’ex´cuter. le comparateur ‘<’ compl`te e les instructions de sauts conditionnels . De plus.Rapport : Processeur MIPS – BB 7 Am´liorations e Le design du processeur mis a part. Disponible sur http://diwww. e e Actuellement. nous avons e pr´f´r´ cr´er. Il faut ´videmment remarquer e e e e qu’une instruction de saut ou un test empˆchent l’application de cette teche nique. Nous esp´rons gare der en m´moire les quelques subtilit´s d´couvertes pour pouvoir les exploiter e e e dans notre avenir en ing´nierie informatique. plutˆt que de e o coder les instructions utilis´es pour la multiplication en binaire. un autre come parateur (SLT ) et une nouvelle op´ration logique (NOR) augmenteraient e de fa¸on significative les possibilit´s de programmation. Le pipelining permet de commencer a ex´cuter une nouvelle instruc` e tion alors que la pr´c´dente est encore trait´e.2002 11h49: CA MARCHE !!! ¸ ¤ ¥ Pour r´aliser le Processeur MIPS – BB. le programme MIPS Assembler 1 . e e Le Processeur MIPS – BB a un jeu d’instructions quelque peu restreint. Le nombre de coups d’horloge pour une instruction n’est pas r´duit.

Penguin Books.A. Notes du cours Conception des Processeurs. [3] E.L. Orwell. Nineteen Eighty-Four. Hennessy. [2] E. Ienne. 2nd Edition. Sanchez et P.Rapport : Processeur MIPS – BB 8 R´f´rences ee [1] D. . 2001-2002. Morgan Kaufmann Publishers. [4] B. Patterson et J. 1948. 1998. 2002. Ienne. Computer Organization & Design. Sanchez et P. Notes du cours Architecture des Ordinateurs.

. . . . . . . . 25 regfile 32 synth. . . . . 10 alu synth. . . . . . . . . .vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .vhd . . . . . . . . . . . . . . . . . . . . . . . .vhd . 20 mux 2 synth. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26 shiftleft2 synth. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 memdata synth. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .vhd . . . . . . . .vhd . . . . . . . . . . . . 22 or 2 synth. . . . . . . . . . . . . . . . . . . 18 meminstr synth. . 24 reg 32 synth.vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Rapport : Processeur MIPS – BB 9 Annexes Fichiers VHDL add synth. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .vhd . . .vhd . . . . . . . 23 pc synth. . . . . . . . .11 and 2 synth. . . . . . . . . . . . . . . . . 14 ir synth. 28 signextend synth. . . . . . . . . . . . . . . . . . . . . . . . . . . .vhd . . . . . . . . . . . .vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .vhd . . . . . . . . . . . . . . . . . . . . . . . . . 13 controlunit synth. . .vhd . . . . . . . . . . . . . . . . . . . . . . . . . .vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .vhd .

std logic 1164 . . END synth . . std logic unsigned . END add . s t d l o g i c v e c t o r ( 3 1 downto 0 ) 14 15 −− Simple o p´ r a t i o n a r i t h m ´ t i q u e ( a d d i t i o n ) e e −− u t i l i s a n t l a b i b l i o t h ` q u e a r i t h m ´ t i q u e e e ARCHITECTURE synth OF add IS BEGIN r e s u l t <= a + b . s t d l o g i c v e c t o r ( 3 1 downto 0 ) .vhd 1 2 3 4 LIBRARY USE i e e e USE i e e e USE i e e e ieee . all . 6 7 8 9 10 11 12 ENTITY add IS PORT( a : IN b : IN r e s u l t : OUT ). .Rapport : Processeur MIPS – BB 10 Listing 2: add synth. std logic arith . s t d l o g i c v e c t o r ( 3 1 downto 0 ) . 17 18 19 20 . all . all .

all . std logic 1164 . END IF . v e c t o r ( 2 downto 0 ) 16 17 18 ARCHITECTURE synth OF a l u IS SIGNAL t p r e s u l t : s t d l o g i c v e c t o r ( 3 1 downto 0 ) . −− G e s t i o n du f l a g z e r o PROCESS ( t p r e s u l t ) BEGIN IF ( t p r e s u l t = ( 3 1 downto 0 = > ’ 0 ’ ) ) THEN z e r o <= ’1 ’. . b ) BEGIN CASE op IS W E ” 000 ” => t p r e s u l t <= a A D b . e −− Choix de ‘U’ pour d e s o p ´ r a t i o n s non reconnues e PROCESS ( op .vhd 1 2 3 4 LIBRARY USE i e e e USE i e e e USE i e e e ieee . HN END CASE. END PROCESS. 20 21 23 24 25 26 27 28 29 30 31 32 34 36 37 38 39 40 41 42 . 6 7 8 9 10 11 12 13 14 ENTITY a l u IS PORT( a : b : result : zero : op : ). a . IN IN OUT OUT IN std std std std std logic logic logic logic logic v e c t o r ( 3 1 downto 0 ) .Rapport : Processeur MIPS – BB 11 Listing 3: alu synth. . v e c t o r ( 3 1 downto 0 ) . . ELSE z e r o <= ’0 ’. END a l u . std logic unsigned . std logic arith . all . HN W E ” 010 ” => t p r e s u l t <= a + b . BEGIN −− P r o c e s s u s p r i n c i p a l d´ c o d a n t l e s i g n a l op . v e c t o r ( 3 1 downto 0 ) . HN W E ” 110 ” => t p r e s u l t <= a − b . HN W E others => t p r e s u l t <= (OTHERS = > ’U ’ ) . HN N W E ” 001 ” => t p r e s u l t <= a OR b . . all .

Rapport : Processeur MIPS – BB 12 43 END PROCESS. −− Passage par un s i g n a l t e m p o r a i r e pour que l a −− s o r t i e r e s u l t a i t t o u j o u r s une v a l e u r r e s u l t <= t p r e s u l t . 45 46 48 50 . END synth .

s t d l o g i c a r i t h .Rapport : Processeur MIPS – BB 13 Listing 4: and 2 synth. 16 17 18 19 . std logic 5 6 7 8 9 10 11 13 14 −− Simple o p´ r a t i o n l o g i q u e (ET l o g i q u e ) e −− u t i l i s a n t l a b i b l i o t h ` q u e a r i t h m ´ t i q u e e e ARCHITECTURE synth OF And 2 IS BEGIN Out0 <= In0 A D In1 . USE i e e e . a l l . USE i e e e . END And 2 . 2 IS : IN : IN : OUT std logic . a l l . N END synth . s t d l o g i c 1 1 6 4 . ENTITY And PORT( In0 In1 Out0 ).vhd 1 2 3 LIBRARY i e e e . std logic .

ENTITY C o n t r o l U n i t IS PORT( Funct : IN Op : IN clk : IN reset : IN ALUCtrl : OUT ALUSrc : OUT IRWrite : OUT MemdCS : OUT MemdWE : OUT MemiCS : OUT MemtoReg : OUT PCSrc : OUT PCWrite : OUT PCWriteCond : OUT RegDst : OUT RegWrite : OUT ). LW) . END C o n t r o l U n i t . op . <= ’0 ’. s t d l o g i c 1 1 6 4 . a l l . . BEGIN PROCESS ( c u r r e n t s t a t e . . SW. . . . .Rapport : Processeur MIPS – BB 14 Listing 5: controlunit synth. . 25 ARCHITECTURE synth OF C o n t r o l U n i t IS −− d ´ c l a r a t i o n d e s 7 ´ t a t s e e type State Type i s ( Fetch . 27 28 29 30 31 33 35 36 38 39 41 42 . s i g n a l n e x t s t a t e : State Type . v e c t o r ( 2 downto 0 ) . . RType . Decode . Funct ) BEGIN −− I n i t i a l i s a t i o n de t o u s l e s s i g n a u x −− a chaque changement d ’ ´ t a t ` e ALUCtrl ALUSrc <= (OTHERS = > ’ 0 ’ ) . 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 std std std std std std std std std std std std std std std std logic logic logic logic logic logic logic logic logic logic logic logic logic logic logic logic v e c t o r ( 5 downto 0 ) . Beq . . . USE i e e e . . s i g n a l c u r r e n t s t a t e : State Type . . v e c t o r ( 5 downto 0 ) .vhd 1 2 LIBRARY i e e e . Addi .

<= ’0 ’. <= ’0 ’. n e x t s t a t e <= SW. <= ’0 ’. n e x t s t a t e <= Decode . −− Decode : D´ coder l ’ i n s t r u c t i o n e −− Pour SW. c a l c u l e r l ’ a d r e s s e en p l u s W E Decode => HN CASE Op IS W E ” 001000 ” => n e x t s t a t e <= Addi . HN W E OTHERS => n e x t s t a t e <= Fetch . <= ’0 ’. <= ’0 ’. MemdCS <= ’1 ’. <= ’0 ’. <= ’0 ’. <= ’0 ’. HN W E ” 000100 ” => n e x t s t a t e <= Beq . W E ” 100011 ” => n e x t s t a t e <= LW. ALUSrc <= ’1 ’. MemiCS <= ’1 ’. ALUSrc <= ’1 ’. <= Fetch . HN W E ” 101011 ” => HN ALUCtrl <= ” 010 ” . 55 CASE c u r r e n t s t a t e IS −− Fetch : Charger l ’ i n s t r u c t i o n s u i v a n t e W E Fetch => HN IRWrite <= ’1 ’. <= ’0 ’. HN END CASE. PCWrite <= ’1 ’. HN W E ” 000000 ” => n e x t s t a t e <= RType .Rapport : Processeur MIPS – BB 15 43 44 45 46 47 48 49 50 51 52 53 IRWrite MemdCS MemdWE MemiCS MemtoReg PCSrc PCWrite PCWriteCond RegDst RegWrite next state <= ’0 ’. −− O p´ r a t i o n s e W E Addi => HN ALUCtrl <= ” 010 ” . 57 59 60 61 62 63 65 66 68 69 70 71 72 73 74 75 76 77 78 79 80 82 84 85 86 .

RegWrite <= ’1 ’. ALUSrc <= ’1 ’. W E Beq => HN −− S o u s t r a c t i o n pour un s a u t ALUCtrl <= ” 110 ” . HN END CASE. W E LW => HN ALUCtrl <= ” 010 ” . −− P r o c e s s u s Reset : −− I n i t i a l i s e uniquement l ’ ´ t a t c o u r a n t e PROCESS ( c l k . END PROCESS. W E SW => HN ALUCtrl <= ” 010 ” . END IF . RegDst <= ’1 ’. MemdCS <= ’1 ’. PCSrc <= ’1 ’. MemtoReg <= ’1 ’. HN W E ” 100010 ” => ALUCtrl <= ” 110 ” . END CASE.Rapport : Processeur MIPS – BB 16 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 RegWrite <= ’1 ’. HN W E OTHERS => ALUCtrl <= ”UUU” . MemdWE <= ’1 ’. ALUSrc <= ’1 ’. END PROCESS. PCWriteCond <= ’1 ’. W E RType => HN −− Choix de l ’ o p´ r a t i o n de t y p e R−t y p e e CASE Funct IS W E ” 100000 ” => ALUCtrl <= ” 010 ” . r e s e t ) BEGIN IF ( r e s e t = ’ 1 ’ ) THEN c u r r e n t s t a t e <= f e t c h . HN W E ” 100101 ” => ALUCtrl <= ” 001 ” . 118 119 121 122 123 124 125 126 127 128 130 . ELSIF ( c l k ’ e v e n t A D c l k = ’ 1 ’ ) THEN N c u r r e n t s t a t e <= n e x t s t a t e . END synth . HN W E ” 100100 ” => ALUCtrl <= ” 000 ” . RegWrite <= ’1 ’. MemdCS <= ’1 ’.

END synth . END IR .Rapport : Processeur MIPS – BB 17 Listing 6: ir synth. END IF . END PROCESS. USE i e e e . l o g i c v e c t o r ( 3 1 downto 0 ) . logic . IS : : : : IN OUT IN IN std std std std l o g i c v e c t o r ( 3 1 downto 0 ) . 16 17 18 20 21 22 23 24 25 26 27 29 .vhd 1 2 LIBRARY i e e e . we ) BEGIN IF ( c l k ’ e v e n t A D c l k = ’ 1 ’ ) THEN N IF ( we = ’ 1 ’ ) THEN q <= a . a . a l l . s t d l o g i c 1 1 6 4 . logic 4 5 6 7 8 9 10 11 13 14 ARCHITECTURE synth OF IR IS BEGIN −− R e g i s t r e d ’ i n s t r u c t i o n ( 3 2 b i t s ) −− a c t i v ´ en ´ c r i t u r e avec un s i g n a l e e −− s u p p l´ m e n t a i r e ( ‘ we ’ ) e PROCESS ( c l k . END IF . ENTITY IR PORT( a q we clk ).

. OTHERS => ” 000000000000000000000000 000 0000 0 ” ) . a l l . END memdata . a l l . v e c t o r ( 3 1 downto 0 ) . 1 => ” 000000000000000000000000 000 0001 1 ” . IF ( c s = ’ 1 ’ ) THEN IF ( we = ’ 1 ’ ) THEN −− Mode : E c r i t u r e memoired (CONV INTEGER( adr )) <= Data In . s t d l o g i c 1 1 6 4 .vhd 1 2 3 LIBRARY i e e e . BEGIN −− −− −− −− −− −− Memoire de donn´ es : e Doit ˆ t r e s ´ l e c t i o n n ´ e ( ’ cs ’ ) e e e p u i s deux modes : l e c t u r e e t ´ c r i t u r e e en f o n c t i o n de ‘ we ’ ( c o n v i n t e g e r n ´ c e s s a i r e p a r c e que l ’ i n d e x de l a e m´ moire e s t de t y p e i n t e g e r ) e 25 26 27 28 29 30 32 33 34 PROCESS ( cs . ENTITY memdata PORT( adr Data Out cs we Data In oe ). SIGNAL memoired : memdtype := (0 = > ” 000000000000000000000000 000 0010 0 ” . adr . USE i e e e . . oe . USE i e e e . we . v e c t o r ( 3 1 downto 0 ) . 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22 23 ARCHITECTURE synth OF memdata IS TYPE memdtype IS A R Y( ( ( 2 ∗ ∗ 8 ) / 4 ) − 1 downto 0 ) OF R A s t d l o g i c v e c t o r ( 3 1 downto 0 ) .Rapport : Processeur MIPS – BB 18 Listing 7: memdata synth. Data In ) BEGIN Data Out <= (OTHERS = > ’Z ’ ) . ELSE 36 37 39 40 42 . s t d l o g i c u n s i g n e d . IS : : : : : : IN OUT IN IN IN IN std std std std std std logic logic logic logic logic logic v e c t o r ( 7 downto 0 ) .

END PROCESS. END IF . END IF . 49 50 51 53 . END synth . END IF .Rapport : Processeur MIPS – BB 19 44 45 46 47 −− Mode : L e c t u r e IF ( oe = ’ 1 ’ ) THEN Data Out <= memoired (CONV INTEGER( adr ) ) .

−− add $s2 . END meminstr .vhd 1 2 3 LIBRARY i e e e . −− add $s2 . −− add $a0 . s t d l o g i c u n s i g n e d . 0 ( $a1 ) 6 => ” 1010110010110001000000000 000 0000 ” . −− a d d i $v0 . −− a d d i $s1 . −− lw $s0 . 0 ( $a0 ) 7 => ” 1000110010010000000000000 000 0000 ” . −− add $s3 . a l l . $zero . 6 0 => ” 0010000000010000000000000 000 0110 ” . a l l . $zero . 4 3 => ” 0010000010000101000000000 000 0100 ” . 4 4 => ” 0010000010100010000000000 000 0100 ” . −− a d d i $a1 . $zero .Rapport : Processeur MIPS – BB 20 Listing 8: meminstr synth. USE i e e e . s t d l o g i c 1 1 6 4 . 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 . $zero . 0 ( $a1 ) 8 => ” 1000110010110001000000000 000 0000 ” . $s2 . $ z e r o 9 => ” 0000000000000000100100000 010 0000 ” . USE i e e e . 8 1 => ” 0010000000010001000000000 000 1000 ” . $zero . 0 ( $a0 ) 5 => ” 1010110010010000000000000 000 0000 ” . logic 14 15 16 ARCHITECTURE synth OF meminstr IS TYPE memitype IS A R Y( ( ( 2 ∗ ∗ 8 ) / 4 ) − 1 downto 0 ) OF R A s t d l o g i c v e c t o r ( 3 1 downto 0 ) . $a0 . s i g n a l memoirei : memitype : = ( −− a d d i $s0 . $ z e r o 10 => ” 0000000000000000100110000 010 0000 ” . logic . l o g i c v e c t o r ( 3 1 downto 0 ) . $ z e r o 2 => ” 0000000000000000001000000 010 0000 ” . −− sw $s1 . $s1 11 => ” 0000001001010001100100000 010 0000 ” . $a1 . −− sw $s0 . ENTITY meminstr IS PORT( adr : IN data : OUT cs : IN oe : IN ). −− lw $s1 . 5 6 7 8 9 10 11 12 std std std std l o g i c v e c t o r ( 7 downto 0 ) .

$s3 . oe .Rapport : Processeur MIPS – BB 21 43 44 45 46 47 48 49 50 51 52 −− a d d i $s3 . −− sw $s2 . OTHERS => ” 000000000000000000000000 0000 000 0 ” ) . $zero . 1 13 => ” 0001001001110000000000000 000 0001 ” . END synth . END PROCESS. $s3 . ELSE −− i n a c t i v e = > ’Z ’ en s o r t i e data <= (OTHERS = > ’Z ’ ) . −4 14 => ” 0001000000000000111111111 111 1100 ” . 0 ( $v0 ) 15 => ” 1010110001010010000000000 000 0000 ” . 1 12 => ” 0010001001110011000000000 000 0001 ” . −− b e q $s0 . −− b e q $zero . $zero . END IF . −− b e q $zero . −1 16 => ” 0001000000000000111111111 111 1111 ” . 54 56 58 59 61 62 63 64 65 66 67 68 69 71 . BEGIN −− M´moire d ’ i n s t r u c t i o n c o n t e n a n t l e programme e −− de m u l t i p l i c a t i o n PROCESS ( cs . adr ) BEGIN IF ( c s = ’ 1 ’ A D oe = ’ 1 ’ ) THEN N data <= memoirei (CONV INTEGER( adr ) ) .

e1 .vhd 1 2 LIBRARY i e e e . W E ’1 ’ HN => o <= e1 .Rapport : Processeur MIPS – BB 22 Listing 9: mux 2 synth. 4 5 6 7 8 9 10 11 std std std std l o g i c v e c t o r ( 3 1 downto 0 ) . s e l ) BEGIN CASE s e l IS W E ’0 ’ HN => o <= e0 . e e n v o i de ‘U’ en s o r t i e 16 17 18 19 21 22 23 24 25 26 27 28 PROCESS ( e0 . END mux 2 . HN END CASE. ˆ S i l e s i g n a l ‘ s e l ’ d i f f ` r e de ‘ 0 ’ ou de ‘ 1 ’ . l o g i c v e c t o r ( 3 1 downto 0 ) . 30 . ENTITY mux 2 IS PORT( e0 : IN e1 : IN o : OUT s e l : IN ). a l l . l o g i c v e c t o r ( 3 1 downto 0 ) . USE i e e e . END PROCESS. END synth . W E OTHERS => o <= (OTHERS = > ’U ’ ) . s t d l o g i c 1 1 6 4 . logic 13 14 ARCHITECTURE synth OF mux 2 IS BEGIN −− −− −− −− M u l t i p l e x e u r 2 e n t r ´ e s de 3 2 b i t s e avec 1 b i t de c o n t r o l e .

s t d l o g i c 1 1 6 4 . END o r 2 .vhd 1 2 LIBRARY i e e e . END synth . 15 16 17 18 .Rapport : Processeur MIPS – BB 23 Listing 10: or 2 synth. std logic 4 5 6 7 8 9 10 12 13 −− Simple o p´ r a t i o n l o g i q u e (OU l o g i q u e ) e −− u t i l i s a n t l a b i b l i o t h ` q u e a r i t h m ´ t i q u e e e ARCHITECTURE synth OF o r 2 IS BEGIN Out0 <= In0 OR In1 . ENTITY o r 2 PORT( In0 In1 Out0 ). IS : IN : IN : OUT std logic . std logic . USE i e e e . a l l .

r e s e t ) BEGIN IF ( r e s e t = ’ 1 ’ ) THEN q <= (OTHERS = > ’ 0 ’ ) . 14 15 ARCHITECTURE synth OF pc IS BEGIN −− R e g i s t r e PC 3 2 b i t s −− P r o c e s s u s Reset e t p r i n c i p a l PROCESS ( c l k .Rapport : Processeur MIPS – BB 24 Listing 11: pc synth. ELSIF ( c l k ’ e v e n t and c l k = ’ 1 ’ ) THEN IF ( we = ’ 1 ’ ) THEN q <= a . 4 5 6 7 8 9 10 11 12 IN IN OUT IN IN std std std std std logic logic logic logic logic . END IF . END synth . a l l . END pc . ENTITY pc IS PORT( clk : a : q : we : reset : ). USE i e e e . 17 18 20 21 22 23 24 25 26 27 28 29 31 . v e c t o r ( 3 1 downto 0 ) .vhd 1 2 LIBRARY i e e e . END IF . . v e c t o r ( 3 1 downto 0 ) . s t d l o g i c 1 1 6 4 . END PROCESS.

a l l . END IF . END r e g 3 2 . BEGIN −− R e g i s t r e 3 2 b i t s s ´ q u e n t i e l e −− sans s i g n a l Reset PROCESS ( c l k ) BEGIN IF ( c l k ’ e v e n t A D c l k = ’ 1 ’ ) THEN N r e g s i g n a l <= a . q <= r e g s i g n a l . s t d l o g i c 1 1 6 4 . 4 5 6 7 8 9 10 std logic . END synth . 16 17 19 20 21 22 23 24 26 28 . END PROCESS.vhd 1 2 LIBRARY i e e e . USE i e e e .Rapport : Processeur MIPS – BB 25 Listing 12: reg 32 synth. s t d l o g i c v e c t o r ( 3 1 downto 0 ) . ENTITY r e g 3 2 IS PORT( c l k : IN a : IN q : OUT ). s t d l o g i c v e c t o r ( 3 1 downto 0 ) 12 13 14 ARCHITECTURE synth OF r e g 3 2 IS 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 ) .

s t d l o g i c 1 1 6 4 . END PROCESS. USE i e e e . s t d l o g i c u n s i g n e d . ( 3 1 downto 0 ) . a l l . IN IN IN IN OUT OUT IN IN std std std std std std std std logic logic logic logic logic logic logic logic . ENTITY R e g F i l e PORT( clk aa ab aw a b WData RegWrite ). c l k . RegWrite .Rapport : Processeur MIPS – BB 26 Listing 13: regfile 32 synth. END IF . −− E c r i t u r e s ´ q u e n t i e l l e e IF ( c l k ’ e v e n t A D c l k = ’ 1 ’ ) THEN N −− Adresse ‘ ‘ 0 0 0 ’ ’ i n t e r d i t e IF ( RegWrite = ’ 1 ’ A D aw /= ” 000 ” ) THEN N r f a d d r e s s (CONV INTEGER ( aw)) <= WData . ab . aw ) BEGIN −− S o r t i e s c o n s t a n t e s a <= r f a d d r e s s (CONV INTEGER ( aa ) ) . END R e g F i l e 3 2 3 2 IS : : : : : : : : . 24 26 27 29 30 31 33 34 36 37 38 39 40 42 . 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 21 22 ARCHITECTURE synth OF R e g F i l e 3 2 IS TYPE a d d r e s s t y p e i s array ( 3 1 downto 0 ) of s t d l o g i c v e c t o r ( 3 1 downto 0 ) .vhd 1 2 3 LIBRARY i e e e . USE i e e e . SIGNAL r f a d d r e s s : a d d r e s s t y p e . vector vector vector vector vector vector ( 4 downto 0 ) . BEGIN −− R e g i s t r e P r i n c i p a l PROCESS ( aa . END IF . ( 4 downto 0 ) . a l l . ( 4 downto 0 ) . ( 3 1 downto 0 ) . ( 3 1 downto 0 ) . b <= r f a d d r e s s (CONV INTEGER ( ab ) ) .

Rapport : Processeur MIPS – BB 27 44 45 −− R e g i s t r e z e r o r f a d d r e s s (0) <= ( others = > ’ 0 ’ ) . END synth . 47 .

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 ) ).Rapport : Processeur MIPS – BB 28 Listing 14: shiftleft2 synth. ARCHITECTURE synth OF s h i f t l e f t 2 IS BEGIN −− D´ calage v e r s l a gauche de 2 b i t s e −− en a j o u t a n t d e s ’ 0 ’ s o r t i e <= e n t r e e ( 2 9 downto 0 ) & ” 00 ” . a l l . END synth .vhd 1 2 LIBRARY i e e e . ENTITY s h i f t l e f t 2 IS PORT( e n t r e e : IN s t d l o g i c v e c t o r ( 3 1 downto 0 ) . END s h i f t l e f t 2 . s t d l o g i c 1 1 6 4 . USE i e e e . 4 5 6 7 8 9 11 12 14 15 17 19 .

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 ) ). END SignExtend . USE i e e e . END synth . a l l . ENTITY SignExtend IS PORT( e n t r e e : IN s t d l o g i c v e c t o r ( 1 5 downto 0 ) . ARCHITECTURE synth OF SignExtend IS BEGIN −− E x t e n s i o n du b i t 1 5 aux b i t s 31 −16 de l ’ e n t r´ e e s o r t i e <= (31 downto 16 = > e n t r e e ( 1 5 ) ) & e n t r e e . 4 5 6 7 8 9 11 12 14 16 18 .Rapport : Processeur MIPS – BB 29 Listing 15: signextend synth.vhd 1 2 LIBRARY i e e e . s t d l o g i c 1 1 6 4 .