UVM1.2 中 如何让PHASE_SCHEDULED 替换starting_phase
时间: 2024-03-27 07:40:49 浏览: 126
UVM 1.2 中没有 `PHASE_SCHEDULED`,但是你可以使用 `uvm_phase` 中的 `phase_started` 方法来代替 `starting_phase`。具体方法如下:
1. 创建一个新的 `uvm_phase` 变量,例如 `my_phase`。
2. 在实例化 UVM 组件时,将 `my_phase` 作为 `uvm_component` 的 `default_phase` 参数传递。
3. 在 `my_phase` 的 `phase_started` 方法中执行需要在 `starting_phase` 中执行的操作。
以下是示例代码:
```
class my_phase extends uvm_phase;
// 在这里执行需要在 starting_phase 中执行的操作
virtual function void phase_started(uvm_phase phase);
// your code here
endfunction
endclass
// 实例化 UVM 组件
class my_component extends uvm_component;
// 将 my_phase 作为 default_phase 参数传递
function new(string name, uvm_component parent);
super.new(name, parent);
my_phase phase = new("my_phase", this);
phase.set_phase_type(UVM_RUNTIME_PHASE);
phase.phase_done.connect(parent.phase_all_done);
phase.phase_started.connect(phase, "phase_started");
set_default_phase(phase);
endfunction
endclass
```
在上面的示例代码中,我们创建了一个名为 `my_phase` 的新 `uvm_phase` 变量,并在其中重写了 `phase_started` 方法。在 `my_component` 类中,我们将 `my_phase` 作为 `default_phase` 参数传递给 `uvm_component` 的构造函数。这样,在实例化 `my_component` 时,`my_phase` 将成为默认的 UVM 运行时阶段。
阅读全文