uvm callback实例
时间: 2023-07-15 15:15:46 浏览: 161
UVM 例子代码
4星 · 用户满意度95%
下面是一个UVM callback的示例:
```systemverilog
class my_callback extends uvm_callback;
`uvm_callback_declare_cb(my_callback,my_class)
function new(string name="my_callback");
super.new(name);
endfunction
function void pre_do (uvm_phase phase);
$display("pre_do callback called");
endfunction
function void post_do (uvm_phase phase);
$display("post_do callback called");
endfunction
endclass
```
在这个例子中,我们定义了一个名为 “my_callback” 的UVM回调,并实现了“pre_do”和“post_do”方法。在这个例子中,每当UVM执行一个名为“my_phase”的阶段时,UVM将自动调用“pre_do”和“post_do”方法。
要使用此回调,请在需要使用的组件中创建一个新的my_callback对象,并将其注册为该组件的回调。例如:
```systemverilog
class my_class extends uvm_component;
`uvm_component_utils(my_class)
my_callback cb;
function new(string name="my_class",uvm_component parent = null);
super.new(name,parent);
endfunction
function void build_phase(uvm_phase phase);
super.build_phase(phase);
cb = new("my_callback");
cb.set_scope(get_full_name());
cb.set_inst_mask({get_name()});
uvm_callbacks.register(cb,UVM_PRE_DO,get_full_name(),"my_phase");
uvm_callbacks.register(cb,UVM_POST_DO,get_full_name(),"my_phase");
endfunction
endclass
```
在这个例子中,我们创建了一个名为“my_class”的UVM组件,并在其“build_phase”方法中创建了一个名为“cb”的my_callback对象,并将其注册为my_phase阶段的预处理和后处理回调。
请注意,我们还使用“set_scope”和“set_inst_mask”方法来指定回调的作用域和实例掩码。这将确保回调仅在当前组件中执行,并且仅在与get_name()匹配的实例中执行。
阅读全文