在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: doogo

[原创] 《UVM实战》24小时问答

[复制链接]
发表于 2014-11-13 15:37:00 | 显示全部楼层
doogo你好,
关于10.5.2 聚合参数,想请教一下,

1)应用中一般virtual interface是否会封装到 my_config里?
其他sequence/driver等要用到,只传递my_config, 还是直接传递my_interface

2)代码10.5.2 base_test.sv, cfg为何不能用my_config::type_id::create产生
我修改为
cfg = my_config::type_id::create({get_full_name(),".cfg"},this);
会报[UVM_FATAL] ...please set interface.
发表于 2014-11-14 16:52:43 | 显示全部楼层
问doogo一下,关于sequence间的通信。
比如,DUT两个接口分别对应的agent1和agent2,假设agent2发的包,其数据和agent1发的数据有某些联系,那么如何做好sequence1(对应agent1的sequencer1)和sequence2(对应agent2的sequencer2)的数据通信?
我的一个想法是通过virtual seq来start sequence1和sequence2,sequence2通过其p_sequencer(此sequencer通过TLM连接到agent1上)来获得sequence1的数据。是否还有什么别的办法,能提高重复利用性。
我也想利用config_db来传递,但是如果发包数量很大时,config_db中的数据会发生覆盖,难道要把队列存到config_db空间?
发表于 2014-11-14 17:55:36 | 显示全部楼层
回复 191# sunyzs

回答第二个问题。

看了my_config的源码。




  1. `ifndef MY_CONFIG__SV
  2. `define MY_CONFIG__SV
  3. class my_config extends uvm_object;
  4.    `uvm_object_utils(my_config)
  5.    virtual my_if vif;

  6.    function new(string name = "my_config");
  7.       super.new(name);
  8.       $display("%s", get_full_name());
  9.       if(!uvm_config_db#(virtual my_if)::get(null, get_full_name(), "vif", vif))
  10.          `uvm_fatal("my_config", "please set interface")

  11.    endfunction

  12. endclass
  13. `endif


复制代码




是不是应该这样写?
cfg = my_config::type_id::create(“cfg”);
 楼主| 发表于 2014-11-14 19:28:29 | 显示全部楼层




   这个里面的实现机制比较复杂,里面用到了大量的参数化的类。从代码中不是很好找。有兴趣看我写的那本电子版的源代码分析吧
 楼主| 发表于 2014-11-14 19:31:31 | 显示全部楼层


doogo你好,
关于10.5.2 聚合参数,想请教一下,

1)应用中一般virtual interface是否会封装到 my_con ...
sunyzs 发表于 2014-11-13 15:37




   1、看个人习惯
   2、对于一个object来说,使用create方式实例化:
        create(name, parent)
        最终得到的名字是 {parent.get_full_name(), name}.
        你的名字中最终的名字是 uvm_test_top.uvm_test_top.cfg。而top_tb.sv中在set config_db时又没有更新路径
 楼主| 发表于 2014-11-14 19:35:52 | 显示全部楼层


问doogo一下,关于sequence间的通信。
比如,DUT两个接口分别对应的agent1和agent2,假设agent2发的包,其 ...
stephen_0921 发表于 2014-11-14 16:52



一个办法是使用mailbox:

在seq1中,对mbx进行实例化:


mailbox seq1_mbx;


seq1_mbx = new();


在seq2中,不对mbx实例化:


maibox seq2_mbx;


在virtual sequence中:


seq1 = new()
seq2 = new
seq2.seq2_mbx = seq1.seq1_mbx;


然后在seq中可以向mailbox中推送数据,在seq2中获取数据。
发表于 2014-11-17 09:45:16 | 显示全部楼层
本帖最后由 sunyzs 于 2014-11-17 10:20 编辑

回复 195# doogo

对于一个object来说,使用create方式实例化:
        create(name, parent)
        最终得到的名字是 {parent.get_full_name(), name}.
        你的名字中最终的名字是 uvm_test_top.uvm_test_top.cfg。而top_tb.sv中在set config_db时又没有更新路径

~~~我试了一下,好像还是不行,
top_tb.jpg


另外请教一下,我create一个object之后,通过什么debug方式,可以print这个object的全部路径名称?
比如上文中的cfg的名字:uvm_test_top.uvm_test_top.cfg
 楼主| 发表于 2014-11-17 10:42:10 | 显示全部楼层


回复  doogo

对于一个object来说,使用create方式实例化:
        create(name, parent)
        最 ...
sunyzs 发表于 2014-11-17 09:45



哦,那可能什么地方有遗漏了。你自己再试一下吧。在那个cfg类的new函数中,在super.new后,把get_full_name的结果display出来就能看到。
发表于 2014-11-17 11:18:08 | 显示全部楼层
本帖最后由 sunyzs 于 2014-11-17 11:20 编辑

回复 198# doogo

发现一个很奇怪的现象。cfg 是用create创建之后,不管后面的参数是什么,
get_full_name()得到的都是my_config , 在top_tb里直接用my_config set是 ok的


cfg用new创建之后,get_full_name()得到的是uvm_test_top.cfg ,
在top_tb里需要用uvm_test_top.cfg set.


对于UVM的源代码不是很懂,不知道是否可以帮忙找到解释。
发表于 2014-11-17 11:18:13 | 显示全部楼层
回复 196# doogo


   非常感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-6 20:39 , Processed in 0.022751 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表