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

Subversion Repositories minimips_superscalar

[/] [minimips_superscalar/] [tags/] [P1/] [sources/] [pps_mem.vhd] - Blame information for rev 21

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 21 mcafruni
------------------------------------------------------------------------------------
2
--                                                                                --
3
--    Copyright (c) 2004, Hangouet Samuel                                         --
4
--                  , Jan Sebastien                                               --
5
--                  , Mouton Louis-Marie                                          --
6
--                  , Schneider Olivier     all rights reserved                   --
7
--                                                                                --
8
--    This file is part of miniMIPS.                                              --
9
--                                                                                --
10
--    miniMIPS is free software; you can redistribute it and/or modify            --
11
--    it under the terms of the GNU General Public License as published by        --
12
--    the Free Software Foundation; either version 2 of the License, or           --
13
--    (at your option) any later version.                                         --
14
--                                                                                --
15
--    miniMIPS is distributed in the hope that it will be useful,                 --
16
--    but WITHOUT ANY WARRANTY; without even the implied warranty of              --
17
--    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               --
18
--    GNU General Public License for more details.                                --
19
--                                                                                --
20
--    You should have received a copy of the GNU General Public License           --
21
--    along with miniMIPS; if not, write to the Free Software                     --
22
--    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA   --
23
--                                                                                --
24
------------------------------------------------------------------------------------
25
 
26
 
27
-- If you encountered any problem, please contact :
28
--
29
--   lmouton@enserg.fr
30
--   oschneid@enserg.fr
31
--   shangoue@enserg.fr
32
--
33
 
34
 
35
 
36
--------------------------------------------------------------------------
37
--                                                                      --
38
--                                                                      --
39
--             Processor miniMIPS : Memory access stage                 --
40
--                                                                      --
41
--                                                                      --
42
--                                                                      --
43
-- Authors : Hangouet  Samuel                                           --
44
--           Jan       Sébastien                                        --
45
--           Mouton    Louis-Marie                                      --
46
--           Schneider Olivier                                          --
47
--                                                                      --
48
--                                                          june 2003   --
49
--------------------------------------------------------------------------
50
 
51
 
52
 
53
library IEEE;
54
use IEEE.std_logic_1164.all;
55
 
56
library work;
57
use work.pack_mips.all;
58
 
