Stefan Schuermans
fixed decoding of M[FT]{HI|LO}
Stefan Schuermans commited 48bb600 at 2012-03-13 21:11:43
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.numeric_std.all;
USE work.mips_types.all;
ENTITY e_mips_decoder IS
PORT (
i_instr: IN std_logic_vector(31 DOWNTO 0);
o_reg_s: OUT std_logic_vector( 4 DOWNTO 0);
o_reg_t: OUT std_logic_vector( 4 DOWNTO 0);
o_reg_d: OUT std_logic_vector( 4 DOWNTO 0);
o_imm_a: OUT std_logic_vector( 4 DOWNTO 0);
o_imm_16: OUT std_logic_vector(15 DOWNTO 0);
o_imm_26: OUT std_logic_vector(25 DOWNTO 0);
o_op: OUT t_op;
o_link: OUT t_link;
o_cmp: OUT t_cmp;
o_alu: OUT t_alu;
o_imm: OUT t_imm;
o_ldst: OUT t_ldst
);
END ENTITY e_mips_decoder;
ARCHITECTURE a_mips_decoder OF e_mips_decoder IS
TYPE t_enc_type IS (enc_reg, enc_imm, enc_jmp);
SIGNAL s_opcode: std_logic_vector(5 DOWNTO 0);
SIGNAL s_ext_op: std_logic_vector(4 DOWNTO 0);
SIGNAL s_func: std_logic_vector(5 DOWNTO 0);
SIGNAL s_enc_type: t_enc_type;
BEGIN
s_opcode <= i_instr(31 DOWNTO 26);
s_ext_op <= i_instr(20 DOWNTO 16);
s_func <= i_instr( 5 DOWNTO 0);
p_enc_type: PROCESS(s_opcode)
BEGIN
CASE s_opcode IS
WHEN "000000" => s_enc_type <= enc_reg;
WHEN "000010" => s_enc_type <= enc_jmp;
WHEN "000011" => s_enc_type <= enc_jmp;
WHEN OTHERS => s_enc_type <= enc_imm;
END CASE;
END PROCESS p_enc_type;
p_reg_s: PROCESS(i_instr, s_enc_type)
BEGIN
CASE s_enc_type IS
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX