如何消除systemverilog中变量的竞争条件?

问题描述 投票:-3回答:1

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

我可以看到,从设计上讲,这进入了竞争状态,我无法控制读取的值。我知道非阻塞分配可以确保我始终获得变量的old值。有什么可以确保我得到变量的[[new值。

我正在使用系统verilog / UVM。

高度赞赏任何建议/指针:)

verilog system-verilog uvm
1个回答
0
投票
由于您说您正在使用UVM,所以我认为这是在您的测试平台代码内。而且,由于您正在使用任务,因此可以在读取变量之前调用uvm_wait_for_nba_region(),并且将获得

new值,而不管对该变量进行了阻塞或非阻塞分配。 uvm_wait_for_nba_region()只是阻止等待由非阻塞分配触发的事件。

当然,这也假定在写入变量的线程中没有对uvm_wait_for_nba_region()的其他调用。但这是我能提供的有限信息的最佳答案。
© www.soinside.com 2019 - 2024. All rights reserved.