59
entity pps_mem is
60
port
61
(
62
    clock : in std_logic;
63
    clock2 : in std_logic;
64
    reset : in std_logic;
65
    stop_all : in std_logic;             -- Unconditionnal locking of the outputs
66
    stop_all2 : in std_logic;
67
    clear : in std_logic;                -- Clear the pipeline stage
68
 
69
    -- Interface with the control bus
70
    MTC_data : out bus32;                -- Data to write in memory
71
    MTC_adr : out bus32;                 -- Address for memory
72
    MTC_r_w : out std_logic;             -- Read/Write in memory
73
    MTC_req : out std_logic;             -- Request access to memory
74
    CTM_data : in bus32;                 -- Data from memory
75
 
76
    -- Datas from Execution stage
77
    EX_adr : in bus32;                   -- Instruction address
78
    EX_data_ual : in bus32;              -- Result of alu operation
79
    EX_adresse : in bus32;               -- Result of the calculation of the address
80
    EX_adresse_p1p2 : in bus32;        -- resultado do calculo do endereco do desvio + 4 para pipe 2
81
    -- *** nao tinha essa entrada no original, so tinha a saida no EX *** 
82
    EX_bra_confirm : in bus1;            -- Confirmacao do branch no pipe 1 (26-07-18)
83
    -- ******************
84
    EX_adr_reg_dest : in adr_reg_type;   -- Destination register address for the result
85
    EX_ecr_reg : in std_logic;           -- Effective writing of the result
86
    EX_op_mem : in std_logic;            -- Memory operation needed
87
    EX_r_w : in std_logic;               -- Type of memory operation (read or write)
88
    EX_exc_cause : in bus32;             -- Potential exception cause
89
    EX_level : in level_type;            -- Availability stage for the result for bypassing (Estágio de disponibilidade para o resultado de bypassing)
90
    EX_it_ok : in std_logic;             -- Allow hardware interruptions
91
 
92
    -- Synchronous outputs for bypass unit
93
    MEM_adr : out bus32;                 -- Instruction address
94
    MEM_adr_reg_dest : out adr_reg_type; -- Destination register address
95
    MEM_ecr_reg : out std_logic;         -- Writing of the destination register
96
    MEM_data_ecr : out bus32;            -- Data to write (from alu or memory)
97
    MEM_exc_cause : out bus32;           -- Potential exception cause
98
    MEM_level : out level_type;          -- Availability stage for the result for bypassing (Estágio de disponibilidade para o resultado de bypassing)
99
    MEM_it_ok : out std_logic;           -- Allow hardware interruptions
100
 
101
         --modificação
102
    -- Interface with the control bus
103
    MTC_data2 : out bus32;                -- Data to write in memory
104
    MTC_adr2 : out bus32;                 -- Address for memory
105
    MTC_r_w2 : out std_logic;             -- Read/Write in memory
106
    MTC_req2 : out std_logic;             -- Request access to memory
107
    CTM_data2 : in bus32;                 -- Data from memory
108
 
109
    -- Datas from Execution 2 stage
110
    EX_adr2 : in bus32;                   -- Instruction address
111
    EX_data_ual2 : in bus32;              -- Result of alu operation
112
    EX_adresse2 : in bus32;               -- Result of the calculation of the address
113
    EX_adresse_p2p1 : in bus32;        -- resultado do calculo do endereco do desvio + 4 para pipe 1
114
    -- *** nao tinha essa entrada no original, so tinha a saida no EX2 ***
115
    EX_bra_confirm2 : in bus1;            -- Confirmacao do branch no pipe 2 (26-07-18)
116
    -- ******************
117
    EX_adr_reg_dest2 : in adr_reg_type;   -- Destination register address for the result
118
    EX_ecr_reg2 : in std_logic;           -- Effective writing of the result
119
    EX_op_mem2 : in std_logic;            -- Memory operation needed
120
    EX_r_w2 : in std_logic;               -- Type of memory operation (read or write)
121
    EX_exc_cause2 : in bus32;             -- Potential exception cause
122
    EX_level2 : in level_type;            -- Availability stage for the result for bypassing (Estágio de disponibilidade para o resultado de bypassing)
123
    EX_it_ok2 : in std_logic;             -- Allow hardware interruptions
124
 
125
    -- Synchronous outputs for bypass unit
126
    MEM_adr2 : out bus32;                 -- Instruction address
127
    MEM_adr_reg_dest2 : out adr_reg_type; -- Destination register address
128
    MEM_ecr_reg2 : out std_logic;         -- Writing of the destination register
129
    MEM_data_ecr2 : out bus32;            -- Data to write (from alu or memory)
130
    MEM_exc_cause2 : out bus32;           -- Potential exception cause
131
    MEM_level2 : out level_type;          -- Availability stage for the result for bypassing(Estágio de disponibilidade para o resultado de bypassing)
132
    MEM_it_ok2 : out std_logic            -- Allow hardware interruptions
133
);
134
end pps_mem;
135
 
136
 
137
architecture rtl of pps_mem is
138
 
139
    signal tmp_data_ecr  : bus32;         -- Selection of the data source (memory or alu)
140
    signal tmp_data_ecr2 : bus32;         -- Selection of the data source (memory or alu)
141
    signal sel_MTC       : bus2;
142
 
143
begin
144
    sel_MTC  <= EX_bra_confirm & EX_bra_confirm2;
145
 
146
    with sel_MTC select
147
        MTC_adr <= EX_adresse_p2p1 when "01",
148
                   EX_adresse  when others;
149
 
150
--    with sel_MTC select
151
--      MTC_r_w <= EX_r_w2 when "01",
152
--                 EX_r_w  when others;
153
--
154
--    with sel_MTC select
155
--      MTC_req <= EX_op_mem2 and not clear when "01",
156
--                 EX_op_mem  and not clear  when others;
157
--
158
--    with sel_MTC select
159
--      MTC_data <= EX_data_ual2 when "01",
160
--                   EX_data_ual when others;
161
 
162
    with sel_MTC select
163
        MTC_adr2 <= EX_adresse_p1p2 when "10",
164
                    EX_adresse2 when others;
165
 
166
--    with sel_MTC select
167
--      MTC_r_w2 <= EX_r_w  when "10",
168
--                  EX_r_w2 when others;
169
--
170
--    with sel_MTC select
171
--      MTC_req2 <= EX_op_mem and not clear when "10",
172
--                  EX_op_mem2  and not clear  when others;
173
--
174
--    with sel_MTC select
175
--      MTC_data2 <= EX_data_ual  when "10",
176
--                   EX_data_ual2 when others;
177
    -- Bus controler connexions
