Stefan Schuermans
if not comparing, jump is unconditional, so compare must return true
Stefan Schuermans commited a077c55 at 2012-02-10 22:45:59
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.numeric_std.all;
USE work.mips_types.all;
ENTITY e_mips_cmp IS
PORT (
i_cmp: IN t_cmp;
i_op1: IN std_logic_vector(31 DOWNTO 0);
i_op2: IN std_logic_vector(31 DOWNTO 0);
o_res: OUT std_logic
);
END ENTITY e_mips_cmp;
ARCHITECTURE a_mips_cmp OF e_mips_cmp IS
BEGIN
p_cmp: PROCESS(i_cmp, i_op1, i_op2)
VARIABLE v_op1_s: signed(31 DOWNTO 0);
VARIABLE v_op2_s: signed(31 DOWNTO 0);
VARIABLE v_res: boolean;
BEGIN
v_op1_s := signed(i_op1);
v_op2_s := signed(i_op2);
CASE i_cmp IS
WHEN cmp_eq => v_res := i_op1 = i_op2;
WHEN cmp_gez => v_res := v_op1_s >= 0;
WHEN cmp_gtz => v_res := v_op1_s > 0;
WHEN cmp_lez => v_res := v_op1_s <= 0;
WHEN cmp_ltz => v_res := v_op1_s < 0;
WHEN cmp_ne => v_res := i_op1 /= i_op2;
WHEN OTHERS => v_res := true;
END CASE;
IF v_res THEN
o_res <= '1';
ELSE
o_res <= '0';
END IF;
END PROCESS p_cmp;
END ARCHITECTURE a_mips_cmp;
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX