Stefan Schuermans commited on 2012-02-16 20:09:51
Showing 1 changed files, with 10 additions and 4 deletions.
... | ... |
@@ -20,11 +20,12 @@ END ENTITY e_mips_core; |
20 | 20 |
ARCHITECTURE a_mips_core OF e_mips_core IS |
21 | 21 |
|
22 | 22 |
SIGNAL s_stall: std_logic; |
23 |
+ SIGNAL r_stall_reset: std_logic := '1'; |
|
23 | 24 |
SIGNAL s_stall_data_rd: std_logic; |
24 | 25 |
|
25 | 26 |
SIGNAL r_pc: std_logic_vector(31 DOWNTO 0) := X"FFFFFFFC"; |
26 | 27 |
SIGNAL n_pc: std_logic_vector(31 DOWNTO 0); |
27 |
- |
|
28 |
+ SIGNAL r_instr_data: std_logic_vector(31 DOWNTO 0) := X"00000000"; |
|
28 | 29 |
SIGNAL s_instr: std_logic_vector(31 DOWNTO 0); |
29 | 30 |
|
30 | 31 |
SIGNAL n_reg_s: std_logic_vector( 4 DOWNTO 0); |
... | ... |
@@ -184,7 +185,7 @@ ARCHITECTURE a_mips_core OF e_mips_core IS |
184 | 185 |
|
185 | 186 |
BEGIN |
186 | 187 |
|
187 |
- s_stall <= i_stall OR s_stall_data_rd OR s_mul_busy OR s_div_busy; |
|
188 |
+ s_stall <= i_stall OR r_stall_reset OR s_stall_data_rd OR s_mul_busy OR s_div_busy; |
|
188 | 189 |
|
189 | 190 |
decoder: e_mips_decoder |
190 | 191 |
PORT MAP ( |
... | ... |
@@ -259,22 +260,27 @@ BEGIN |
259 | 260 |
p_sync_pc: PROCESS(rst, clk) |
260 | 261 |
BEGIN |
261 | 262 |
IF rst = '1' THEN |
263 |
+ r_stall_reset <= '1'; |
|
262 | 264 |
r_pc <= X"FFFFFFFC"; |
265 |
+ r_instr_data <= X"00000000"; |
|
263 | 266 |
ELSIF rising_edge(clk) THEN |
267 |
+ r_stall_reset <= '0'; |
|
264 | 268 |
IF s_stall = '0' THEN |
265 | 269 |
r_pc <= n_pc; |
270 |
+ r_instr_data <= i_instr_data; |
|
266 | 271 |
END IF; |
267 | 272 |
END IF; |
268 | 273 |
END PROCESS p_sync_pc; |
269 | 274 |
|
270 |
- p_fetch: PROCESS(s_stall, r_pc, n_pc, i_instr_data) |
|
275 |
+ p_fetch: PROCESS(s_stall, r_pc, n_pc, r_instr_data, i_instr_data) |
|
271 | 276 |
BEGIN |
272 | 277 |
IF s_stall = '1' THEN |
273 | 278 |
o_instr_addr <= r_pc; |
279 |
+ s_instr <= r_instr_data; |
|
274 | 280 |
ELSE |
275 | 281 |
o_instr_addr <= n_pc; |
276 |
- END IF; |
|
277 | 282 |
s_instr <= i_instr_data; |
283 |
+ END IF; |
|
278 | 284 |
END PROCESS p_fetch; |
279 | 285 |
|
280 | 286 |
p_sync_dec2ex: PROCESS(rst, clk) |
281 | 287 |