uvm raise_objection和drop_objection

时间:2019-01-17 07:10:50

标签: uvm

我正在学习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

2 个答案:

答案 0 :(得分:0)

您所看到的正是您期望发生的事情,因为这正是反对的目的-控制何时停止模拟。 (严格来说,“控制何时结束该阶段”,但是通常只有一个阶段会消耗时间-运行阶段。)

基本上,如果没有提出异议,则模拟会停止。因此,当您注释掉引起异议的代码时,不会引起异议,因此模拟会立即停止(不执行任何操作)。

  • 您必须在任何UVM模拟中始终提出异议,否则 它会立即停止;

  • 您必须始终放弃所有异议,否则您的 模拟将永远不会停止。

答案 1 :(得分:0)

用通俗易懂的语言来说,就像您告诉模拟器要完成活动,然后在当前阶段停止之前提出反对意见。