Входной сигнал не изменяется в симуляции

Допустим, у меня есть объект с именем "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;

В этом простом случае эти две формы по существу эквивалентны. Так что более простой (список чувствительности) предпочтительнее...

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