В VHDL, могу ли я использовать signal'event, если сигнал не тактовый? - PullRequest
0 голосов
/ 01 июня 2019

Я пытаюсь очистить свой VHDL-код. У меня есть сигнал, который НЕ CLK.

Могу ли я написать монитор изменений событий, как показано ниже, и как мне заставить его скомпилировать, чтобы он мог быть синтезирован? (см. код) Я пробовал несколько перестановок, но не могу заставить его скомпилировать. Будет ли компилироваться signal'event, если сигнал не является CLK, и если да, то как это делается? Я вижу в Интернете и другой литературе, что это можно сделать, но все примеры, которые я вижу, показывают CLK'event.

signal cntr: unsigned(15 downto 0) := (others => '0');

...
process(CLK):
begin

IF rising_edge(CLK) THEN
    if (cntr'event) then
        do something;
    end if;
or...
    if(cntr(0)'event) then
        do something;
    end if;
END IF;
end process;

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

1 Ответ

0 голосов
/ 02 июня 2019

rising_edge(CLK) - это уже событие, делающее ваш дизайн синхронным, и это хорошо.Как сказано в комментариях, это должны использовать только тактовые сигналы.
Глядя на другой, даже в то время, не имеет смысла в синхронных схемах, так как 2 сигнала не будут меняться точно одновременно, создавая состояние гонки.Или на самом деле часы в часах, и ошибка синтеза ...
Он может работать в симуляции, но не полагайтесь на этот факт.

Обычный способ программирования на языках HDL - это сохранениепредыдущее значение сигнала на тех же часах (например, cntr_d <= cntr) и сравнить с этим предыдущим значением.Это позволяет определить, повысился ли сигнал (ранее равный 0, в настоящее время равный 1), понизился, изменился (отличается) ...
И этот метод идеально подходит для синтеза!

...