Een parallel in, serial out shift register wordt gebruikt als er parallelle data is en dit serieel gebruikt moet worden. Hier hebben we wel een load signal nodig om de data in te laden en multiplexer om te zorgen dat de data ook in de flip-flops kan geraken.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity PISO_shift_register is
Port (clock: in std_logic;
load: in std_logic;
D_Vector: in std_logic_vector(3 downto 0);
Y: out std_logic);
end PISO_shift_register;
architecture Behavioral of PISO_shift_register is
signal clock_i : STD_LOGIC;
signal load_i : STD_LOGIC;
signal buf: std_logic_vector(3 downto 0);
begin
clock_i <= clock;
load_i <= load;
SEQ: process(clock_i) begin
if rising_edge(clock_i) then
if load_i = '1' then
buf <= D_vector;
else
buf(3 downto 1) <= buf(2 downto 0);
buf(0) <= '-'; --in de meeste toepassingen maakt het niet uit welke bit er uit komt als de buffer leeg is
end if;
end if;
end process;
Y <= buf(3);
end Behavioral;
Ter herinnering: ‘U’ Uninitialized ‘X’ Forcing Unknown ‘0’ Forcing 0 ‘1’ Forcing 1 ‘Z’ High Impedance ‘W’ Weak Unknown ‘L’ Weak 0 ‘H’ Weak 1 ‘-’ Don’t Care