-1

我需要在 systemverilog 中对我的硬件的某些部分进行建模,它看起来如下所示:

我可以让两个踏板 -(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 行阻塞是一个有效的假设/事实吗?我想要实现的是,thread1 将通过在第 4 行中使用信号量 put() 将资源放弃给 thread2 -> 线程 2 将获取该资源并完成它的工作并最终使用 put 释放它。在这期间,thread1 将在第 5 行等待阻塞 get() 调用。

4

1 回答 1

2

是的,如果一个线程获得信号量,另一个线程将被阻塞。您需要将信号量定义为:

 semaphore  sema = new(1);

是一个类似于您正在寻找的工作示例。为了使两个任务同时运行,它们应该从两个并行的主体中调用,例如在一个 fork-join 块中。此外,请注意,信号量不能由常用合成工具合成。

于 2014-06-16T23:14:32.477 回答