Я узнал, что сигнал меняется не сразу при встрече с выражением, а когда процесс заканчивается. В этом примере здесь:
...
signal x,y,z : bit;
...
process (y)
begin
x<=y;
z<=not x;
end process;
Пример говорит следующее:
Если сигнал y изменяется, то событие будет запланировано на x, чтобы сделать его таким же, как y. Кроме того, для z запланировано событие, противоположное x. Вопрос в том, будет ли значение z противоположным y? Конечно, ответ отрицательный, потому что, когда выполняется вторая инструкция, событие на x еще не обработано, а событие, запланированное на z, будет противоположным значению x до начала процесса.
Что ж, мне нужно кое-что понять:
- Насколько я понял, значения сигналов обновляются только в конце процесса. Это правильно?
- Сигнал
x
обновляется как первая инструкция. Это по-прежнему не изменяет значениеx
, это изменение помещается в очередь для выполнения после завершения процесса. Таким образом, все, что находится после этого оператораx <= y
, не увидит изменения и увидит, чтоx
имеет старое значение. Это правильно? - Второй оператор - это попытка изменить значение сигнала
z
. То же самое и здесь, z не изменит своего значения, но это зависит от значения другого процесса. Изменениеz
будет помещено в очередь для выполнения в конце процесса. Это правильно?
Что происходит в конце процесса?
Номер возможности 1) Значение в x
изменяется, поэтому x имеет новое значение. Второй сигнал z
обновлен, первый сигнал x
был обновлен, и, учитывая, что z
зависит от x
, его значение изменяется на основе НОВОГО ОБНОВЛЕННОГО значения x
. И пример должен работать нормально.
Номер возможности 2) Значение в x
изменяется, поэтому x имеет новое значение. Второй сигнал z
обновлен. Учитывая, что z
было присвоено старое значение x
, это значение будет содержать z
, старое значение x
, которое было обновлено, но это обновление не рассматривается.
Не могли бы вы сказать мне, какой из них правильный?