Как вариант:
architecture a_X of e_Y is
constant N : positive := 19;
signal S : std_logic_vector(0 to N);
begin
process(Res, Clk)
begin
if Res = '1' then
C <= (others => '0');
S <= ('1', others => '0');
elsif rising_edge(Clk) then
C <= B;
if S(0) = '1' then
C<= A;
end if;
S <= S(N) & S(0 to N-1);
end if;
end process;
end a_X;
Здесь сигнал С регистровый, можно сделать комбинаторный:
architecture a_X of e_Y is
constant N : positive := 19;
signal S : std_logic_vector(0 to N);
begin
process(Res, Clk)
begin
if Res = '1' then
S <= ('1', others => '0');
elsif rising_edge(Clk) then
S <= S(N) & S(0 to N-1);
end if;
end process;
C <= A when S(0) = '1' else B;
end a_X;
Удачи
спасибо oval !
код синтезировался ,если кому интересно :
library IEEE;
use IEEE.std_logic_1164.all;
entity OUT_WORD is
port (
Res: in Std_logic;
Clk: in STD_LOGIC;
C: out STD_LOGIC_VECTOR (0 to 7)
);
end OUT_WORD;
architecture OUT_WORD_arch of OUT_WORD is
constant N : positive := 19;
signal S : std_logic_vector(0 to N);
begin
process(Res, Clk)
variable A : std_logic_vector(0 to 7);
variable B : std_logic_vector(0 to 7);
begin
A(0 to 7):= "01011101";
B(0 to 7):= "11001100";
if Res = '1' then
C <= (others => '0');
S <= ('1', others => '0');
elsif falling_edge(Clk) then
C <= B;
if S(0) = '1' then
C<= A;
end if;
S <= S(N) & S(0 to N-1);
end if;
end process;
end OUT_WORD_arch;