Входной сигнал не изменяется в симуляции
Допустим, у меня есть объект с именем "HostToDevice", который имеет входной сигнал "ps2c" (VHDL). В этом объекте я только устанавливаю этот сигнал на "Z" (высокий импеданс), потому что я хочу, чтобы другой объект управлял им.
Я создал тестовый стенд, чтобы проверить поведение, и случилось нечто странное (для меня). В тестовом стенде у меня есть этот код:
ps2ctemp_process :process
begin
ps2ctemp <= '0';
wait for ps2c_period/2;
ps2ctemp <= '1';
wait for ps2c_period/2;
end process;
И после:
stim_proc: process
begin
ps2c <= ps2ctemp;
wait;
end process;
Когда я запускаю симуляцию (поведенческую), входной сигнал "ps2c" просто низкий и не меняется, как сигнал ps2ctemp.
Вместо этого, если я управляю сигналом ps2c вручную без использования другого сигнала, он работает нормально; как это:
ps2c <= '1';
wait for 10 ns;
ps2c <= '0';
wait for 10 ns;
ps2c <= '1';
1 ответ
Ваш "activ_proc" не имеет списка чувствительности и одного "ожидания" без события или тайм-аута, поэтому он предназначен для запуска один раз и ожидания навсегда. Кажется, это то, что делает сим, так что хорошо.
Теперь я сделаю дикое предположение здесь, что вы действительно хотите, чтобы он просыпался каждый раз ps2ctemp
изменения и передать новое значение ps2c
,
Есть два способа сделать это:
(1) со списком чувствительности
stim_proc: process(psc2temp)
begin
ps2c <= ps2ctemp;
--wait;
-- no, we want the process to complete, so it can be woken up
-- and run from the start again
end process;
(2) с ожиданием конкретного события...
stim_proc: process
begin
ps2c <= ps2ctemp;
wait until ps2ctemp'event;
-- any activity at all on ps2ctemp should wake this process,
-- in case there is something it ought to be doing...
end process;
В этом простом случае эти две формы по существу эквивалентны. Так что более простой (список чувствительности) предпочтительнее...