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

Subversion Repositories mips_fault_tolerant

[/] [mips_fault_tolerant/] [trunk/] [source/] [main.vhd] - Blame information for rev 49

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 37 jimi39
----------------------------------------------------------------------------------
2
-- Company: 
3
-- Engineer:       Lazaridis Dimitris
4
-- 
5
-- Create Date:    02:56:56 05/29/2012 
6
-- Design Name: 
7
-- Module Name:    main - Behavioral 
8
-- Project Name: 
9
-- Target Devices: 
10
-- Tool versions: 
11
-- Description: 
12
--
13
-- Dependencies: 
14
--
15
-- Revision: 
16
-- Revision 0.01 - File Created
17
-- Additional Comments: 
18
--
19
----------------------------------------------------------------------------------
20
library IEEE;
21
use IEEE.STD_LOGIC_1164.ALL;
22
 
23
-- Uncomment the following library declaration if using
24
-- arithmetic functions with Signed or Unsigned values
25
--use IEEE.NUMERIC_STD.ALL;
26
 
27
-- Uncomment the following library declaration if instantiating
28
-- any Xilinx primitives in this code.
29
--library UNISIM;
30
--use UNISIM.VComponents.all;
31
 
32
entity main is
33
Port
34
(
35
         Clk : in  std_logic;
36
                        Rst : in  std_logic;
37
                        vector_on : in std_logic_vector(2 downto 0);
38
                        sel_top : in  std_logic;
39
                        Err : out STD_LOGIC;
40
                        pass : out std_logic;
41
                        Bus_r : out std_logic_vector(31 downto 0)
42
 
43
);
44
 
45
end main;
46
 
47
architecture Behavioral of main is
48
component ALU is
49
 
50
Port (     clk : in  std_logic;
51
                rst,Mult_en,sel_top : in  STD_LOGIC;
52
           A_in : in  std_logic_vector(31 downto 0);
53
           B_in : in  std_logic_vector(31 downto 0);
54
                          I : in  std_logic_vector(31 downto 0);
55
                          immed_addr : std_logic_vector(15 downto 0);
56
           ALUOp : in  std_logic_vector(2 downto 0);
57
                          ALUmux : in  std_logic_vector(1 downto 0);
58
                          From_i_op : IN std_logic_vector(1 downto 0);
59
                          From_i_mux : IN std_logic_vector(1 downto 0);
60
                          lui : in  STD_LOGIC;
61
                          ALUSrcA : in std_logic;
62
                          ALUSrcB : in  STD_LOGIC_VECTOR(1 downto 0);
63
                          N  : in std_logic_vector(31 downto 0);
64
                          M : out std_logic_vector(31 downto 0);
65
                          Alu_out_exit : out  std_logic_vector(31 downto 0);
66
                          Hi_out : out std_logic_vector(31 downto 0);
67
                          Lo_out : out std_logic_vector(31 downto 0);
68
                          Zero,pass : out std_logic
69
);
70
end component;
71
 
72
component fsm is
73
Port (     clk : in  STD_LOGIC;
74
           rst : in  STD_LOGIC;
75
                          RegDst, RegWrite, ALUSrcA, MemRead, MemWrite, Mult_en, IorD, IRWrite, PCWrite,
76
           EqNq,ALUsw : out std_logic;
77
           instr_31_26,immed_addr : in std_logic_vector(5 downto 0);
78
           ALUOp,ALUSrcB,PCSource,ALUmux : OUT std_logic_vector(1 downto 0);
79
                          ALUop_sw,RFmux : out std_logic_vector(2 downto 0)
80
                        );
81
end component;
82
component Imem_block is
83
port (
84
        clk : in std_logic;
85
                  rst : in std_logic;
86
                  npc : in std_logic_vector(31 downto 0);
87
        MemRead : in  STD_LOGIC;
88
                  PCWrite : in  STD_LOGIC;
89
                  IRWrite : in  STD_LOGIC;
90
                  Opcode   : out std_logic_vector(5 downto 0);
91
                  rs       : out std_logic_vector(4 downto 0);
92
                  rt       : out std_logic_vector(4 downto 0);
93
                  rd       : out std_logic_vector(4 downto 0);
94
        immed_addr : out std_logic_vector(15 downto 0);
95
                  Err : out STD_LOGIC;
96
                  N : out std_logic_vector(31 downto 0);
97
                  Ext_sz_c  : out std_logic;
98
                  From_i_op : out std_logic_vector(1 downto 0);
99
                  From_i_mux : out std_logic_vector(1 downto 0);
100
                  lui : out  STD_LOGIC
101
                );
