Skip to content

Commit

Permalink
my addons to final version formatting... :p
Browse files Browse the repository at this point in the history
  • Loading branch information
kapare committed Apr 4, 2012
1 parent 0330eef commit e4b9f9a
Show file tree
Hide file tree
Showing 18 changed files with 389 additions and 556 deletions.
21 changes: 10 additions & 11 deletions ALUDecoder.vhd
Original file line number Diff line number Diff line change
Expand Up @@ -11,28 +11,27 @@ USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE ieee.std_logic_unsigned. ALL;

-- cette entité permet de
-- L'entité permet de decoder du Funct et ALUOp le ALUControl.
ENTITY ALUDecoder IS
PORT (
Funct: IN STD_LOGIC_VECTOR (5 DOWNTO 0);
ALUOperation: IN STD_LOGIC_VECTOR (1 DOWNTO 0);
ALUControl: OUT STD_LOGIC_VECTOR (3 DOWNTO 0)
); END ALUDecoder ;
PORT (Funct: IN STD_LOGIC_VECTOR (5 DOWNTO 0);
ALUOperation: IN STD_LOGIC_VECTOR (1 DOWNTO 0);
ALUControl: OUT STD_LOGIC_VECTOR (3 DOWNTO 0));
END ALUDecoder ;

ARCHITECTURE ALUDecoderArchitecture OF ALUDecoder IS
BEGIN

PROCESS (ALUOperation, Funct)
BEGIN
-- Analyseur du OPCode et assignation des valeurs de control.
-- ceci va determiner l'operation fait dans le module ALU
-- Analyseur du ALU operation et assignation des valeurs de control.
-- Ceci va determiner l'operation fait dans le module ALU
CASE ALUOperation IS
WHEN "00" => ALUControl <= "0010";
WHEN "01" => ALUControl <= "0110";
WHEN "10" =>

--quand il y a une valeur de 10 à ALUoperation, faire le procédé suivant pour la valeur de funct
--ceci va aussi determiner l'operation fait dans le module ALU
-- Quand il y a une valeur de 10 à ALU operation, faire le procédé suivant pour la valeur de funct
-- Ceci va aussi determiner l'operation fait dans le module ALU
CASE Funct IS
WHEN "100000" => ALUControl <= "0010";
WHEN "100010" => ALUControl <= "0110";
Expand Down
60 changes: 28 additions & 32 deletions Controller.vhd
Original file line number Diff line number Diff line change
Expand Up @@ -12,48 +12,44 @@ USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned. all;
USE WORK.MIPSPackage.ALL;

--ceci est l'entité qui va determiner les instruction qui seront envoyer au modules individuels
-- L'entité qui va determiner les instructions qui seront envoyer au modules individuels
ENTITY Controller IS
PORT (
OPCodeController, FunctController: IN STD_LOGIC_VECTOR (5 DOWNTO 0);
Zero: IN STD_LOGIC;
PCSrc, MemToRegController, MemReadController, MemWriteController,
ALUSrcController, RegDstController, RegWriteController,
JumpController: OUT STD_LOGIC;
ALUControlController: OUT STD_LOGIC_VECTOR (3 DOWNTO 0)
);
PORT (OPCodeController, FunctController: IN STD_LOGIC_VECTOR (5 DOWNTO 0);
Zero: IN STD_LOGIC;
PCSrc, MemToRegController, MemReadController, MemWriteController,
ALUSrcController, RegDstController, RegWriteController,
JumpController: OUT STD_LOGIC;
ALUControlController: OUT STD_LOGIC_VECTOR (3 DOWNTO 0));
END Controller;

ARCHITECTURE ControllerArchitecture OF Controller IS

--signaux pour les interconnections entre module
ARCHITECTURE ControllerArchitecture OF Controller IS
-- Signaux pour les interconnections entre module
SIGNAL s_ALUOperation: STD_LOGIC_VECTOR (1 DOWNTO 0);
SIGNAL s_Branch: STD_LOGIC;

BEGIN

