繁体   English   中英

在Systemverilog中使用进程间同步

[英]Using interprocess synchronization in Systemverilog

我需要在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行阻塞,这是一个有效的假设/事实吗? 我想要实现的是,线程1将通过在第4行中使用信号量put()来将资源分配给线程2->线程2将获取该资源并完成工作,最后使用put释放它。 在这段时间之间,线程1将在第5行等待阻塞get()调用。

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

 semaphore  sema = new(1);

是一个与您正在寻找的相似的工作示例。 为了使两个任务同时运行,应该从两个并行主体(例如在fork-join块内部)调用它们。 此外,请注意,信号量无法通过常用的综合工具进行综合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM