He intentado hacer un registro de turno por mi cuenta. La sintaxis es correcta, pero no estoy seguro de si esto podría ser un buen diseño ... comenté las afirmaciones que me preocupan ...
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_misc.all;
use ieee.numeric_std.all;
entity ShiftRegister is
generic(n : natural := 8);
port(x : in std_logic_vector(n - 1 downto 0);
clk : in std_logic;
shift : in std_logic;
w : in std_logic;
y : out std_logic_vector(n - 1 downto 0));
end entity ShiftRegister;
architecture arch of ShiftRegister is
signal y_int : std_logic_vector(n - 1 downto 0);
begin
process(clk)
begin
if rising_edge(clk) then
if w = '1' then
y_int <= x;
elsif shift = '1' then
y_int(n - 2 downto 0) <= y_int(n - 1 downto 1);
y_int(n - 1) <= '0';
end if;
end if;
y <= y_int;
end process;
end architecture arch;