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