Синтаксические ошибки VHDL/vivado

Напишите модуль 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;

Цифры, упомянутые выше


person John    schedule 07.11.2018    source источник
comment
связанные рисунки взяты из Основы логического проектирования, 6-е изд. . Чарльз Х. Рот-младший и Ларри Л. Кинни, страницы 360-361. Обратите внимание, что вы сделали SO отдельным триггером. Вы также можете выразить мультиплексоры, показанные перед триггерами на рис. 12.10 (b), в виде внутреннего оператора if. Вам не нужно присваивать значение самому себе в последовательном элементе (регистр, триггеры). Примечание. В таблице 12-1 это не показано. На рисунке 12-10(b) ваше назначение смены кажется неверным.   -  person    schedule 08.11.2018


Ответы (1)


Чтобы исправить синтаксическую ошибку, проверьте список портов в объявлении вашей сущности: сигнал Dout должен быть определен как out следующим образом:

Dout : out std_logic_vector (3 downto 0)

Как заметил пользователь 1155120, IEEE Std 1076-2008, 6.5.2 Объявления объектов интерфейса гласит:

Если режим явно не указан в объявлении интерфейса, кроме объявления файла интерфейса, предполагается режим in.

person am9417    schedule 07.11.2018
comment
IEEE Std 1076-2008, 6.5.2 Объявления объектов интерфейса Если режим явно не указан в объявлении интерфейса, кроме объявления файла интерфейса, предполагается режим in. - person ; 07.11.2018
comment
@user1155120 user1155120 Спасибо, приятно знать в будущем. Я всегда определял режим явно, поэтому это не было проблемой. - person am9417; 07.11.2018