022天津同城交友网

标题: uvm例程中的问题求解 [打印本页]

作者: 在无忧    时间: 2020-4-7 18:46
标题: uvm例程中的问题求解
    文章简介:首先这个例程可以正常仿真并且结果也正确,可是以上这段我就理解不上去了,r



各位前辈早上好~  本菜鸟看例程代码有些不太理解的地方,以下是粗略:

class iMonitor extends uvm_monitor;
    ................
    ................
    ................
    virtual task run_phase(uvm_phase phase);
        packet tr;
        forever begin
           tr= packet::type_id::create("tr",this);
           get_packet(tr);
           analysis_port.write(tr);
        end
    endtask: run_phase

    virtual get_packet(packet tr);
        ............
        ............
        forever begin
           ........
           ........
        end
    endtask: get_packet

endclass

首先这个例程可以正常仿真并且結果也正确,可是以上这段我就理解不上去了,run_phase里面调用了get_packet(), get_packet()里面又有一个forever循环,那么为啥analysis_port.write(tr)最终还會被调用嘞。
希望看到帖子的各位老师帮小弟分析解惑一下,感激不尽。

附件中时iMonitor全部源代码。
iMonitor.rar  
下載积分: 资产 -2 信元, 下载支出 2 信元



作者: 开心青年    时间: 2020-4-7 18:46
1# dreamore

当vif.iMonClk.frame_n[port_id] == 1 且 i == 8的时候就return. 这时就退出get_packet(),可以继续执行analysis_port.write()

        






欢迎光临 022天津同城交友网 (http://www.btlz.cn/) Powered by Discuz! X3