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

Subversion Repositories special_functions_unit

[/] [special_functions_unit/] [Open_source_SFU/] [log2_vhdl/] [parts/] [left_shifter.vhd] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 divadnauj
-- Nombre de archivo    : left_shifter.vhd
2
--      Titulo                          : desplazador a la izquierda 
3
-----------------------------------------------------------------------------   
4
-- Descripcion                  : Desplaza el dato a la izquierda segun el numero de
5
--                                                        desplazamientos indicado. El costado derecho se
6
--                                                        rellena con ceros. Segun el ancho del dato se calcula
7
--                                                        el total de desplazamientos y los bits del dato de salida:
8
--                                                                      DATA_BITS =23
9
--                                                                      i_data[22:0]
10
--                                                                      i_shifts[4:0]
11
--                                                                      o_dataShift[31:0]
12
--                                                        Para realizar el desplazamiento se utilizan multiplexores,
13
--                                                        siguiendo el ejemplo anterior: 32 multiplexores.
14
--                                                        
15
--              DATA_BITS               : Ancho del dato a desplazar
16
--      i_data                  : Dato a desplazar
17
--      i_shifts                        : Numero de desplazamientos
18
--      o_data                  : Dato desplazado
19
--
20
-----------------------------------------------------------------------------   
21
-- Universidad Pedagogica y Tecnologica de Colombia.
22
-- Facultad de ingenieria.
23
-- Escuela de ingenieria Electronica - extension Tunja.
24
-- 
25
-- Autor: Cristhian Fernando Moreno Manrique
26
-- Marzo 2020
27
-----------------------------------------------------------------------------   
28
library ieee;
29
        use ieee.std_logic_1164.all;
30
        use ieee.numeric_std.all;
31
        use work.log2_pkg.all;
32
 
33
 
34
entity left_shifter is
35
 
36
        generic (DATA_BITS                                      :               natural := 5);  -- Result[31:1] & cout
37
        port      (i_data                                               : in    std_logic_vector(DATA_BITS-1 downto 0);
38
                                i_shifts                                                : in    std_logic_vector(f_log2(DATA_BITS)-1 downto 0);
39
                                o_dataShift                                     : out std_logic_vector(DATA_BITS-1 downto 0));
40
end entity;
41
-----------------------------------------------------------------------------                           
42
 
43
architecture main of left_shifter is
44
        type shift_data is array(0 to 2**f_log2(DATA_BITS)-1) of std_logic_vector(2**f_log2(DATA_BITS)-1 downto 0);
45
        signal w_mx_input       : shift_data;
46
begin
47
 
48
 
49
        DN: process(i_data)
50
        begin
51
                for i in 0 to 2**f_log2(DATA_BITS)-1 loop
52
                        if(i<(DATA_BITS)) then
53
                                w_mx_input(0)(i) <= i_data(i);
54
                        else
55
                                w_mx_input(0)(i) <= '0';
56
                        end if;
57
                end loop;
58
        end process DN;
59
 
60
 
61
 
62
        MUXi: for i in 1 to 2**f_log2(DATA_BITS)-1 generate
63
                w_mx_input(i)<= w_mx_input(i-1)(2**f_log2(DATA_BITS)-2 downto 0) & '0';
64
        end generate MUXi;
65
 
66
 
67
 
68
        -- se genera una cantidad de mux igual al numero de bits del dato de entrada
69
 
70
        MX: for i in 0 to o_dataShift'left generate
71
                        -- mux_shifter1                                 : mux
72
                        -- generic map(SELECT_BITS      => i_shifts'length,
73
                                                        -- DATA_BITS            => 1)
74
                        -- port map       (i_data                       =>      w_mx_input(i),
75
                                                        -- i_select                     => i_shifts,
76
                                                        -- o_data                       => o_dataShift(i downto i));
77
                o_dataShift(i) <= w_mx_input(to_integer(unsigned(i_shifts)))(i);
78
 
79
        end generate MX;
80
 
81
end main;

powered by: WebSVN 2.1.0

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