Напишите модуль VHDL для правого регистра сдвига Parallel-in, Parallel-out на рисунке (прилагается), но добавьте асинхронный сигнал очистки с активным низким уровнем ClrN. Не используйте в коде отдельные триггеры. Смоделируйте модуль, чтобы получить временную диаграмму, аналогичную рисунку (прилагается).
Пожалуйста, используйте параметры, перечисленные ниже, для генерации сигналов.
-установите ClrN = 1 для 3,5 тактовых циклов, = 0 для следующего полутакта, = 1 для отдыха для теста.
-установите L = 1 для 5 тактов, = 0 для следующих 3 тактов, = 1 для остальной части теста
-установить СИ = 1
-установить Д = 0101
-установите Sh = 0 для 1 такта, = 1 для следующих 5 тактов, = 0 для остальной части теста
Отправьте формы сигналов моделирования, которые демонстрируют работу вашего кода.
получаю ошибку [Synth 8-1789] cannot update 'in' object dout
Я пробовал следующее:
library ieee;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
entity insertname is
port (
SI, Clk, ClrN, Sh, L : in std_logic;
Din : in std_logic_vector (3 downto 0);
SO : out std_logic;
Dout : std_logic_vector (3 downto 0)
);
end entity insertname;
architecture behavioral of insertname is
signal temp: std_logic_vector (3 downto 0) := "0000";
begin
process (Clk, ClrN)
begin
if ClrN = '0' then
temp <= x"0";
elsif Clk'event and Clk = '1' and Sh = '1' then
temp <= SI & temp(3 downto 1);
SO <= temp(0);
elsif Clk'event and Clk = '1' and Sh = '0' and L = '1' then
temp <= Din;
elsif Clk'event and Clk='1' and Sh='0' and L='0' then
temp <= temp;
end if;
end process;
Dout <= temp;
end behavioral;