-1

ハードウェアの一部を systemverilog でモデル化する必要があり、次のようになります。

2 つのトレッド (SV タスク) を並行して実行できます。

Thread:

1. get_resource_from_manager()  [sema.get(1) ??]
2. repeat(until_finish)
3.   do_work()
4.   give_contorl_to_thread1() [sema.put(1) ??]
5.   wait_for_thread1_to_return_control() [sema.get(1) ??]
6.   continue_work()
7. endrepeat
8. do_some_cleanup()
9. exit()

両方のスレッドが同じ作業を行います。セマフォの使用を考えています。私は前にそれを使用したことがありません。スレッドが 5 行目でブロックされるというのは有効な仮定/事実ですか? 私が達成したかったのは、スレッド 1 が 4 行目のセマフォ put() を使用してスレッド 2 にリソースを放棄することです - > スレッド 2 がこのリソースを取得し、その作業を行い、最終的に put を使用して解放します。この間、スレッド 1 は 5 行目で get() 呼び出しのブロックを待機します。

4

1 に答える 1

2

はい、一方のスレッドがセマフォを取得すると、もう一方のスレッドはブロックされます。セマフォを次のように定義する必要があります。

 semaphore  sema = new(1);

これは、探しているものに似た実際の例です2 つのタスクを同時に実行するには、fork-join ブロック内など、2 つの並列ボディから呼び出す必要があります。また、セマフォは一般的な合成ツールでは合成できないことに注意してください。

于 2014-06-16T23:14:32.477 に答える