UVM初学篇 -(10) UVM monitor 监视器

monitor的作用是监视DUT的行为,monitor是收集DUT端口数据,将其转换成数据包交给reference model 和scoreboard处理。它的功能主要包括监控端口信息生成数据包、协议时序的检查。

monitor可分为两种monitor,一种是采样输入接口的数据给reference model,我们叫imonitor,这里为什么不用driver的数据包直接给refrence model?有两种考虑:

1,driver中数据包随机的数据不一定直接给的接口,随机之后可能做其他的处理,用monitor采样更合理。

2,除去driver给接口驱动数据之外,用户还可能直接改动接口的数据,这种行为只有monitor能检测到。

另一种monitor就是采样输出接口的数据给reference model,我们叫omonitor。

part1/monitor是UVM monitor的实验,代码2.12是dadd_imonitor的代码,在main_phase中首先等reset_n信号为高,为高之后再采样DADD模块输入接口的数据。

File:dadd_imonitor.sv
Class:dadd_imonitor
task dadd_imonitor :: main_phase(uvm_phase phase);
    dadd_item item;

    wait(tb_dadd.dadd_if.reset_n);
    forever 
    begin
        if(tb_dadd.dadd_if.pcb.dadd_in_en)
        begin
            item = new();
            item.data_en = tb_dadd.dadd_if.pcb.dadd_in_en;
            item.data    = tb_dadd.dadd_if.pcb.dadd_in;
            item.addr    = tb_dadd.dadd_if.pcb.dadd_in_addr;
            $display("dadd_imonitor,item.addr = %h, item.data = %h",item.addr,item.data);
        end
        @(posedge tb_dadd.dadd_if.clk);
    end
endtask: main_phase

代码2.12 monitor加入后dadd_imonitor代码

代码2.13是dadd_omonitor的代码,在main_phase中首先等reset_n信号为高,为高之后再采样DADD模块输出接口的数据。

File:dadd_omonitor.sv
Class:dadd_omonitor
task dadd_omonitor :: main_phase(uvm_phase phase);
    dadd_item item;

    wait(tb_dadd.dadd_if.reset_n);
    forever 
    begin
        @(posedge tb_dadd.dadd_if.clk);
        if(tb_dadd.dadd_if.pcb.dadd_out_en)
        begin
            item = new();
            item.data_en = tb_dadd.dadd_if.pcb.dadd_out_en;
            item.data    = tb_dadd.dadd_if.pcb.dadd_out;
            item.addr    = tb_dadd.dadd_if.pcb.dadd_out_addr;
            $display("dadd_omonitor,item.addr = %h, item.data = %h",item.addr,item.data);
        end
    end
endtask: main_phase

代码2.13 monitor加入后dadd_omonitor代码

执行Makefile脚本:

make all

查看log和波形是一一对应的。

图2.17  monitor实验的仿真log截图

加入imonitor和omonitor之后UVM的树形结构为:

图2.18  monitor加入后UVM树形结构

平台结构框图为:

图2.19  monitor加入后UVM平台框图

本书(《UVM实验教程-从平台、脚本到方法学全代码解析-王建利》)及其实验代码已上传至GitHub 访问网址为: https://github.com/brentwang-lab/uvm_tb_gen

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值