Bij een serial in, serial out shift register komt de data erin en iedere clock cyclus wordt het 1 plaats verder geshift. Dus in onderstaand voorbeeld komt de data er na 4 clock cycli terug uit.
Er zijn verschillende manieren op dit te beschrijven in VHDL. Onderstaande beschrijvingen zijn 2 voorbeelden. Merk hierbij op dat de volgorde dat de buffer beschreven wordt en de toekenning aan de output irrelevant zijn. Alles wordt immers tegelijk uitgevoerd in hardware.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity SISO_shift_register is
Port (clock: in std_logic;
D: in std_logic;
Y: out std_logic);
end SISO_shift_register;
architecture Behavioral of SISO_shift_register is
signal clock_i : STD_LOGIC;
signal D_i : STD_LOGIC;
signal buf: std_logic_vector(3 downto 0);
begin
clock_i <= clock;
D_i <= D;
Y <= buf(3);
SEQ: process(clock_i) begin
if rising_edge(clock_i) then
buf(0) <= D;
buf(3 downto 1) <= buf(2 downto 0);
end if;
end process;
end Behavioral;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity SISO_shift_register is
Port (clock: in std_logic;
D: in std_logic;
Y: out std_logic);
end SISO_shift_register;
architecture Behavioral of SISO_shift_register is
signal clock_i : STD_LOGIC;
signal D_i : STD_LOGIC;
signal buffer_input, buffer_output: std_logic_vector(0 to 3);
begin
clock_i <= clock;
D_i <= D;
Y <= buffer_output(3);
buffer_input <= D_i & buf(0 to 2);
SEQ: process(clock_i) begin
if rising_edge(clock_i) then
buffer_output <= buffer_input;
end if;
end process;
end Behavioral;
In deze voorbeelden is er geen Y_i signaal. De uitgang Y wordt aangedreven door een signal buf of buffer_output. Het is niet nodig om hier nog een signal aan toe te voegen, maar dat mág altijd.