displacement
authorStefan <stefan@ubuntu.ubuntu-domain>
Mon, 15 Nov 2010 12:53:30 +0000 (13:53 +0100)
committerStefan <stefan@ubuntu.ubuntu-domain>
Mon, 15 Nov 2010 12:53:30 +0000 (13:53 +0100)
cpu/src/common_pkg.vhd
cpu/src/decoder_b.vhd

index 0e76f83f8e7e26f44b19fe62a9a3a87824026107..3d93390472a254249764beca21b2ade7fc98347b 100755 (executable)
@@ -73,8 +73,6 @@ package common_pkg is
                reg_src2_addr : std_logic_vector(REG_ADDR_WIDTH-1 downto 0);
 
                immediate : std_logic_vector(WORD_WIDTH-1 downto 0);
---             immediate_set : std_logic;
-               displacement : std_logic_vector(DISPL_WIDTH-1 downto 0);
 
                jmptype : std_logic_vector(1 downto 0);
 
index 2585165aca1792ea8ce914980488aff231d73ab0..b0ae0dd787eba34a5effccd7011d6ec2684fafa0 100644 (file)
@@ -25,7 +25,6 @@ begin
        instr_s.reg_src2_addr := (others => '0');
 
        instr_s.immediate := (others => '0');
-       instr_s.displacement := (others => '0');
        instr_s.jmptype := (others => '0');
        instr_s.high_low := '0';
        instr_s.fill := '0';
@@ -215,7 +214,6 @@ begin
 --     when "01110" =>         --ldw
                instr_s.reg_dest_addr := instruction(22 downto 19);
                instr_s.reg_src1_addr := instruction(18 downto 15);
-               instr_s.displacement(14 downto 0) := instruction(14 downto 0);
                instr_s.immediate(15 downto 0) := instruction(18 downto 3);
                instr_s.signext := instruction(2);
                instr_s.high_low := instruction(1);
@@ -224,6 +222,8 @@ begin
                        if (instr_s.signext = '1' and instr_s.immediate(11) = '1') then
                                instr_s.immediate(31 downto 16) := (others => '1');
                        end if;
+                       instr_s.immediate(14 downto 0) := instruction(14 downto 0);
+                       instr_s.immediate(WORD_WIDTH-1 downto 15) := (others => '0');
                        instr_s.op_detail(IMM_OPT) := '1';
                end if;
        end if;
@@ -258,7 +258,7 @@ begin
        --when "01111" =>               --stw
                instr_s.reg_src1_addr := instruction(22 downto 19);     -- register value
                instr_s.reg_src2_addr := instruction(18 downto 15);     -- mem addr
-               instr_s.displacement(14 downto 0) := instruction(14 downto 0);
+               instr_s.immediate(14 downto 0) := instruction(14 downto 0);
        end if;
 
 --     when "10001" =>         --sth