Files
IEEE754Adder/ShiftLeft.vhd

81 lines
4.3 KiB
VHDL

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
use work.UTILS.ALL;
entity ShiftLeft48 is
port(
N : in std_logic_vector(47 downto 0);
PLACES : in std_logic_vector(8 downto 0);
RESULT : out std_logic_vector(47 downto 0)
);
end ShiftLeft48;
architecture ShiftLeftArch of ShiftLeft48 is
begin
shift_process: process (N, PLACES)
variable POSSIBLE_SHIFTS : ARRAY_OF_STD_LOGIC48;
begin
case PLACES is
when "000000000" => RESULT <= N( 47 downto 0 );
when "000000001" => RESULT <= N( 46 downto 0 ) & "0";
when "000000010" => RESULT <= N( 45 downto 0 ) & "00";
when "000000011" => RESULT <= N( 44 downto 0 ) & "000";
when "000000100" => RESULT <= N( 43 downto 0 ) & "0000";
when "000000101" => RESULT <= N( 42 downto 0 ) & "00000";
when "000000110" => RESULT <= N( 41 downto 0 ) & "000000";
when "000000111" => RESULT <= N( 40 downto 0 ) & "0000000";
when "000001000" => RESULT <= N( 39 downto 0 ) & "00000000";
when "000001001" => RESULT <= N( 38 downto 0 ) & "000000000";
when "000001010" => RESULT <= N( 37 downto 0 ) & "0000000000";
when "000001011" => RESULT <= N( 36 downto 0 ) & "00000000000";
when "000001100" => RESULT <= N( 35 downto 0 ) & "000000000000";
when "000001101" => RESULT <= N( 34 downto 0 ) & "0000000000000";
when "000001110" => RESULT <= N( 33 downto 0 ) & "00000000000000";
when "000001111" => RESULT <= N( 32 downto 0 ) & "000000000000000";
when "000010000" => RESULT <= N( 31 downto 0 ) & "0000000000000000";
when "000010001" => RESULT <= N( 30 downto 0 ) & "00000000000000000";
when "000010010" => RESULT <= N( 29 downto 0 ) & "000000000000000000";
when "000010011" => RESULT <= N( 28 downto 0 ) & "0000000000000000000";
when "000010100" => RESULT <= N( 27 downto 0 ) & "00000000000000000000";
when "000010101" => RESULT <= N( 26 downto 0 ) & "000000000000000000000";
when "000010110" => RESULT <= N( 25 downto 0 ) & "0000000000000000000000";
when "000010111" => RESULT <= N( 24 downto 0 ) & "00000000000000000000000";
when "000011000" => RESULT <= N( 23 downto 0 ) & "000000000000000000000000";
when "000011001" => RESULT <= N( 22 downto 0 ) & "0000000000000000000000000";
when "000011010" => RESULT <= N( 21 downto 0 ) & "00000000000000000000000000";
when "000011011" => RESULT <= N( 20 downto 0 ) & "000000000000000000000000000";
when "000011100" => RESULT <= N( 19 downto 0 ) & "0000000000000000000000000000";
when "000011101" => RESULT <= N( 18 downto 0 ) & "00000000000000000000000000000";
when "000011110" => RESULT <= N( 17 downto 0 ) & "000000000000000000000000000000";
when "000011111" => RESULT <= N( 16 downto 0 ) & "0000000000000000000000000000000";
when "000100000" => RESULT <= N( 15 downto 0 ) & "00000000000000000000000000000000";
when "000100001" => RESULT <= N( 14 downto 0 ) & "000000000000000000000000000000000";
when "000100010" => RESULT <= N( 13 downto 0 ) & "0000000000000000000000000000000000";
when "000100011" => RESULT <= N( 12 downto 0 ) & "00000000000000000000000000000000000";
when "000100100" => RESULT <= N( 11 downto 0 ) & "000000000000000000000000000000000000";
when "000100101" => RESULT <= N( 10 downto 0 ) & "0000000000000000000000000000000000000";
when "000100110" => RESULT <= N( 9 downto 0 ) & "00000000000000000000000000000000000000";
when "000100111" => RESULT <= N( 8 downto 0 ) & "000000000000000000000000000000000000000";
when "000101000" => RESULT <= N( 7 downto 0 ) & "0000000000000000000000000000000000000000";
when "000101001" => RESULT <= N( 6 downto 0 ) & "00000000000000000000000000000000000000000";
when "000101010" => RESULT <= N( 5 downto 0 ) & "000000000000000000000000000000000000000000";
when "000101011" => RESULT <= N( 4 downto 0 ) & "0000000000000000000000000000000000000000000";
when "000101100" => RESULT <= N( 3 downto 0 ) & "00000000000000000000000000000000000000000000";
when "000101101" => RESULT <= N( 2 downto 0 ) & "000000000000000000000000000000000000000000000";
when "000101110" => RESULT <= N( 1 downto 0 ) & "0000000000000000000000000000000000000000000000";
when "000101111" => RESULT <= N( 0 ) & "00000000000000000000000000000000000000000000000";
when others => RESULT <= "000000000000000000000000000000000000000000000000";
end case;
end process;
end ShiftLeftArch;