SISO

SISO

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.

SISO shift register

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.