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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3943|回复: 8

[求助] [UVM]烦请各位帮看下我的test里面设置的transfer次数为什么sequence没有收到

[复制链接]
发表于 2014-6-23 21:40:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本人最近在研究UVM,尝试搭一个AHB RAM的验证环境,但是在设置transfer循环次数的时候sequence里面没法接收参数,我完全是参照uvm1.1中那个ubus的例子在做,烦请各位帮忙看下有什么问题

class ahb_test extends uvm_test;
    `uvm_component_utils(ahb_test)

    ahb_env t_env ;

    function new (string name="ahb_test", uvm_component parent=null);
        super.new (name, parent);
        t_env = new("t_env",this);
    endfunction : new


    virtual function void build_phase(uvm_phase phase);
            uvm_config_db#(int)::set(this, "t_env.ahb_mseqr.ahb_master_sequence","num_trans",2);

          uvm_config_db#(uvm_object_wrapper)::set(this,"t_env.ahb_mseqr.main_phase",
                           "default_sequence", ahb_master_sequence::type_id::get());
......
    endfunction
endclass

class ahb_master_sequence extends uvm_sequence #(ahb_master_transaction);

int num_trans = 1;

function new(string name="ahb_master_sequence");
    super.new(name);
endfunction

`uvm_object_utils(ahb_master_sequence)

ahb_master_transaction ahb_m_tr;

virtual task body();
    if(!(uvm_config_db#(int)::get(null,get_full_name(),"num_trans", num_trans)));
         `uvm_info("No transaction fed:",{get_full_name(), " use default num_trans"}, UVM_LOW);
    uvm_report_info(get_full_name(),"Start transfering...",UVM_LOW);
    for(int i=0; i<num_trans; i++)
        `uvm_do(ahb_m_tr);
endtask

endclass

运行的时候得到这个
UVM_INFO ../tb/ahb_master_sequence.sv(15) @ 0: uvm_test_top.t_env.ahb_mseqr@@ahb_master_sequence [No transaction fed:] uvm_test_top.t_env.ahb_mseqr.ahb_master_sequence use default num_trans
UVM_INFO @ 0: uvm_test_top.t_env.ahb_mseqr@@ahb_master_sequence [uvm_test_top.t_env.ahb_mseqr.ahb_master_sequence] Start transfering...

请问怎么回事呢?非常感谢
 楼主| 发表于 2014-6-23 22:22:39 | 显示全部楼层
目前我判断应该是sequence和sequencer没有关联上,因为driver没有收到transaction,但是下面这句
uvm_config_db#(uvm_object_wrapper)::set(this,"t_env.ahb_mseqr.main_phase",
                           "default_sequence", ahb_master_sequence::type_id::get());
应该就是关联sequencer和sequence吧?说实话这个是从uvm自带的那个ubus的例子抄来的,我也没看明白,例子里面sequencer是直接用的uvm_sequence定义的instance,也就是说sequencer的成员里面显然不包含sequence,仿真结果打印的topology也印证了这一点,那么例子里是怎么关联上的呢?而且从这个build_phase看,先设置了seqr.seq.num_trans的值,然后才关联seqr和seq?
发表于 2014-6-24 13:06:57 | 显示全部楼层
t_env是不是应该在build_phase里用create出来啊?
 楼主| 发表于 2014-6-24 21:42:13 | 显示全部楼层
本帖最后由 fighter212 于 2014-6-24 21:43 编辑

回复 3# stephen_0921
谢谢这位朋友,我按你说的做了,把new里面去掉,改在build_phase里面用create创建,但是还是不行,log可以看到UVM_INFO ../tb/ahb_master_sequence.sv(15) @ 0: uvm_test_top.t_env.ahb_mseqr@@ahb_master_sequence [No transaction fed:] uvm_te st_top.t_env.ahb_mseqr.ahb_master_sequence use default num_trans
UVM_INFO @ 0: uvm_test_top.t_env.ahb_mseqr@@ahb_master_sequence [uvm_test_top.t_env.ahb_mseqr.ahb_master_sequence] Start tran sfering...
这个是不是说ahb_mseqr已经有ahb_master_sequence这个成员了啊,但是ahb_master_sequence是类,不是实例,怎么回事呢?ubus的demo仿真log也是一样的结果,但是就可以正常产生数据并发送到driver,有人仔细研究过这个demo吗?


我改在env类里面定义一个sequence成员ahb_mseq,然后在env的run_phase中用这个ahb_mseq.start(ahb_mseqr, null)
,driver就可以从sequencer收到数据了,但参数num_trans还是无法传递。
发表于 2014-6-25 14:46:45 | 显示全部楼层




    这个set 就指定sqr里面default sequence 为ahb_master_sequence  不代表这个sqr里面有ahb_master_sequence ,只是让sqr执行default sequence时候 执行的ahb_master_sequence  .而你set num_trans 到sqr里面的ahb_master_sequence,实际上sqr里面没有ahb_master_sequence这个member ,所以get不到
发表于 2014-6-25 16:35:59 | 显示全部楼层
1. 在sequencer里面定义一个num_trans
2. 在env::build_phase里面改为uvm_config_db#(int)::set(this, "t_env.ahb_mseqr","num_trans",2);
3. 在sequence里面将
if(!(uvm_config_db#(int)::get(null,get_full_name(),"num_trans", num_trans)));
         `uvm_info("No transaction fed:",{get_full_name(), " use default num_trans"}, UVM_LOW);
变成num_trans=m_sequencer.num_trans;

--good luck
 楼主| 发表于 2014-6-25 17:20:31 | 显示全部楼层
感谢各位朋友热情帮忙,昨晚在试的时候把那个main_phase改成run_phase就可以了,循环的次数随着我设置的值在增加,但是sequence里面仍然打印出了"no transaction fed..."的信息。暂时还不知道为什么。另外demo里面用main_phase却又可以
 楼主| 发表于 2014-6-25 21:33:10 | 显示全部楼层
犯了个低级错误,打印出了"no transaction fed..."的信息是因为if语句后面多了个分号:(
发表于 2014-6-25 21:53:47 | 显示全部楼层
哈哈,我说呢,如果你打开transaction的打印,估计就知道有没有set/get成功了吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-22 10:22 , Processed in 0.025843 second(s), 9 queries , Gzip On, Redis On.

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