shft.vhd



LIBRARY ieee;
USE     ieee.std_logic_1164.all;

-- 8-bit Universal Bidirectional Shift register with parallel load and
-- Asynchronous reset.

ENTITY shft IS
  PORT (
    par_in  : IN     std_logic_vector(7 DOWNTO 0);
    ser_left: IN     std_logic;
    ser_rite: IN     std_logic;
    clk     : IN     std_logic;
    mode    : IN     std_logic_vector(1 DOWNTO 0);
    clear   : IN     std_logic;
    qout    : BUFFER std_logic_vector(7 DOWNTO 0)
  );
END shft;

ARCHITECTURE one OF shft IS
  SIGNAL enable: std_logic;
BEGIN
  enable <= '0' WHEN (mode = "00") else '1';

  PROCESS 
  BEGIN
    WAIT UNTIL (prising(clk) AND enable = '1') OR clear = '1';
    IF (clear = '1') THEN
      qout <= "00000000";
    ELSE
      CASE mode IS
        WHEN "01"   =>  
          qout <= ser_rite & qout(7 DOWNTO 1);   -- Shift Right
        WHEN "10"   =>                        
          qout <= qout(6 DOWNTO 0) & ser_left;   -- Shift Left
        WHEN "11"   =>  
          qout <= par_in;                        -- Parallel Load
        WHEN OTHERS => 
          null;
      END CASE;
    END IF;
  END PROCESS;

END one;