Een parallel in, serial out shift register wordt gebruikt als ge parallel data hebt en het serieel wil doorsturen. 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 (clk, 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 buf: std_logic_vector(3 downto 0);
begin
SEQ: process(clk) begin
if clk'event and clk = '1' then
if load = '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;
VHDL heeft onderstaande waardes voor std_logic ‘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