Научих, че сигналът не се променя веднага, когато срещне израз, а когато процесът приключи. В този пример тук:
...
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
, която беше актуализирана, но тази актуализация не се взема предвид.
Бихте ли ми казали кой е правилният начин?