OpenCores
URL https://opencores.org/ocsvn/rv01_riscv_core/rv01_riscv_core/trunk

Subversion Repositories rv01_riscv_core

[/] [rv01_riscv_core/] [trunk/] [VHDL/] [RV01_shftu.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 madsilicon
-----------------------------------------------------------------
2
--                                                             --
3
-----------------------------------------------------------------
4
--                                                             --
5
-- Copyright (C) 2015 Stefano Tonello                          --
6
--                                                             --
7
-- This source file may be used and distributed without        --
8
-- restriction provided that this copyright statement is not   --
9
-- removed from the file and that any derivative work contains --
10
-- the original copyright notice and the associated disclaimer.--
11
--                                                             --
12
-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY         --
13
-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   --
14
-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   --
15
-- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      --
16
-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         --
17
-- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    --
18
-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   --
19
-- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        --
20
-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  --
21
-- LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  --
22
-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  --
23
-- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         --
24
-- POSSIBILITY OF SUCH DAMAGE.                                 --
25
--                                                             --
26
-----------------------------------------------------------------
27
 
28
---------------------------------------------------------
29
-- RV01 shift unit
30
---------------------------------------------------------
31
 
32
library IEEE;
33
use IEEE.std_logic_1164.all;
34
use IEEE.numeric_std.all;
35
 
36
library WORK;
37
use WORK.RV01_CONSTS_PKG.all;
38
use WORK.RV01_TYPES_PKG.all;
39
use WORK.RV01_FUNCS_PKG.all;
40
use WORK.RV01_ARITH_PKG.all;
41
 
42
entity RV01_SHFTU is
43
  port(
44
    CTRL_i : in SHF_CTRL;
45
    SI_i : in SDWORD_T;
46
    SHFT_i : in unsigned(5-1 downto 0);
47
    SU_i : in std_logic;
48
 
49
    SO_o : out SDWORD_T
50
  );
51
end RV01_SHFTU;
52
 
53
architecture ARC of RV01_SHFTU is
54
 
55
  signal SHFT : SHORT_SHIFT_T;
56
  signal LSO : SDWORD_T;
57
  signal RSOS : SDWORD_T;
58
  signal RSOU : SDWORD_T;
59
 
60
begin
61
 
62
  -- get shift amount
63
  SHFT <= to_integer(SHFT_i);
64
 
65
  -- 32-bit left shifter
66
  LSO <= shift_left32(SI_i,SHFT);
67
 
68
  -- 32-bit signed right shifter
69
  RSOS <= shift_right32(SI_i,SHFT);
70
 
71
  -- 32-bit unsigned right shifter
72
  RSOU <= to_signed(shift_right32(to_unsigned(SI_i),SHFT));
73
 
74
  SO_o <=
75
    LSO when (CTRL_i = SC_SHL) else
76
    RSOS when (CTRL_i = SC_SHR and SU_i = '1') else
77
    RSOU;
78
 
79
end ARC;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.