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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: doogo

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

[复制链接]
发表于 2014-10-18 09:36:18 | 显示全部楼层
想请教楼主一个SV的randomize的顺序问题。

一个类里还有一个随机类的成员,那么在这个合成类pre_randomize, randomize, post_randomize的时候,其和随机类成员的这三个随机function,在时序上是什么关系呢?比如说是合成类先执行post_randomize(),然后再执行类成员的post_randomize()吗?

谢谢!
 楼主| 发表于 2014-10-18 12:37:13 | 显示全部楼层



class A;
B b_inst;
endclass


当A.randomize调用时:
A.pre_randomize();
b_inst.pre_randomize();
A.randomize();
b_inst.randomize();

A.post_randomize();
b_inst.post_randomize()
发表于 2014-10-19 00:06:36 | 显示全部楼层


class A;
B b_inst;
endclass


当A.randomize调用时:
A.pre_randomize();
b_inst.pre_rando ...
doogo 发表于 2014-10-18 12:37



--------------------------------------------------------
如果
class A;B b_inst[4];

endclass

这样是否 foreach (b_inst) 会代替上面的b_inst?
 楼主| 发表于 2014-10-19 07:17:54 | 显示全部楼层


--------------------------------------------------------
如果
class A;B b_inst[4];

endclass ...
tbb2009 发表于 2014-10-19 00:06



是的。
发表于 2014-10-19 08:44:20 | 显示全部楼层
本帖最后由 tbb2009 于 2014-10-19 08:46 编辑



另外,如果在A.pre_randomize()里面手动调用了b_inst.randomize(). 那么在A.randomize()的时候,还会再次执行b_inst.randomize()吗?b_inst.post_randomize() 又会在哪些地方被执行呢?

谢谢
 楼主| 发表于 2014-10-22 11:25:16 | 显示全部楼层


另外,如果在A.pre_randomize()里面手动调用了b_inst.randomize(). 那么在A.randomize()的时候,还会再 ...
tbb2009 发表于 2014-10-19 08:44



b_inst的pre,post及randomize都会执行两次
发表于 2014-10-22 17:06:01 | 显示全部楼层
强哥,我想问一个关于sequence的问题:
我在virtual sequence中通过 `uvm_do_on(eth_seq,        p_sequencer.eth_sqr) 方式启动了一个发送以太网帧的sequence,如果我还想在这个以太网帧sequence内部,通过寄存器模型修改DUT中的寄存器变量值,可以实现吗?
我想直接从以太网帧sequence中通过reg_seq.start(p_sequencer.reg_bus_sqr)方式发起另一个读写寄存器的sequence或者直接通过p_sequencer.p_reg_model.***.write方式实现,但是Questa_sim中运行时会报错Null instance encountered when dereferencing       body/this*.p_sequencer。
 楼主| 发表于 2014-10-22 18:33:06 | 显示全部楼层


强哥,我想问一个关于sequence的问题:
我在virtual sequence中通过 `uvm_do_on(eth_seq,        p_sequencer.eth ...
watercube 发表于 2014-10-22 17:06



在eth_sequence中
reg_model p_rm;
task body
   //send some pkt
   p_rm.xxxx.write();
   //send some pkt
endtask
   

在virtual sequence中:
task body();
    eth_sequence eth_seq;
    eth_seq = new();
    eth_seq.p_rm = p_sequencer.p_rm;
    eth_seq.start(p_sequence.eth_sqr);
endtask
发表于 2014-10-22 21:09:59 | 显示全部楼层
不错不错222
发表于 2014-10-23 12:21:06 | 显示全部楼层
回复 138# doogo


   





按您提示的方法实现了!很多知识其实您的书里面都有涉及到,但就是到自己需要的时候还是不能灵活的使用。还需要多实践。再次感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-12-19 00:58 , Processed in 0.021037 second(s), 7 queries , Gzip On, Redis On.

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