Ожидание VHDL на множественном сигнале

signal a:bit:='1'; signal b:bit:='0'; signal c:bit:='0';
begin
  process
  variable d:bit:='0';
    begin
    if (a='1')or(b='0') then a <= inertial not d after 1ns;
  else a<=inertial not c after 1.5ns;
    end if;
    d := a and b;
  b <= inertial (b)nand(a or d) after 1ns;          
  wait on a,b,c;end process;
  c <= a and b after 1ns;
end Behavioral;

Что произойдет, если значения a и b изменятся одновременно, например, за 2 нс.

Будет ли процесс запускаться 2 раза?

Если это так, какие значения следует использовать для a, b, если мы проходим через процесс для события a, изменяется ли сигнал b в это время или он будет изменен, когда процесс снова запустится для b?

Также оператор c ‹= a и b через 1 нс; находится вне процесса, как это работает с after? Если бы не было after, это была бы просто единица AND без задержки.


person JanBo    schedule 30.01.2013    source источник


Ответы (2)


wait on a,b,c;

ждет, пока один из сигналов будет иметь транзакцию во время дельта-цикла.

Если случится так, что два или все из них «активируются», симулятору все равно, он все равно просто выпадет из ожидания. Он не будет «накапливать» транзакции текущего дельта-цикла на оставшихся сигналах и переносить их вперед.

person Martin Thompson    schedule 01.02.2013

Я надеюсь, вы понимаете, что этот процесс не будет правильно синтезироваться!

Что касается запуска процесса один или два раза, это будет зависеть от того, происходят ли события a или b в одном и том же дельта-цикле. Добавьте оператор Report в процесс и узнайте.

Поскольку процесс управляет A и B с помощью операторов задержки, я ожидаю, что оба назначения будут действовать в одном и том же дельта-цикле; первая дельта временного шага, поэтому я ожидаю, что она будет запущена один раз.

Теперь, если вы ввели новый сигнал "е" и прогнали его из процесса вместо "b", а также добавили назначение сигнала b <= e; вне процесса, вы ввели дельта-тактовую задержку в "b", и тогда процесс должен проснуться дважды.

Оператор c <= a and b after 1ns; по существу представляет собой отдельный процесс, чувствительный к a и b, поэтому он должен работать одинаково.

Вы можете найти этот ответ полезным для понимания модели дельта-цикла.

person user_1818839    schedule 30.01.2013