1

最近、systemc を勉強していて、セマフォ チャネルについて質問があります。

asic world ( http://www.asic-world.com/systemc/channels3.html )で例を見つけましたが、少し混乱しています。

この例の最初の 1ns で、最初のプロセス bus_semaphore() が機能し、「@1 ns ....」という 2 行を出力できます。同時に、セマフォの値 (bus) が 2 に変化し (bus.post())、次のクロック ポーズエッジを待ちます。

2 番目のプロセスである do_read() も 1ns で、最初の "@" 行は正常に出力できますが、次の if ステートメントの trywait() はどうでしょうか。最初のプロセスと 2 番目のプロセスは同時に実行する必要があります。 2番目のプロセスの行が印刷されます。

しかし、ページの下部に示されている答えは、bus.post() が実行された後に trywait() が実行され、2 番目の "@..." ステートメントが出力されることを意味します。bus.post() の実行後に trywait() が実行されることを確認するにはどうすればよいですか?

前もって感謝します!

4

2 に答える 2

1

私はそれを理解したと思います。SC_CTOR で定義されたプロセスの順序は、SC_CTOR での定義の逆順であり、非常に重要です。

于 2015-03-02T21:33:56.877 に答える
1

この例が多くの競合状態を示していることは間違いありません。コンストラクターでプロセス作成の順序を変更すると、モジュールの動作に影響するという事実は、その証拠です。

これは良い例ではありません。そのような競合状態を特徴とする設計はありません。

于 2015-03-09T09:40:45.677 に答える