OpenCores
URL https://opencores.org/ocsvn/mipsr2000/mipsr2000/trunk

Subversion Repositories mipsr2000

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /mipsr2000/trunk
    from Rev 34 to Rev 36
    Reverse comparison

Rev 34 → Rev 36

/main.vhd
0,0 → 1,198
----------------------------------------------------------------------------------
-- Company:
-- Engineer: Lazaridis Dimitris
--
-- Create Date: 02:56:56 05/29/2012
-- Design Name:
-- Module Name: main - Behavioral
-- Project Name:
-- Target Devices:
-- Tool versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
 
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;
 
-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
 
entity main is
Port
(
Clk : in std_logic;
Rst : in std_logic;
vector_on : in std_logic_vector(2 downto 0);
Err : out STD_LOGIC;
Bus_r : out std_logic_vector(31 downto 0)
);
 
end main;
 
architecture Behavioral of main is
component ALU is
 
Port ( clk : in std_logic;
rst,Mult_en : in STD_LOGIC;
A_in : in std_logic_vector(31 downto 0);
B_in : in std_logic_vector(31 downto 0);
I : in std_logic_vector(31 downto 0);
immed_addr : std_logic_vector(15 downto 0);
ALUOp : in std_logic_vector(2 downto 0);
ALUmux : in std_logic_vector(1 downto 0);
From_i_op : IN std_logic_vector(1 downto 0);
From_i_mux : IN std_logic_vector(1 downto 0);
lui : in STD_LOGIC;
ALUSrcA : in std_logic;
ALUSrcB : in STD_LOGIC_VECTOR(1 downto 0);
N : in std_logic_vector(31 downto 0);
M : out std_logic_vector(31 downto 0);
Alu_out_exit : out std_logic_vector(31 downto 0);
Hi_out : out std_logic_vector(31 downto 0);
Lo_out : out std_logic_vector(31 downto 0);
Zero : out std_logic
);
end component;
 
component fsm is
Port ( clk : in STD_LOGIC;
rst : in STD_LOGIC;
RegDst, RegWrite, ALUSrcA, MemRead, MemWrite, Mult_en, IorD, IRWrite, PCWrite,
EqNq,ALUsw : out std_logic;
instr_31_26,immed_addr : in std_logic_vector(5 downto 0);
ALUOp,ALUSrcB,PCSource,ALUmux : OUT std_logic_vector(1 downto 0);
ALUop_sw,RFmux : out std_logic_vector(2 downto 0)
);
end component;
component Imem_block is
port (
clk : in std_logic;
rst : in std_logic;
npc : in std_logic_vector(31 downto 0);
MemRead : in STD_LOGIC;
PCWrite : in STD_LOGIC;
IRWrite : in STD_LOGIC;
Opcode : out std_logic_vector(5 downto 0);
rs : out std_logic_vector(4 downto 0);
rt : out std_logic_vector(4 downto 0);
rd : out std_logic_vector(4 downto 0);
immed_addr : out std_logic_vector(15 downto 0);
Err : out STD_LOGIC;
N : out std_logic_vector(31 downto 0);
Ext_sz_c : out std_logic;
From_i_op : out std_logic_vector(1 downto 0);
From_i_mux : out std_logic_vector(1 downto 0);
lui : out STD_LOGIC
);
end component;
component Reg_block is
port (
Clk : in std_logic;
rst : in STD_LOGIC;
vector_on : in std_logic_vector(2 downto 0);
Reg_Write : in std_logic;
Reg_Imm_not : in std_logic;
rs : in std_logic_vector(4 downto 0);
rt : in std_logic_vector(4 downto 0);
rd : in std_logic_vector(4 downto 0);
Ext_sz_c : in std_logic;
immed_addr : in std_logic_vector(15 downto 0);
Bus_W : in std_logic_vector(31 downto 0);
A2Alu : out std_logic_vector(31 downto 0);
B2Alu : out std_logic_vector(31 downto 0);
I2Alu : out std_logic_vector(31 downto 0)
 
);
end component;
component Dm is
port (
clk : in std_logic;
rst : in std_logic;
Alu_in :in std_logic_vector(31 downto 0);
MDR_in : in std_logic_vector(31 downto 0);
--op_code: in std_logic_vector(5 downto 0);
MemWrite : in std_logic;
MemRead : in std_logic;
IorD : in std_logic;
MDR_out : out std_logic_vector(31 downto 0)
--E : out std_logic_vector(1 downto 0)
);
end component;
component Mux_out_block is
port (
clk : in std_logic;
Zero_in,EqNq : in std_logic;
RFmux : in std_logic_vector(2 downto 0);
Hi_in : in std_logic_vector(31 downto 0);
Lo_in : in std_logic_vector(31 downto 0);
Alu_in: in std_logic_vector(31 downto 0);
Mdr_fr_out : in std_logic_vector(31 downto 0);
RF_out: out std_logic_vector(31 downto 0);
From_N: in std_logic_vector(31 downto 0);
From_A: in std_logic_vector(31 downto 0);
From_M: in std_logic_vector(31 downto 0);
PCSource: in std_logic_vector(1 downto 0);
NPC_out: out std_logic_vector(31 downto 0)
);
end component;
 
