-- ############################################################################ -- # Project : Leonardo CBT-Kernel # -- # # -- # Filename : shifters.vhd # -- # # -- # Component : sispo : Serial in - Serial/Parallel Out shift register # -- # with direction control. # -- # # -- # Model : rtl # -- # # -- # Designer : S. Theoharis,N. Zervas # -- # Institute : VLSI Design Lab., University of Patras # -- # Date : 01.05.1999 # -- ############################################################################ library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; -- sispo Entity Description ENTITY sispo IS GENERIC(x : INTEGER := 8); port( DOUT: OUT std_ulogic_vector((x-1) DOWNTO 0); CLK,R,DIR_R,SE,SI: IN STD_ULOGIC; SO: OUT STD_ULOGIC ); END sispo; -- sispo Architecture Description ARCHITECTURE rtl OF sispo IS SIGNAL pre_Q : std_ulogic_vector((x-1) DOWNTO 0) := (OTHERS => 'X'); BEGIN SHIFT_REGISTER_Process: PROCESS(CLK,R) BEGIN IF (R = '1') THEN pre_Q <= (OTHERS => '0'); ELSIF (CLK'event AND (CLK = '1') AND (CLK'last_value = '0')) THEN IF (SE = '1') AND (DIR_R = '1') THEN pre_Q((x-1)) <= SI; pre_Q((x-2) DOWNTO 0) <= pre_Q((x-1) DOWNTO 1); ELSIF (SE = '1') AND (DIR_R = '0') THEN pre_Q((x-1) DOWNTO 1) <= pre_Q((x-2) DOWNTO 0); pre_Q(0) <= SI; END IF; END IF; END PROCESS SHIFT_REGISTER_Process; -- Assign outputs DOUT <= pre_Q; SO <= pre_Q(0) WHEN DIR_R = '1' ELSE pre_Q((x-1)) WHEN DIR_R = '0' ELSE 'X'; end rtl;