Влияние безусловного оператора WAIT на процессы в VHDL - PullRequest
0 голосов
/ 08 октября 2018

Я что-то не понимаю в процессах VHDL, заканчивающихся безусловным оператором wait.Чтобы проиллюстрировать мою проблему, мне нужно сравнить 2 следующих фрагмента:

фрагмент 1:

library ieee;
use ieee.std_logic_1164.all;

entity foo is
end entity;

architecture sim of foo is
  signal clk : std_logic := '0';
  signal s   : std_logic;

begin
  clk <= not clk after 10 ns;

  -- driver1
  s <= '0';

  -- driver2
  process (clk) is
  begin
    s <= clk;
  end process;
end architecture;

Для сигнала s есть двойное назначение: Driver1 переводит сигнал s в '0'в то время как driver2 альтернативно выводит его на «0» и «1».Как мы можем видеть на графике формы сигнала, когда clk равен '0', результирующее s равно '0' (зеленые сегменты), но когда clk равно '1', результирующее s равно 'X' (красные сегменты).enter image description here => Я понимаю это поведение, с этим проблем нет.

Если я немного изменю этот код, изменив driver1 в процесс, завершившийся безусловной wait инструкцией:

snipet2:

library ieee;
use ieee.std_logic_1164.all;

entity foo is
end entity;

architecture sim of foo is
  signal clk : std_logic := '0';
  signal s   : std_logic;

begin
  clk <= not clk after 10 ns;

  -- driver1
  -- s <= '0';
  process 
  begin
    s <= '0';
    wait;
  end process;

  -- driver2
  process (clk) is
  begin
    s <= clk;
  end process;
end architecture;

Удивительно, но для меня snipet 2 генерирует тот же сигнал, что и фрагмент 1. Я понимаю, что инструкции внутри процесса с окончательным «безусловным» wait оператор остановится навсегда, означая, что их код будет неактивен после первого запуска выполнения.Но если это действительно так, я ожидал бы, что driver1 во фрагменте 2 неактивен после первого запуска, и что с этого момента driver2 остается единственным активным драйвером сигнала s, всегда назначая ему альтернативные '1' и '0' clk.

Почему это не так?

1 Ответ

0 голосов
/ 08 октября 2018

Когда вы назначаете сигнал в процессе, для этого сигнала создается драйвер с момента, когда он назначен, до конца моделирования.Итак, здесь оба фрагмента кода функционально эквивалентны, вы создаете driver1 со времени 0 и driver2 из первых часов.

...