Могу ли я повторно использовать сигнал, которому присвоены значения в другом процессе?

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

Signaling : process(button0, button1)
begin

  if (button1= '0') AND (button0 = '0') then  -- if both buttons are pressed
    BothButtons <= "00";
  elsif (button1 = '0') AND (button0 = '1') then  -- if button1 is pressed
    BothButtons <= "01";
  elsif (button1 = '1') AND (button0 = '0') then  -- if button0 is pressed
    BothButtons <= "10";
  elsif (button1 = '1') AND (button0 = '1') then -- if no button are pressed
    BothButtons <= "11";
  else
    --BothButtons <= "11";
    BothButtons <= button0 & button1;
  end if;

end process;

Другой процесс, который я повторно использую этот сигнал:

Counting : process(button0, BothButtons) 

  variable count0 : integer range 0 to 9; -- to hold the counter value

begin 

  if falling_edge(Button0) then -- I am using button0 as a clock because the onboard clock is too fast  

    if BothButtons = "00" then
      count0 := 0;
    elsif BothButtons = "01" then
      count0 := count0 + 1;
    elsif BothButtons = "10" then
      count0 := count0 + 1;
    else
      count0 := count0 + 1; -- when i have included this i have discovered that the signal value is not visible within this process
  end if;

end process;

Пожалуйста, не обращайте внимания на содержание этого оператора if, я знаю, что это не имеет смысла, но я просто проверяю, видно ли значение сигналов в этом процессе!

Вывод не такой, как ожидалось, похоже, что второй процесс не реагирует на изменения в сигнале!

2 ответа

Решение

Краткий ответ: да. Как правило, запишите свой сигнал только в одном процессе (это "драйвер") и прочитайте его в любом другом процессе.

Это немного сложнее, чем это, но вы можете игнорировать сложности для начала. Вы фактически записываете сигнал в "эффективный процесс" (который может быть одновременным назначением, например, вместо процесса), и вы можете иметь несколько драйверов, если хотите иметь дело с функциями разрешения.

Ваш код все испорчен, хотя. Во-первых, у вас серьезные проблемы с гонкой. оба процесса чувствительны к одним и тем же сигналам, и вы не знаете, в каком порядке они будут выполняться. Во-вторых, ваш первый процесс может быть полностью заменен простым параллельным присваиванием (то, которое находится в вашей ветви else). Ваш второй процесс также слишком сложен.

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

Другие вопросы по тегам