102
end component;
103
component Reg_block is
104
port (
105
      Clk : in std_logic;
106
                rst : in  STD_LOGIC;
107
                vector_on : in std_logic_vector(2 downto 0);
108
                Reg_Write : in std_logic;
109
                Reg_Imm_not : in std_logic;
110
                rs : in std_logic_vector(4 downto 0);
111
                rt : in std_logic_vector(4 downto 0);
112
                rd : in std_logic_vector(4 downto 0);
113
                Ext_sz_c   : in std_logic;
114
                immed_addr : in std_logic_vector(15 downto 0);
115
                Bus_W : in std_logic_vector(31 downto 0);
116
                A2Alu : out std_logic_vector(31 downto 0);
117
                B2Alu : out std_logic_vector(31 downto 0);
118
      I2Alu : out std_logic_vector(31 downto 0)
119
 
120
);
121
end component;
122
component Dm is
123
port (
124
      clk    : in std_logic;
125
                rst : in std_logic;
126
      Alu_in :in std_logic_vector(31 downto 0);
127
                MDR_in : in std_logic_vector(31 downto 0);
128
                --op_code: in std_logic_vector(5 downto 0);
129
                MemWrite : in std_logic;
130
                MemRead : in std_logic;
131
                IorD : in std_logic;
132
                MDR_out : out std_logic_vector(31 downto 0)
133
      --E  : out std_logic_vector(1 downto 0) 
134
);
135
end component;
136
component Mux_out_block is
137
port (
138
      clk   : in std_logic;
139
                Zero_in,EqNq : in std_logic;
140
                RFmux : in std_logic_vector(2 downto 0);
141
      Hi_in : in std_logic_vector(31 downto 0);
142
      Lo_in : in std_logic_vector(31 downto 0);
143
      Alu_in: in std_logic_vector(31 downto 0);
144
      Mdr_fr_out : in std_logic_vector(31 downto 0);
145
      RF_out: out std_logic_vector(31 downto 0);
146
                From_N: in std_logic_vector(31 downto 0);
147
                From_A: in std_logic_vector(31 downto 0);
148
                From_M: in std_logic_vector(31 downto 0);
149
                PCSource: in std_logic_vector(1 downto 0);
150
                NPC_out: out std_logic_vector(31 downto 0)
151
);
152
end component;
153
 
154
signal RegDst, RegWrite, ALUSrcA, MemRead, MemWrite, Mult_en, IorD, IRWrite, PCWrite,
155
           EqNq,Ext_sz_c,No_u,Zero,lui : STD_LOGIC;
156
signal No_u2,ALUmux,PCSource,ALUSrcB,From_i_op,From_i_mux : std_logic_vector(1 downto 0);
157
signal ALUop_sw,RFmux : std_logic_vector(2 downto 0);
158
signal rs,rt,rd : std_logic_vector(4 downto 0);
159
signal instr_31_26 : std_logic_vector(5 downto 0);
160
signal immed_addr : std_logic_vector(15 downto 0);
161
signal Bus_W,A_wire,B_wire,I_wire,npc,MDR_out,Alu_out_exit,
162
       N,M,Hi_out,Lo_out : std_logic_vector(31 downto 0);
163
 
164
 
165
 
166
begin
167
 
168
fsm_m:fsm port map(clk=>clk,rst=>rst,RegWrite=>RegWrite,PCSource=>PCSource,
169
          ALUSrcB=>ALUSrcB,ALUmux=>ALUmux,
170
                    instr_31_26=>instr_31_26,immed_addr=>immed_addr(5 downto 0),RegDst=>RegDst,
171
                         ALUOp=>No_u2,ALUSrcA=>ALUSrcA,MemRead=>MemRead,
172
                         MemWrite=>MemWrite,Mult_en=>Mult_en,IorD=>IorD,IRWrite=>IRWrite,PCWrite=>PCWrite,
173
                         EqNq=>EqNq,ALUsw=>No_u,RFmux=>RFmux,ALUop_sw=>ALUop_sw);
174
ALU_m:ALU port map(clk=>clk,rst=>rst,Mult_en=>Mult_en,sel_top=>sel_top,A_in=>A_wire,B_in=>B_wire,
175
          I=>I_wire,immed_addr=>immed_addr,
176
          ALUOp=>ALUop_sw,ALUmux=>ALUmux,From_i_op=>From_i_op,From_i_mux=>From_i_mux,
177
                         lui=>lui,Zero=>Zero,ALUSrcA=>ALUSrcA,ALUSrcB=>ALUSrcB,N=>N,M=>M,Hi_out=>Hi_out,
178
                         Lo_out=>Lo_out,Alu_out_exit=>Alu_out_exit,pass=>pass);
179
Imem_block_m:Imem_block port map(clk=>clk,rst=>rst,MemRead=>MemRead,PCWrite=>PCWrite,
180
                                 IRWrite=>IRWrite,rt=>rt,rd=>rd,rs=>rs,immed_addr=>immed_addr,
181
                                                                                        Opcode=>instr_31_26,npc=>npc,Err=>Err,N=>N,Ext_sz_c=>Ext_sz_c,
182
                                                                                        From_i_op=>From_i_op,From_i_mux=>From_i_mux,lui=>lui);
183
Reg_blog_m:Reg_block port map(Clk=>Clk,rst=>rst,vector_on=>vector_on,Reg_Write=>RegWrite,Reg_Imm_not=>RegDst,
184
           rs=>rs,rt=>rt,rd=>rd,Ext_sz_c=>Ext_sz_c,immed_addr=>immed_addr,Bus_W=>Bus_W,
185
                          A2Alu=>A_wire,B2Alu=>B_wire,I2Alu=>I_wire);
186
 
187
Dm_m:Dm port map(clk=>Clk,rst=>rst,Alu_in=>Alu_out_exit,MemWrite=>MemWrite,MemRead=>MemRead,
188
                 IorD=>IorD,MDR_in=>B_wire,MDR_out=>MDR_out);
189
 
190
Mux_out:Mux_out_block port map(clk=>clk,Zero_in=>Zero,EqNq=>EqNq,RFmux=>RFmux,Hi_in=>Hi_out,
191
                              Lo_in=>Lo_out,Alu_in=>Alu_out_exit,Mdr_fr_out=>MDR_out,
192
                                                                                RF_out=>Bus_W,From_N=>N,From_A=>A_wire,From_M=>M,PCSource=>PCSource,
193
                                                                        NPC_out=>npc);
194
process(clk)
195
begin
196
if (RISING_EDGE(clk))then
197
Bus_r <= Bus_W;
198
end if;
199
end process;
200
end Behavioral;
201
 

powered by: WebSVN 2.1.0

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