式に遭遇したときに信号がすぐに変更されるのではなく、プロセスが終了したときに信号が変更されることを学びました。この例では、次のとおりです。
...
signal x,y,z : bit;
...
process (y)
begin
x<=y;
z<=not x;
end process;
例では次のように述べています。
信号 y が変化すると、x でイベントがスケジュールされ、y と同じになります。また、x の反対になるように z にイベントがスケジュールされます。問題は、z の値が y の反対になるかどうかです。もちろん、答えはノーです。2 番目のステートメントが実行されるとき、x のイベントはまだ処理されておらず、z でスケジュールされているイベントは、プロセスが開始される前の x の値の反対になるためです。
さて、私はいくつかのことを理解する必要があります:
- 私が学んだことから、信号値はプロセスの最後にのみ更新されます。これは正しいです?
- シグナル
x
は最初のステートメントとして更新されます。これは の値を変更しませんx
。この変更はキューに入れられ、プロセスの終了後に実行されます。したがって、このステートメントの後のすべては変更を認識せず、古い値を持つことx <= y
がわかります。x
これは正しいです? - 2 番目のステートメントは、 signal の値を変更しようとしています
z
。ここでも同じで、z はその値を変更しませんが、別のプロセスの値に依存します。変更z
はキューに入れられ、プロセスの最後に実行されます。これは正しいです?
プロセスの最後には何が起こりますか?
可能性番号 1) の値x
が変更され、x が新しい値を持つ。2 番目のシグナルz
が更新され、最初のシグナルx
が更新され、 が にz
依存するx
場合、その値は の NEW UPDATED 値に基づいて変更されますx
。そして、例はうまくいくはずです。
可能性番号 2) の値x
が変更され、x が新しい値を持つ。2 番目の信号z
が更新されます。z
に の古い値が割り当てられているとすると、x
それz
は保持される値であり、その古い値x
は更新されましたが、この更新は考慮されません。
どちらが正しい方法か教えてください。