首页 > 解决方案 > 如何消除systemverilog中变量的竞争条件?

问题描述

我在 systemverilog 中有一个变量,我从一个任务中设置并从另一个任务中读取。读和写是独立的。我想确保读取和写入是否在同一时间戳被调用,我得到更新的值。

我可以看到,按照设计,这将进入竞争状态,我无法控制读取的值是什么。我知道非阻塞赋值可以确保我总是得到变量的值。有什么东西可以确保我得到变量的值。

我正在使用系统verilog/UVM。

任何建议/指针都非常感谢:)

标签: verilogsystem-veriloguvm

解决方案


既然您说您使用的是 UVM,我认为这是在您的测试台代码中。而且由于您正在使用任务,因此您可以在读取变量之前调用,无论对变量进行阻塞还是非阻塞分配uvm_wait_for_nba_region(),您都将获得新值。uvm_wait_for_nba_region()只是阻塞等待由非阻塞赋值触发的事件。

当然,这也假设uvm_wait_for_nba_region()在写入变量的线程中没有其他调用。但这是我能用你提供的有限信息给出的最佳答案。


推荐阅读