diff --git a/lib/CPUs/MIPS/src/core/mips_pipeline.vhd b/lib/CPUs/MIPS/src/core/mips_pipeline.vhd index 987dd9d..a3d9edf 100644 --- a/lib/CPUs/MIPS/src/core/mips_pipeline.vhd +++ b/lib/CPUs/MIPS/src/core/mips_pipeline.vhd @@ -260,9 +260,9 @@ proc_stage_reset: end process; proc_stage_pc: - process(pc, c0_ctrl_in) + process(pc) begin - if pc.is_branch then + if pc.branch_take = '1' then pc.curr <= pc.pc_branch after 2 ns; else pc.curr <= pc.nxt after 2 ns; @@ -310,25 +310,19 @@ proc_stage_branch: process(clk_2) begin if rising_edge(clk_2) and branch_ce = '1' then - pc.is_branch <= false; + pc.branch_take <= '0'; if EX_stage.ctrl.branch = '1' then case EX_stage.ctrl.bc_src is when bc_eq_ne => - if (EX_stage.ctrl.bc_not xor bcu_flags.eq) = '1' then - pc.is_branch <= true; - end if; + pc.branch_take <= EX_stage.ctrl.bc_not xor bcu_flags.eq; when bc_lez_gtz => - if (EX_stage.ctrl.bc_not xor (bcu_flags.eq or bcu_flags.ltz)) = '1' then - pc.is_branch <= true; - end if; + pc.branch_take <= EX_stage.ctrl.bc_not xor (bcu_flags.eq or bcu_flags.ltz); when bc_ltz_gez => - if (EX_stage.ctrl.bc_not xor bcu_flags.ltz) = '1' then - pc.is_branch <= true; - end if; + pc.branch_take <= EX_stage.ctrl.bc_not xor bcu_flags.ltz; when others => null; end case; diff --git a/lib/CPUs/MIPS/src/core/mips_types.vhd b/lib/CPUs/MIPS/src/core/mips_types.vhd index 915a46e..b4565a5 100644 --- a/lib/CPUs/MIPS/src/core/mips_types.vhd +++ b/lib/CPUs/MIPS/src/core/mips_types.vhd @@ -160,7 +160,7 @@ package mips_types is last : word_t; nxt : word_t; pc_branch : word_t; - is_branch : boolean; + branch_take : std_logic; end record; type alu_outsel_t is