022天津同城交友网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 交友 人才 房产
查看: 1251|回复: 1
打印 上一主题 下一主题

uvm例程中的问题求解

[复制链接]
跳转到指定楼层
楼主
发表于 2020-4-7 18:46:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    文章简介:首先这个例程可以正常仿真并且结果也正确,可是以上这段我就理解不上去了,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 信元


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
回复

使用道具 举报

沙发
发表于 2020-4-7 18:46:04 | 只看该作者
1# dreamore

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

        

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|联系我们|022天津同城交友网

GMT+8, 2024-5-8 11:24 , Processed in 1.703125 second(s), 16 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表