【问题标题】:How to eliminate race condition on a variable in systemverilog? [closed]如何消除systemverilog中变量的竞争条件? [关闭]
【发布时间】:2019-12-05 06:08:40
【问题描述】:

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

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

我正在使用系统 verilog/UVM。

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

【问题讨论】:

标签: verilog system-verilog uvm


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2019-03-21
    • 2023-03-23
    相关资源
    最近更新 更多