我正在学习UVM,想知道反对意见是如何进行的。我认为以下代码(在我的派生代理中)执行seq.start(sequencer);排序器完成后,执行drop_objection以完成模拟。如果为true,则即使我删除了raise_objection和drop_objection,它也应执行编序器的编程操作(将8个序列项发送到DUT)。但是当我注释掉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
答案 0 :(得分:0)
您所看到的正是您期望发生的事情,因为这正是反对的目的-控制何时停止模拟。 (严格来说,“控制何时结束该阶段”,但是通常只有一个阶段会消耗时间-运行阶段。)
基本上,如果没有提出异议,则模拟会停止。因此,当您注释掉引起异议的代码时,不会引起异议,因此模拟会立即停止(不执行任何操作)。
您必须在任何UVM模拟中始终提出异议,否则 它会立即停止;
您必须始终放弃所有异议,否则您的 模拟将永远不会停止。
答案 1 :(得分:0)
用通俗易懂的语言来说,就像您告诉模拟器要完成活动,然后在当前阶段停止之前提出反对意见。