Sei sulla pagina 1di 11

www.btechzone.

com

VHDL CODE FOR BARREL SHIFTER:

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

---- Uncomment the following library declaration if instantiating

---- any Xilinx primitives in this code.

--library UNISIM;

--use UNISIM.VComponents.all;

entity barrel_shft is

Port ( clk : in STD_LOGIC;

rst : in STD_LOGIC;

--din : in STD_LOGIC_VECTOR (15 downto 0);

cond1 : in STD_LOGIC;

cond2 : in STD_LOGIC_VECTOR (1 downto 0);

cond3 : in STD_LOGIC_VECTOR (3 downto 0);

dout : out STD_LOGIC_VECTOR (15 downto 0));

end barrel_shft;

www.btechzone.com
www.btechzone.com

architecture Behavioral of barrel_shft is

signal i: std_logic_vector(15 downto 0);

signal din : STD_LOGIC_VECTOR (15 downto 0):="0011001111001100";

signal sclk: std_logic:='0';

signal logical:std_logic_vector(3 downto 0);

signal cnt:std_logic_vector(2 downto 0):="000";

begin

process(rst,clk)

begin

if(rst='1') then

i<=din;

elsif(clk'event and clk='1') then

if(cond1='1') then

case cond2 is

when "00" =>

case cond3 is

www.btechzone.com
www.btechzone.com

when "0000" => i<=i;

when "0001" => i<=i(14 downto 0)& '0';

when "0010" => i<=i(13 downto 0) & "00";

when "0011" => i<=i(12 downto 0) & "000";

when "0100" => i<=i(11 downto 0) & "0000";

when "0101" => i<=i(10 downto 0) & "00000";

when "0110" => i<=i(9 downto 0) & "000000";

when "0111" => i<=i(8 downto 0) & "0000000";

when "1000" => i<=i(7 downto 0) & "00000000";

when "1001" => i<=i(6 downto 0) & "000000000";

when "1010" => i<=i(5 downto 0) & "0000000000";

when "1011" => i<=i(4 downto 0) & "00000000000";

when "1100" => i<=i(3 downto 0) & "000000000000";

when "1101" => i<=i(2 downto 0) & "0000000000000";

when "1110" => i<=i(1 downto 0) & "00000000000000";

when "1111" => i<=i(0) & "000000000000000";

when others => i<=i;

end case;

when "01" =>

www.btechzone.com
www.btechzone.com

case cond3 is

when "0000" => i<=i;

when "0001" => i<= '0' & i(15 downto 1);

when "0010" => i<= "00" & i(15 downto 2);

when "0011" => i<="000" & i(15 downto 3);

when "0100" => i<="0000" & i(15 downto 4) ;

when "0101" => i<="00000" & i(15 downto 5) ;

when "0110" => i<="000000" & i(15 downto 6) ;

when "0111" => i<="0000000" & i(15 downto 7) ;

when "1000" => i<="00000000" & i(15 downto 8) ;

when "1001" => i<="000000000" & i(15 downto 9) ;

when "1010" => i<="0000000000" & i(15 downto 10);

when "1011" => i<="00000000000" & i(15 downto 11);

when "1100" => i<="000000000000" & i(15 downto 12) ;

when "1101" => i<="0000000000000" & i(15 downto 13) ;

when "1110" => i<="00000000000000" & i(15 downto 14) ;

when "1111" => i<="000000000000000" &i(15) ;

when others => i<=i;

end case;

www.btechzone.com
www.btechzone.com

when "10" =>

case cond3 is

when "0000" => i<=i;

when "0001" => i<=i(14 downto 0)& i(15);

when "0010" => i<=i(13 downto 0) & i(15 downto 14);

when "0011" => i<=i(12 downto 0) & i(15 downto 13);

when "0100" => i<=i(11 downto 0) & i(15 downto 12);

when "0101" => i<=i(10 downto 0) & i(15 downto 11);

when "0110" => i<=i(9 downto 0) & i(15 downto 10);

when "0111" => i<=i(8 downto 0) & i(15 downto 9);

when "1000" => i<=i(7 downto 0) & i(15 downto 8);

when "1001" => i<=i(6 downto 0) & i(15 downto 7);

when "1010" => i<=i(5 downto 0) & i(15 downto 6);

when "1011" => i<=i(4 downto 0) & i(15 downto 5);

when "1100" => i<=i(3 downto 0) & i(15 downto 4);

when "1101" => i<=i(2 downto 0) & i(15 downto 3);

when "1110" => i<=i(1 downto 0) & i(15 downto 2);

when "1111" => i<=i(0) & i(15 downto 1);

when others => i<=i;

end case;

www.btechzone.com
www.btechzone.com

when "11" =>

case cond3 is

when "0000" => i<=i;

when "0001" => i<=i(0)& i(15 downto 1);

when "0010" => i<=i(1 downto 0) & i(15 downto 2);

when "0011" => i<=i(2 downto 0) & i(15 downto 3);

when "0100" => i<=i(3 downto 0) & i(15 downto 4);

when "0101" => i<=i(4 downto 0) & i(15 downto 5);

when "0110" => i<=i(5 downto 0) & i(15 downto 6);

when "0111" => i<=i(6 downto 0) & i(15 downto 7);

when "1000" => i<=i(7 downto 0) & i(15 downto 8);

when "1001" => i<=i(8 downto 0) & i(15 downto 9);

when "1010" => i<=i(9 downto 0) & i(15 downto 10);

when "1011" => i<=i(10 downto 0) & i(15 downto 11);

when "1100" => i<=i(11 downto 0) & i(15 downto 12);

when "1101" => i<=i(12 downto 0) & i(15 downto 13);

when "1110" => i<=i(13 downto 0) & i(15 downto 14);

when "1111" => i<=i(14 downto 0) & i(15);

when others => i<=i;

www.btechzone.com
www.btechzone.com

end case;

when others =>

i<= i;

end case;

elsif(cond1='0') then

cnt<=cnt+"001";

case cnt is

when "000" => logical<="0000";

when "001" => logical <="0001";

when"010" => logical <="0010";

when "011"=> logical <="0100";

when "100"=> logical <="1000";

when others => logical<="0000";

end case;

case cond2 is

when "00" =>

www.btechzone.com
www.btechzone.com

case logical is

when "0000" => i<=i;

when "0001" => i<=i(14 downto 0)& '0';

when "0010" => i<=i(13 downto 0) & "00";

when "0100" => i<=i(11 downto 0) & "0000";

when "1000" => i<=i(7 downto 0) & "00000000";

when others => i<=i;

end case;

when "01" =>

case logical is

when "0000" => i<=i;

when "0001" => i<= '0' & i(15 downto 1);

when "0010" => i<= "00" & i(15 downto 2);

when "0100" => i<="0000" & i(15 downto 4) ;

when "1000" => i<="00000000" & i(15 downto 8) ;

when others => i<=i;

end case;

www.btechzone.com
www.btechzone.com

when "10" =>

case logical is

when "0000" => i<=i;

when "0001" => i<=i(14 downto 0)& i(15);

when "0010" => i<=i(13 downto 0) & i(15 downto 14);

when "0100" => i<=i(11 downto 0) & i(15 downto 12);

when "1000" => i<=i(7 downto 0) & i(15 downto 8);

when others => i<=i;

end case;

when "11" =>

case logical is

when "0000" => i<=i;

when "0001" => i<=i(0)& i(15 downto 1);

when "0010" => i<=i(1 downto 0) & i(15 downto 2);

when "0100" => i<=i(3 downto 0) & i(15 downto 4);

when "1000" => i<=i(7 downto 0) & i(15 downto 8);

www.btechzone.com
www.btechzone.com

when others => i<=i;

end case;

when others => i<= i;

end case;

if(cnt="100")then

cnt<="000";

end if;

end if;

end if;

dout<=i;

end process;

process(clk)

variable cnt:integer:=0;

begin

if(clk'event and clk='1') then

www.btechzone.com
www.btechzone.com

cnt:=cnt +1;

if(cnt=25000000)then

sclk<=not sclk;

cnt:=0;

end if;

end if;

end process;

end Behavioral;

www.btechzone.com

Potrebbero piacerti anche