0c7836895bd4eafb98a20972e7fa33185a6e39f8
Stefan Schuermans separated shifter from ALU

Stefan Schuermans authored 12 years ago

1) LIBRARY ieee;
2) USE ieee.std_logic_1164.all;
3) USE ieee.numeric_std.all;
4) USE work.mips_types.all;
5) 
6) ENTITY e_mips_shifter IS
7)     PORT (
8)         i_arith: IN  std_logic;
9)         i_left:  IN  std_logic;
10)         i_val:   IN  std_logic_vector(31 DOWNTO 0);
11)         i_num:   IN  std_logic_vector(31 DOWNTO 0);
12)         o_val:   OUT std_logic_vector(31 DOWNTO 0)
13)     );
14) END ENTITY e_mips_shifter;
15) 
16) ARCHITECTURE a_mips_shifter OF e_mips_shifter IS
17) 
18)     SIGNAL s_fill: std_logic;
19) 
20)     FUNCTION l_shift(b:    std_logic;
21)                      val:  std_logic_vector(31 DOWNTO 0);
22)                      n:    natural) RETURN std_logic_vector IS
23)         VARIABLE v_fill: std_logic_vector(31 DOWNTO 0);
24)     BEGIN
25)         v_fill := (OTHERS => '0');
26)         IF b = '1' THEN
27)             RETURN val(31 - n DOWNTO 0) & v_fill(n - 1 DOWNTO 0);
28)         ELSE
29)             RETURN val;
30)         END IF;
31)     END FUNCTION l_shift;
32) 
33)     FUNCTION r_shift(b:    std_logic;
34)                      val:  std_logic_vector(31 DOWNTO 0);
35)                      fill: std_logic;
36)                      n:    natural) RETURN std_logic_vector IS
37)         VARIABLE v_fill: std_logic_vector(31 DOWNTO 0);
38)     BEGIN
39)         v_fill := (OTHERS => fill);
40)         IF b = '1' THEN
41)             RETURN v_fill(n - 1 DOWNTO 0) & val(31 DOWNTO n);
42)         ELSE
43)             RETURN val;
44)         END IF;
45)     END FUNCTION r_shift;
46) 
47) BEGIN
48) 
Stefan Schuermans fix unused signals

Stefan Schuermans authored 12 years ago

49)     s_fill <= i_arith AND i_val(31);
Stefan Schuermans separated shifter from ALU

Stefan Schuermans authored 12 years ago

50) 
Stefan Schuermans fix sensitivity list

Stefan Schuermans authored 12 years ago

51)     p_shift: PROCESS(i_left, i_val, i_num, s_fill)