verilog - 如何消除systemverilog中变量的竞争条件?
问题描述
我在 systemverilog 中有一个变量,我从一个任务中设置并从另一个任务中读取。读和写是独立的。我想确保读取和写入是否在同一时间戳被调用,我得到更新的值。
我可以看到,按照设计,这将进入竞争状态,我无法控制读取的值是什么。我知道非阻塞赋值可以确保我总是得到变量的旧值。有什么东西可以确保我得到变量的新值。
我正在使用系统verilog/UVM。
任何建议/指针都非常感谢:)
解决方案
既然您说您使用的是 UVM,我认为这是在您的测试台代码中。而且由于您正在使用任务,因此您可以在读取变量之前调用,无论对变量进行阻塞还是非阻塞分配uvm_wait_for_nba_region()
,您都将获得新值。uvm_wait_for_nba_region()
只是阻塞等待由非阻塞赋值触发的事件。
当然,这也假设uvm_wait_for_nba_region()
在写入变量的线程中没有其他调用。但这是我能用你提供的有限信息给出的最佳答案。
推荐阅读
- java - 同一行中的两个特殊标签
- mongodb - 根据时间过滤记录时出错
- python - 网页抓取时从脚本中提取字典中的信息
- powershell - 无法将 JSON 数据引入 Azure 事件中心
- python - Pandas:获取由 pandas.DataFrame.update 更新的单元格
- javascript - 由于 MIME 类型 ("text/css") 不匹配 (X-Content-Type-Options: nosniff),来自 "/Styles/Common/bootstrap.min.css" 的资源被阻止
- google-apps-script - DriveApp.getFileById(fileId) - 错误:找不到具有给定 ID 的项目
- azure - 当逻辑应用程序中的“获取实体”没有结果时如何防止下一步
- sql - 查询总和值相等的顶行和其他行
- r - 在另一个 Data Frame 中查找具有部分匹配的行,然后将其输出写入原始 DF