【问题标题】:uvm raise_objection and drop_objectionuvm raise_objection 和 drop_objection
【发布时间】:2022-01-20 05:39:21
【问题描述】:

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


    【解决方案1】:

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

    基本上,如果没有提出异议,模拟就会停止。因此,当您注释掉引发和放弃反对意见的代码时,不会引发反对意见,因此模拟会立即停止(不做任何事情)。

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

    • 您必须始终在某个时候放弃所有反对意见,否则您的 模拟永远不会停止。

    【讨论】:

    • 你是对的——模拟终止,因为没有未决的反对意见。实际上,在打印“hello world”的其他组件(即 uvm_test)中存在一个提出的反对意见,然后在 10ns 内放弃了反对意见。因此,在 10ns 之后,没有异议并且模拟终止,即使 uvm_driver 已准备好在永远循环中处理 sequence_item。为了验证这个理论,我将 uvm_test 中提出异议的时间窗口从 10ns 增加到 100ns,即使我没有在我的 uvm_agent 中提出异议,它也为驱动程序提供了足够的工作时间。
    【解决方案2】:

    用通俗的话来说,这就像您在告诉模拟器完成活动,然后在当前阶段停止之前提出异议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      相关资源
      最近更新 更多