c2b040193a777c09bdc595c95492b57a2521db87
Stefan Schuermans added file headers

Stefan Schuermans authored 12 years ago

1) -- MIPS I system
2) -- Copyright 2011-2012 Stefan Schuermans <stefan@schuermans.info>
3) -- Copyleft GNU public license V2 or later
4) --          http://www.gnu.org/copyleft/gpl.html
5) 
Stefan Schuermans separated shifter from ALU

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

55) 
Stefan Schuermans fix sensitivity list

Stefan Schuermans authored 12 years ago

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