uvm - uvm raise_objection 和 drop_objection
问题描述
我正在学习 UVM 并想知道反对是如何工作的。我认为以下代码(在我的派生代理中)执行 seq.start(sequencer); 并在序列器完成后,执行 drop_objection 以完成模拟。如果是真的,即使我删除了 raise_objection 和 drop_objection,它也应该执行定序器的程序(向 DUT 发送 8 个序列项)。但是当我注释掉 raise_objection 和 drop_objection 时,即使 seq.start 应该已经被执行,模拟也没有做任何事情就结束了。请帮助我了解在这种情况下,异议在 UVM 中是如何工作的。完整的测试平台环境可以在这里找到: https ://www.edaplayground.com/x/3_bM
task run_phase(uvm_phase phase);
// We raise objection to keep the test from completing
phase.raise_objection(this);
begin
my_sequence seq;
seq = my_sequence::type_id::create("seq");
seq.start(sequencer);
end
// We drop objection to allow the test to complete
phase.drop_objection(this);
endtask
解决方案
您所看到的正是您期望发生的,因为这正是反对的目的——控制何时停止模拟。(严格来说是“控制何时结束阶段”,但通常只有一个阶段会消耗时间——运行阶段。)
基本上,如果没有提出异议,模拟就会停止。因此,当您注释掉引发和放弃反对的代码时,不会引发反对,因此模拟会立即停止(不做任何事情)。
您必须始终在任何 UVM 模拟中提出异议,否则将立即停止;
您必须始终在某个时候放弃所有反对意见,否则您的模拟将永远不会停止。
推荐阅读
- java - Room 不向表中插入数据
- google-app-engine - 如何将 google 凭据传递给 google pub sub
- java - Spring Boot REST Api JWT AuthorizationFilter 不验证令牌
- maven - 如何将持久存储连接到 Google Cloud Build?
- jquery - FadeIn() 在 Knockout 的 afterAdd 回调中
- r - tidyr 中的 collect() 和 unity()
- java - 在 JOptionPane (java.io.printStream@46ee7fe8) 中格式化输出
- docker - 如何修复 Shiny App 本地浏览器问题?
- matlab - 使用文件中的名称初始化变量
- asp.net-core - ASP.NET Core:如何更改 IIS Express 端口?