-- Connexion entre les pins du MainDecoder et les signaux du controller.
MD: MainDecoder PORT MAP(
OPCode => OPCodeController,
MemToReg => MemToRegController,
MemRead => MemReadController,
MemWrite => MemWriteController,
Branch => s_Branch,
ALUSrc => ALUSrcController,
RegDst => RegDstController,
RegWrite => RegWriteController,
Jump => JumpController,
ALUOperation => s_ALUOperation
-- Connexion entre les pins du MainDecoder et les signaux du controller.
MD: MainDecoder PORT MAP(
OPCode => OPCodeController,
MemToReg => MemToRegController,
MemRead => MemReadController,
MemWrite => MemWriteController,
Branch => s_Branch,
ALUSrc => ALUSrcController,
RegDst => RegDstController,
RegWrite => RegWriteController,
Jump => JumpController,
ALUOperation => s_ALUOperation
);

-- Connexion entre les pins du ALUDecoder et les signaux du controller.
ALUD: ALUDecoder PORT MAP(
Funct => FunctController,
ALUOperation => s_ALUOperation,
ALUControl => ALUControlController
-- Connexion entre les pins du ALUDecoder et les signaux du controller.
ALUD: ALUDecoder PORT MAP(
Funct => FunctController,
ALUOperation => s_ALUOperation,
ALUControl => ALUControlController
);

--operation AND logique utilisé dans la commnande branch
PCSrc <= Zero AND s_Branch;
-- Operation AND logique utilisé dans la commnande branch
PCSrc <= Zero AND s_Branch;

END ControllerArchitecture;
18 changes: 8 additions & 10 deletions DFlipFlop.vhd
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,23 @@
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;

-- entité de la bascule D a 32 bits
-- Entité de la bascule D a 32 bits
ENTITY DFlipFlop IS
PORT(
D : IN STD_LOGIC_VECTOR (31 DOWNTO 0);
Clock, Reset : IN STD_LOGIC;
Q : OUT STD_LOGIC_VECTOR (31 DOWNTO 0)
);
PORT(D: IN STD_LOGIC_VECTOR (31 DOWNTO 0);
Clock, Reset: IN STD_LOGIC;
Q: OUT STD_LOGIC_VECTOR (31 DOWNTO 0));
END DFlipFlop;

ARCHITECTURE DFlipFlopArchitecture OF DFlipFlop IS
BEGIN

-- la logique doit etre séquentielle donc elle est placé dans un process actifs sur le front montant de l'horloge
-- La logique doit etre séquentielle donc elle est placée dans un process actifs sur le front montant de l'horloge
PROCESS(Clock, Reset)
BEGIN
-- quand reset est vrai et il y a un front montant sur l'horloge, la sortie est remise a 0
-- Quand reset est vrai et il y a un front montant sur l'horloge, la sortie est remise a 0
IF (RISING_EDGE(clock) and (Reset = '1')) then
Q <= X"00000000";
-- autrement, la sortie est égal a l'entrée quand il y a un front montant de l'horloge
Q <= X"00000000";
-- Autrement, la sortie est égal a l'entrée quand il y a un front montant de l'horloge
ELSIF (RISING_EDGE(clock)) THEN
Q <= D;
end if;
Expand Down
47 changes: 20 additions & 27 deletions DataPath.vhd
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@ USE ieee.std_logic_arith.ALL;
USE ieee.std_logic_unsigned. ALL;
USE WORK.MIPSPackage.ALL;


-- l'entité qui permet de relier toutes les unités de logique
-- L'entité qui permet de relier toutes les unités de logique
ENTITY DataPath IS
PORT (
Clock: IN STD_LOGIC;
Expand All @@ -35,17 +34,15 @@ ENTITY DataPath IS
);
END DataPath;



ARCHITECTURE DataPathArchitecture OF DataPath IS
-- signals 32 bits pour les connexions inter composantes
SIGNAL s_SignExImm, s_Result, s_MUXOut, s_SrcA, s_SrcB, s_Instr: STD_LOGIC_VECTOR (31 DOWNTO 0);
-- signals 1 bit pour les connections intercomposantes
SIGNAL s_ZeroAndPCSrc, s_Zero, s_PCSrc, s_NotConnected: STD_LOGIC;
-- Signals 32 bits pour les connexions inter composantes
SIGNAL s_SignExImm, s_Result, s_MUXOut, s_SrcA, s_SrcB, s_Instr: STD_LOGIC_VECTOR (31 DOWNTO 0);
-- Signals 1 bit pour les connections intercomposantes
SIGNAL s_ZeroAndPCSrc, s_Zero, s_PCSrc, s_NotConnected: STD_LOGIC;

BEGIN
-- port map pour connecter la logique du program counter
LogiquePC: PC1 PORT MAP(
-- Port map pour connecter la logique du program counter
LogiquePC: ProgramCounter PORT MAP(
Instr => Instruction(25 downto 0),
Clock => Clock,
Reset => Reset,
Expand All @@ -56,7 +53,7 @@ BEGIN
);


-- port map pour connecter la logique pour le bank de registres
-- Port map pour connecter la logique pour le bank de registres
LogiqueRegistre : LogicRegister PORT MAP (
RegWrite => RegWrite,
ALUSrc => AluSrc,
Expand All @@ -71,33 +68,29 @@ BEGIN
SrcB => s_SrcB,
rd2 => Rd2,
SignExtend => s_SignExImm

);

-- port map pour connecter la logique arithmétique
-- Port map pour connecter la logique arithmétique
ALU : alu_32 PORT MAP(
SrcA => s_SrcA,
SrcB => s_SrcB,
ALUControl_32 => ALUControl,
c_out => s_NotConnected,
Result_32 => s_Result,
zero => Zero
);
);

-- Port map pour connecter le mutiplexeur qui selecte quel information sera ecrite au registre
DataMUX : MUX21Generic
GENERIC MAP( Mux_Size => 32)
PORT MAP(
MUXInput0 => s_Result,
MUXInput1 => Data,
MUXSel => MemToReg,
MUXOutput => s_MUXOut
);
-- Port map pour connecter le mutiplexeur qui selecte quel information sera ecrite au registre
DataMUX : MUX21Generic
GENERIC MAP( Mux_Size => 32)
PORT MAP(
MUXInput0 => s_Result,
MUXInput1 => Data,
MUXSel => MemToReg,
MUXOutput => s_MUXOut
);

--connexion de la sortie au signal entre le mux et l'ALU
-- Connexion de la sortie au signal entre le mux et l'ALU
Result <= s_Result;




END DataPathArchitecture;
31 changes: 14 additions & 17 deletions LogicRegister.vhd
Original file line number Diff line number Diff line change
Expand Up @@ -13,24 +13,21 @@ USE ieee.std_logic_unsigned. ALL;
USE WORK.MIPSPackage.ALL;

ENTITY LogicRegister IS
PORT (
RegWrite, ALUSrc, Clock, RegDst: IN STD_LOGIC;
Instr25_21, Instr20_16, Instr15_11: IN STD_LOGIC_VECTOR (4 DOWNTO 0);
Instr15_0: IN STD_LOGIC_VECTOR (15 DOWNTO 0);
Result: IN STD_LOGIC_VECTOR (31 DOWNTO 0);
SrcA, SrcB, rd2, SignExtend: OUT STD_LOGIC_VECTOR (31 DOWNTO 0)
); END LogicRegister ;
PORT (RegWrite, ALUSrc, Clock, RegDst: IN STD_LOGIC;
Instr25_21, Instr20_16, Instr15_11: IN STD_LOGIC_VECTOR (4 DOWNTO 0);
Instr15_0: IN STD_LOGIC_VECTOR (15 DOWNTO 0);
Result: IN STD_LOGIC_VECTOR (31 DOWNTO 0);
SrcA, SrcB, rd2, SignExtend: OUT STD_LOGIC_VECTOR (31 DOWNTO 0));
END LogicRegister ;

ARCHITECTURE LogicRegisterArchitecture OF LogicRegister IS

--signal qui chemine la valeur de notre MUX au entrée wa3 de notre banc de registres
SIGNAL s_WriteReg: STD_LOGIC_VECTOR (4 DOWNTO 0);

--signaux qui entrent dans le MUX situé après la sortie de notre banc de registres
SIGNAL s_SignImm, s_rd2: STD_LOGIC_VECTOR (31 DOWNTO 0);
-- Signal qui chemine la valeur de notre MUX a l'entrée wa3 de notre banc de registres
SIGNAL s_WriteReg: STD_LOGIC_VECTOR (4 DOWNTO 0);
-- Signaux qui entrent dans le MUX situé après la sortie de notre banc de registres
SIGNAL s_SignImm, s_rd2: STD_LOGIC_VECTOR (31 DOWNTO 0);

BEGIN
--portmap qui assigne les entrées et sorties de notre banc de registres
-- Portmap qui assigne les entrées et sorties de notre banc de registres
RegPortMap : RegFile PORT MAP(
ra1 => Instr25_21,
ra2 => Instr20_16,
Expand All @@ -42,7 +39,7 @@ BEGIN
clk => Clock
);

--MUX qui determine la valeur acheminé l'entrée wa3 de notre banc de registres
-- MUX qui determine la valeur acheminé a l'entrée wa3 de notre banc de registres
MUXInput: MUX21Generic
GENERIC MAP( Mux_Size => 5)
PORT MAP(
Expand All @@ -52,7 +49,7 @@ BEGIN
MUXOutput => s_WriteReg
);

--MUX qui determine la valeur acheminé a la source B de notre ALU
-- MUX qui determine la valeur acheminé a la source B de notre ALU
MUXOutput: MUX21Generic
GENERIC MAP( Mux_Size => 32)
PORT MAP(
Expand All @@ -75,7 +72,7 @@ BEGIN
-- Sign Extend output
SignExtend <= s_SignImm;

--connexion de la sortie rd2 de notre banc de registres au sortie correspondante de cette module(LogicRegister)
-- Connexion de la sortie rd2 de notre banc de registres au sortie correspondante de ce module(LogicRegister)
rd2 <= s_rd2;

END LogicRegisterArchitecture;
47 changes: 18 additions & 29 deletions MIPS.vhd
Original file line number Diff line number Diff line change
Expand Up @@ -12,32 +12,27 @@ USE ieee.std_logic_arith.ALL;
USE ieee.std_logic_unsigned. ALL;
USE WORK.MIPSPackage.ALL;

-- l'entité du processeur
-- L'entité du processeur
ENTITY MIPS IS
PORT (
Clock: IN STD_LOGIC;
Reset: IN STD_LOGIC;
Instruction: IN STD_LOGIC_VECTOR (31 DOWNTO 0);
Data: IN STD_LOGIC_VECTOR (31 DOWNTO 0);
PC: OUT STD_LOGIC_VECTOR (31 DOWNTO 0);
Result: OUT STD_LOGIC_VECTOR (31 DOWNTO 0);
Rd2: OUT STD_LOGIC_VECTOR (31 DOWNTO 0);
MemWrite, MemRead: OUT STD_LOGIC
);
PORT (Clock: IN STD_LOGIC;
Reset: IN STD_LOGIC;
Instruction: IN STD_LOGIC_VECTOR (31 DOWNTO 0);
Data: IN STD_LOGIC_VECTOR (31 DOWNTO 0);
PC: OUT STD_LOGIC_VECTOR (31 DOWNTO 0);
Result: OUT STD_LOGIC_VECTOR (31 DOWNTO 0);
Rd2: OUT STD_LOGIC_VECTOR (31 DOWNTO 0);
MemWrite, MemRead: OUT STD_LOGIC);
END MIPS;

ARCHITECTURE MIPSArchitecture OF MIPS IS
-- signal 4 bit pour le controle de l'ALU
SIGNAL s_ALUControl : STD_LOGIC_VECTOR (3 DOWNTO 0);
-- signals 1 bit pour les bits de controle
SIGNAL s_MemToReg, s_ALUSrc, s_RegDst, s_RegWrite, s_Jump, s_Zero, s_PCSrc : STD_LOGIC;
-- Signal 4 bit pour le controle de l'ALU
SIGNAL s_ALUControl : STD_LOGIC_VECTOR (3 DOWNTO 0);
-- Signals 1 bit pour les bits de controle
SIGNAL s_MemToReg, s_ALUSrc, s_RegDst, s_RegWrite, s_Jump, s_Zero, s_PCSrc : STD_LOGIC;

BEGIN


-- port map pour le controlleur du mips
ControllerPortMap : Controller PORT MAP(

BEGIN
-- Port map pour le controlleur du mips
ControllerPortMap : Controller PORT MAP(
OPCodeController => Instruction(31 downto 26),
FunctController => Instruction(5 downto 0),
Zero => s_Zero,
Expand All @@ -51,12 +46,9 @@ ARCHITECTURE MIPSArchitecture OF MIPS IS
JumpController => s_Jump,
ALUControlController => s_ALUControl
);



-- port map pour le datapath, donc pour la logique du processeur
DataPathPortMap: DataPath PORT MAP(

-- Port map pour le datapath, donc pour la logique du processeur
DataPathPortMap: DataPath PORT MAP(
Clock => Clock,
Reset => Reset,
MemToReg => s_MemToReg,
Expand All @@ -75,6 +67,3 @@ ARCHITECTURE MIPSArchitecture OF MIPS IS
);

END MIPSArchitecture;



Loading

0 comments on commit e4b9f9a

Please sign in to comment.