178
--    MTC_adr <= EX_adresse;                -- Connexion of the address 
179
    MTC_r_w <= EX_r_w;                    -- Connexion of R/W
180
    MTC_data <= EX_data_ual;                -- Connexion of the data bus
181
    MTC_req <= EX_op_mem and not clear;   -- Connexion of the request (if there is no clearing of the pipeline)
182
    -- Bus controler connexions 2nd pipe
183
--    MTC_adr2 <= EX_adresse2;              -- Connexion of the address 
184
    MTC_r_w2 <= EX_r_w2;                  -- Connexion of R/W
185
    MTC_data2 <= EX_data_ual2;              -- Connexion of the data bus
186
    MTC_req2 <= EX_op_mem2 and not clear; -- Connexion of the request (if there is no clearing of the pipeline)
187
 
188
    -- Preselection of the data source for the outputs
189
    tmp_data_ecr <= CTM_data when EX_op_mem = '1' else EX_data_ual;
190
    tmp_data_ecr2 <= CTM_data2 when EX_op_mem2 = '1' else EX_data_ual2; --(modificação) para EX2 
191
 
192
    -- Set the synchronous outputs
193
    process (clock)
194
    begin
195
        if rising_edge(clock) then
196
            if reset = '1' then
197
                MEM_adr  <= (others => '0');
198
                MEM_adr_reg_dest <= (others => '0');
199
                MEM_ecr_reg <= '0';
200
                MEM_data_ecr <= (others => '0');
201
                MEM_exc_cause <= IT_NOEXC;
202
                MEM_level <= LVL_DI;
203
                MEM_it_ok <= '0';
204
            elsif stop_all = '0' then
205
                if clear = '1' then -- Clear the stage
206
                    MEM_adr <= EX_adr;
207
                    MEM_adr_reg_dest <= (others => '0');
208
                    MEM_ecr_reg <= '0';
209
                    MEM_data_ecr <= (others => '0');
210
                    MEM_exc_cause <= IT_NOEXC;
211
                    MEM_level <= LVL_DI;
212
                    MEM_it_ok <= '0';
213
                else -- Normal evolution 
214
                    MEM_adr <= EX_adr;
215
                    MEM_adr_reg_dest <= EX_adr_reg_dest;
216
                    MEM_ecr_reg <= EX_ecr_reg;
217
                    MEM_data_ecr <= tmp_data_ecr;
218
                    MEM_exc_cause <= EX_exc_cause;
219
                    MEM_level <= EX_level;
220
                    MEM_it_ok <= EX_it_ok;
221
                end if;
222
            end if;
223
        end if;
224
    end process;
225
 
226
    process (clock2)
227
    begin
228
        if rising_edge(clock2) then
229
            if reset = '1' then
230
                MEM_adr2  <= (others => '0');
231
                MEM_adr_reg_dest2 <= (others => '0');
232
                MEM_ecr_reg2 <= '0';
233
                MEM_data_ecr2 <= (others => '0');
234
                MEM_exc_cause2 <= IT_NOEXC;
235
                MEM_level2 <= LVL_DI;
236
                MEM_it_ok2 <= '0';
237
            elsif stop_all2 = '0' then
238
                if clear = '1' then -- Clear the stage
239
                    MEM_adr2 <= EX_adr2;
240
                    MEM_adr_reg_dest2 <= (others => '0');
241
                    MEM_ecr_reg2 <= '0';
242
                    MEM_data_ecr2 <= (others => '0');
243
                    MEM_exc_cause2 <= IT_NOEXC;
244
                    MEM_level2 <= LVL_DI;
245
                    MEM_it_ok2 <= '0';
246
                else -- Normal evolution 
247
                    MEM_adr2 <= EX_adr2;
248
                    MEM_adr_reg_dest2 <= EX_adr_reg_dest2;
249
                    MEM_ecr_reg2 <= EX_ecr_reg2;
250
                    MEM_data_ecr2 <= tmp_data_ecr2;
251
                    MEM_exc_cause2 <= EX_exc_cause2;
252
                    MEM_level2 <= EX_level2;
253
                    MEM_it_ok2 <= EX_it_ok2;
254
                end if;
255
            end if;
256
        end if;
257
 end process;
258
 
259
end rtl;

powered by: WebSVN 2.1.0

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