uvm_subscriber

uvm_subscriber的代码非常简单,继承于uvm_component,再加上一个analysis export而已。

其代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
virtual class uvm_subscriber #(type T=int) extends uvm_component;
typedef uvm_subscriber #(T) this_type;

uvm_analysis_imp #(T, this_type) analysis_export;

function new (string name, uvm_component parent);
super.new (name, parent);
analysis_export = new ("analysis_imp", this);
endfunction

pure virtual function void write (T, t);
endclass

他的用法一般是,将monitor的analysis port连接到subscriber,将transaction传递过来,做function coverage。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class my_coverage extends uvm_subscriber #(bus_pkt);

covergroup cg_bus;
...
endgroup

virtual function void write (bus_pkt pkt);
cg_bus.sample ();
endfunction
endclass

class my_env extends uvm_env;
...
virtual function void connect_phase (uvm_phase phase);
super.connect_phase (phase);
my_agent.custom_ap.connect (my_cov.analysis_export);
endfunction
endclass

参考:

  1. https://www.chipverify.com/uvm/uvm-subscriber
  2. https://verificationacademy.com/verification-methodology-reference/uvm/docs_1.1c/html/files/comps/uvm_subscriber-svh.html