Этот код смещает n1
и n2
на каждом clk'event and clk=1
в условиях sh=1
и su=0
. Проблема в том, что переход происходит для первого возрастающего фронта и не может повториться снова для следующих нарастающих фронтов, у кого есть идея, как сделать его непрерывным сдвигом? Благодарю.Shifting каждое событие часы и часы = 1 (VHDL)
ENTITY register_divider IS
port(st , clk :in std_logic ;
num : in std_logic_vector (15 downto 0);
qu : out std_logic_vector(7 downto 0);
re : out std_logic_vector (7 downto 0);
n1r : out std_logic_vector (8 downto 0);
counter : in std_logic_vector (3 downto 0);
Sh, su, Ld: in std_logic ;
n1c: in std_logic_vector (8 downto 0)
);
END ENTITY register_divider;
--
ARCHITECTURE rtl OF register_divider IS
BEGIN
process(clk)
variable n1 : std_logic_vector (8 downto 0);
variable n2 : std_logic_vector (7 downto 0) ;
begin
n2 := num(7 downto 0);
n1 := '0' & num(15 downto 8);
if (clk'event and clk = '1') then
n1r <= n1 ;
if (sh='1' and su = '0') then
n1 := n1(7 downto 0) & n2(7);
n2 := n2(6 downto 0) & '0';
end if ;
if (su = '1' and su = '1') then
n2(0) := '1';
n1 := n1c ;
end if ;
end if ;
qu <= n2 ;
re <= n1(7 downto 0);
end process;
END ARCHITECTURE rtl;
Он сдвигает каждый такт. Проблема в том, что он также перезагружает исходные входы каждый такт. Вам нужно выяснить способ загрузки входов на что-то вроде команды «load» вместо каждого цикла. –
да, спасибо, я заметил, что сейчас, но у меня нет идеи, как решить эту проблему, у вас есть идея? –
Вам понадобится что-то вроде входа «load» для сигнала, когда вам нужно загрузить новые значения. –