-- ############################################################################ -- # Project : Leonardo CBT-Kernel # -- # # -- # Filename : shifters.vhd # -- # # -- # Component : siso : Serial in - Serial 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; -- siso Entity Description ENTITY siso IS GENERIC(x : INTEGER := 8); PORt( CLK,R,DIR_R,SE,SI: in std_ulogic; SO: out std_ulogic ); END siso; -- siso Architecture Description ARCHITECTURE rtl OF siso 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; SO <= pre_Q(0) WHEN DIR_R = '1' ELSE pre_Q(x-1) WHEN DIR_R = '0' ELSE 'X'; END rtl;