uvm_monitor搭建的思路。
1.建立个monitor model连到dut上(在top.sv中例化的方式接成1个或者n个),建立个interface。 在model中例化此interface,并assign好和model相关联的signals。
在model中initial begin end 块里面set此virtual interface。在test中get 这个virtual interface。
2. 为了方便monitor管理建立了monitor cfg。monitor的信息字段放在monitor transaction里面。
3.写monitor。
monitor cfg管理monitor的状态。
monitor的transaction通过port传进来monitor。
monitor的vif控制着开始monitor的时间。
核心代码段
monitor_transaction tr = monitor_transaction::type_id::create("tr");
forever begin
@(vif.cb iff(vif.cb.valid))begin
tr.infor1 = vif.cb.info1;
tr.infor2 = vif.cb.info2;
ap.write(tr); //这里提供了给scoreboard做比较的ap接口
end
end
另外一种monitor连接dut的方式为bind。 从monitor连接到信息获得的flow为:
1.建立一个module 描述monitor的信号。对monitor的信息处理也在此地进行。将dut的signal在此module外面bind到module中。一般在top里面操作。
举例: bind test.dut monitor MONITOR(
.clk (test_top.ref_clk),
.reset(test_top.rst)
。。。。。。
)