multi stream scenario (vmm_ms_scenario) 几点补充

1.  vmm_ms_scenario 也可以利用factory 模式

class cpu_rand_scenario extends vmm_ms_scenario;

      cpu_trans  blueprint;

      `vmm_scenario_new(cpu_rand_scenario)

      function new()

                  blueprint=new();            // factory  should be in constructor, 没有替代的blueprint就用自己。

      endfunction

      `vmm_scenario_member_begin(cpu_rand_scenario)

          `vmm_scenario_member_vmm_data(blueprint, DO_ALL,DO_DEEP)

      `vmm_scenario_member_end(cpu_rand_scenario)

     virtual task execute(ref int n);

           cpu_trans  tr;

           ....

          $cast(tr,blueprint.copy());

          assert(tr.randomize());

           chan.put(tr);

           n++;

     endtask

endclass


这样factory就可以实现了(类似于atomic gen)

 

2. vmm_ms_scenario 中可以引用资源,不过new函数要带上相关的handler 参数。常用的资源有 ral, cfg, mam。

 

3. vmm_ms_scenario_gen 在start_xactor后会自动执行main,然后摸到scenario中执行execute函数。注意在execute 前会先设置 n 为0. 在执行完execute task 后,n_insts才会加上n, 然后判断 n_inst是否超出 stop_after_n_insts 从而决定是否发出DONE 的notify。

4. vmm_ms_scenario 的基类是 vmm_scenario, 因此 vmm_scenario 的函数也可使用,譬如

    set_parent_scenario(vmm_scenario parent) 

    get_parent_scenario()

5.  在调用顶层scenario(即注册的scenario)中的execute函数之前会对顶层scenario进行randomize,子scenario不会被randomize,为了重用,不建议在ms_scenario中定义rand 成员,而是定义一个类,然后显示的randomize。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值