signal RegDst, RegWrite, ALUSrcA, MemRead, MemWrite, Mult_en, IorD, IRWrite, PCWrite,
EqNq,Ext_sz_c,No_u,Zero,lui : STD_LOGIC;
signal No_u2,ALUmux,PCSource,ALUSrcB,From_i_op,From_i_mux : std_logic_vector(1 downto 0);
signal ALUop_sw,RFmux : std_logic_vector(2 downto 0);
signal rs,rt,rd : std_logic_vector(4 downto 0);
signal instr_31_26 : std_logic_vector(5 downto 0);
signal immed_addr : std_logic_vector(15 downto 0);
signal Bus_W,A_wire,B_wire,I_wire,npc,MDR_out,Alu_out_exit,
N,M,Hi_out,Lo_out : std_logic_vector(31 downto 0);
 
 
 
begin
fsm_m:fsm port map(clk=>clk,rst=>rst,RegWrite=>RegWrite,PCSource=>PCSource,
ALUSrcB=>ALUSrcB,ALUmux=>ALUmux,
instr_31_26=>instr_31_26,immed_addr=>immed_addr(5 downto 0),RegDst=>RegDst,
ALUOp=>No_u2,ALUSrcA=>ALUSrcA,MemRead=>MemRead,
MemWrite=>MemWrite,Mult_en=>Mult_en,IorD=>IorD,IRWrite=>IRWrite,PCWrite=>PCWrite,
EqNq=>EqNq,ALUsw=>No_u,RFmux=>RFmux,ALUop_sw=>ALUop_sw);
ALU_m:ALU port map(clk=>clk,rst=>rst,Mult_en=>Mult_en,A_in=>A_wire,B_in=>B_wire,I=>I_wire,immed_addr=>immed_addr,
ALUOp=>ALUop_sw,ALUmux=>ALUmux,From_i_op=>From_i_op,From_i_mux=>From_i_mux,
lui=>lui,Zero=>Zero,ALUSrcA=>ALUSrcA,
ALUSrcB=>ALUSrcB,N=>N,M=>M,Hi_out=>Hi_out,Lo_out=>Lo_out,Alu_out_exit=>Alu_out_exit);
Imem_block_m:Imem_block port map(clk=>clk,rst=>rst,MemRead=>MemRead,PCWrite=>PCWrite,
IRWrite=>IRWrite,rt=>rt,rd=>rd,rs=>rs,immed_addr=>immed_addr,
Opcode=>instr_31_26,npc=>npc,Err=>Err,N=>N,Ext_sz_c=>Ext_sz_c,
From_i_op=>From_i_op,From_i_mux=>From_i_mux,lui=>lui);
Reg_blog_m:Reg_block port map(Clk=>Clk,rst=>rst,vector_on=>vector_on,Reg_Write=>RegWrite,Reg_Imm_not=>RegDst,
rs=>rs,rt=>rt,rd=>rd,Ext_sz_c=>Ext_sz_c,immed_addr=>immed_addr,Bus_W=>Bus_W,
A2Alu=>A_wire,B2Alu=>B_wire,I2Alu=>I_wire);
 
Dm_m:Dm port map(clk=>Clk,rst=>rst,Alu_in=>Alu_out_exit,MemWrite=>MemWrite,MemRead=>MemRead,
IorD=>IorD,MDR_in=>B_wire,MDR_out=>MDR_out);
 
Mux_out:Mux_out_block port map(clk=>clk,Zero_in=>Zero,EqNq=>EqNq,RFmux=>RFmux,Hi_in=>Hi_out,
Lo_in=>Lo_out,Alu_in=>Alu_out_exit,Mdr_fr_out=>MDR_out,
RF_out=>Bus_W,From_N=>N,From_A=>A_wire,From_M=>M,PCSource=>PCSource,
NPC_out=>npc);
process(clk)
begin
if (RISING_EDGE(clk))then
Bus_r <= Bus_W;
end if;
end process;
end Behavioral;
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.