求助:什么情况下仿真会卡在`uvm_do_with(),不往下执行了?
时间:10-02
整理:3721RD
点击:
各位:
最近正在被UVM折腾,最近的一个问题是使用virtual sequence的时候,仿真会在某个地方一直卡着,然后仿真时间在增加,而实际上却没有任何激励施加到DUT上。本来我以为是我写virtual sequence弄错了,后来跟其他人核对了一下,virtual sequence那部分确实没有问题,那么我想知道,什么情况下,仿真会在执行到`uvm_do_with()的时候卡在那里动不了了呢?其实,不光是`uvm_do_with(),我后来把这个宏拆开,用`uvm_create()与`uvm_rand_send()的组合来代替,结果是一样的。不知道有没有谁遇到过这种情况,仿真工具只出状况,不报错,我真的不知道哪里有问题了。
最近正在被UVM折腾,最近的一个问题是使用virtual sequence的时候,仿真会在某个地方一直卡着,然后仿真时间在增加,而实际上却没有任何激励施加到DUT上。本来我以为是我写virtual sequence弄错了,后来跟其他人核对了一下,virtual sequence那部分确实没有问题,那么我想知道,什么情况下,仿真会在执行到`uvm_do_with()的时候卡在那里动不了了呢?其实,不光是`uvm_do_with(),我后来把这个宏拆开,用`uvm_create()与`uvm_rand_send()的组合来代替,结果是一样的。不知道有没有谁遇到过这种情况,仿真工具只出状况,不报错,我真的不知道哪里有问题了。
时间在增加的话,那就应该不是卡着了,估计是没有产生需要的激励,最好把内部的数据打印出来看看。
找到问题所在了,因为采用的是virtual sequence,在connect phase的时候连错了sequencer,然后无论是用`uvm_do_with()还是`uvm_create()都没办法产生正确的序列。应该就是gaurson所说的激励产生有问题了
能分享下连接的代码吗?我也遇到同样的问题,而且发现virtual sequencer中connect_phase中的sequencer的连接没什么问题。
test的代码:
- `include "tb.sv"
- class base_test extends uvm_test;
- `uvm_component_utils(base_test)
- tbtb0;
- vsequencer vsqr;
- function new(string name="base_test",uvm_component parent);
- super.new(name,parent);
- endfunction:new
- virtual function void build_phase(uvm_phase phase);
- super.build_phase(phase);
- tb0= tb::type_id::create("tb0",this);
- vsqr = vsequencer::type_id::create("vsqr",this);
- //uvm_config_int::set(this,"tb0.apb0.bus_monitor","coverage_enable",0);
- uvm_config_db#(uvm_object_wrapper)::set(this,"vsqr.run_phase","default_sequence",apb_vdo_seq::type_id::get());
- endfunction : build_phase
- virtual function void connect_phase(uvm_phase phase);
- vsqr.apb_sqr=tb0.apb0.master.sequencer;
- vsqr.vdo_sqr=tb0.vdo0.master.sequencer;
- vsqr.regmodel=tb0.regmodel;
- endfunction : connect_phase
- virtual task run_phase(uvm_phase phase);
- endtask : run_phase
- endclass : base_test
学习学习