Ошибка (10822): не удалось реализовать регистры для назначений на этом фронте часов.

Я не могу найти, что я делаю неправильно, я был бы рад, если бы кто-нибудь мог мне помочь в этом...

entity fsmF is
  port(S, R : in  std_logic;
       Q    : out std_logic);
end;

architecture FSM_beh of fsmF is
begin
  process(S, R)
  begin
    if S = '0' then
      Q <= '0';
    else
      if (R'event and R = '1' and S = '1') then  -- <= ERROR
        Q <= '0';
      else
        Q <= '1';
      end if;
    end if;
  end process;
end FSM_beh;

person SDkkk    schedule 27.06.2014    source источник


Ответы (1)


Часть if определяет назначение Q на основе переднего фронта с R'event and R = '1' (rising_edge(R)) и когда S = '1', что нормально.

Проблема в том, что часть else присваивается Q, когда нет нарастающего фронта R, а S равно '1'. Для части else требуется схема, которая могла бы обновлять события сигналов в списке чувствительности процесса, а затем проверять другие события, кроме нарастающего фронта, чтобы присвоить их Q.

Поэтому оставьте обнаружение нарастающего фронта как отдельное условие и другие условия ниже, например:

if (R'event and R = '1') then  -- <= ERROR
  ...
end if;
person Morten Zilmer    schedule 27.06.2014