soft reset
[calu.git] / cpu / src / fetch_stage_b.vhd
index 6a6380c838532efc7ec592e85b7a9cf3a79cc7fa..f01bad8f68c4b3b9f3fc2b1700f6e56c0c7812d4 100644 (file)
@@ -52,20 +52,27 @@ begin
 
        if (reset = RESET_VALUE) then
                instr_r_addr <= (others => '0');
-               rom_ram <= ROM_USE;     
+               rom_ram <= ROM_USE;
+               led2 <= '0';
        elsif rising_edge(clk) then
                instr_r_addr <= instr_r_addr_nxt;               
                rom_ram <= rom_ram_nxt;
+               led2 <= rom_ram; --rom_ram_nxt;
        end if;
        
 end process; 
 
 
-asyn: process(reset, instr_r_addr, jump_result, prediction_result, branch_prediction_bit, alu_jump_bit, instr_rd_data, rom_ram, instr_rd_data_rom, int_req)
-
+asyn: process(reset, s_reset, instr_r_addr, jump_result, prediction_result, branch_prediction_bit, alu_jump_bit, instr_rd_data, rom_ram, instr_rd_data_rom, int_req)
+variable instr_pc  : instruction_addr_t;
 begin
        rom_ram_nxt <= rom_ram;
-
+       
+       if (s_reset = RESET_VALUE) then
+               rom_ram_nxt <= RAM_USE;
+               instr_r_addr_nxt <= (others => '0');
+       end if;
+       
        case rom_ram is
                when ROM_USE =>
                        instruction <= instr_rd_data_rom;
@@ -74,13 +81,15 @@ begin
                when others => 
                        instruction <= x"F0000000";
        end case;
-       instr_r_addr_nxt <= std_logic_vector(unsigned(instr_r_addr) + 1);
+       instr_pc := std_logic_vector(unsigned(instr_r_addr) + 1);
+       instr_r_addr_nxt <= instr_pc;
 
-       if (instr_r_addr(ROM_INSTR_ADDR_WIDTH) = '1' and rom_ram = ROM_USE) then
+       if (instr_pc = x"0000007f" and rom_ram = ROM_USE) then
                rom_ram_nxt <= RAM_USE;
-               instr_r_addr_nxt <= (others => '0');
+               -- TODO: wenn genau auf adresse 0 im RAM ein br steht kracht es... :/
+               instr_r_addr_nxt <= x"00000000";
        end if;
-       
+
        if (reset = RESET_VALUE) then
                instr_r_addr_nxt <= (others => '0');
        end if;
@@ -120,7 +129,5 @@ begin
 
 end process;
 
-led2 <= rom_ram;
-
 end behav;