MCDF-实验3


  • 不能放在这,因为会提早结束,join_any,发送完一次数据就会结束仿真,后面数据没办法继续跑。数据产生完就结束仿真。


1.先打印随机化后的req对象

2.generator把req的数据通过信箱发给initiator里

3.initiator拿到req后进行写数据传输并打印要写的数据,再把rsp.rsp置位1。

4.并行执行三个agent的run,每个run里包含了generator和initiator的run,因此是并行同时随机化先产生并打印了三个channel的req。

打印输出完req的数据,再排队执行写入数据,每写一个就打印发送的数据是什么。

一次只能发送一个通道的数据。

答案:①restart后,随机化后的数据是一样的。

②vsim -novopt -solvefaildebug -sv_seed 0 work.tb1

添加了随机种子sv_seed 0之后,数据与之前相同。

③vsim -novopt -solvefaildebug -sv_seed random work.tb1

sv_seed random会让数据不同


答:会有1200个对象是因为,basic_test中ntrans=200,因此三个channel,每个channel要执行200次send_trans,那么就req=new()了200次建立了200个对象,而每次mailbox握手之后,在initiator里都要clone原本的req对象给rsp,因此一个channel就要创建400次对象,那么一共1200个对象。

同一时刻存在的chnl_trans的对象个数有多种情况。4-6个,最终会维持在6个。


generator被从agent里拿出来了。

通过mailbox握手进行传递req对象中trans类的成员变量,因为initiator里定义的chnl_trans类型的mailbox没有例化,二者要握手建立连接指向同一个对象,因此要让句柄一起指向generator里创建例化的对象。


随机化的过程在tb1中,是在generator里的send_trans()任务中,现在在tb2中是单独放在root_test中的do_config函数中,更方便产生随机数据。


继承父类方法,super.do_config()。


使用了gen_stop_e标志位,比如产生了十多个数据后,停止了generator,导致gen[i]没有跑完,就取不会三把钥匙,不能在run_stop_callback()任务中停止仿真,因此只要等待fifo把数据排空,即余量ch_margin为32那么就可以停止仿真了。


  • vsim -novopt -solvefaildebug -sv_seed random +TESTNAME=chnl_root_test work.tb2

  • vsim -novopt -solvefaildebug -sv_seed random +TESTNAME=chnl_basic_test work.tb2

  • vsim -novopt -solvefaildebug -sv_seed random +TESTNAME=chnl_fifo_full_test work.tb2


 

 



比较mcdt输出的数据和channel输入fifo的数据,将二者分别通过mailbox传给chnl_checker()。


  • 9
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值