微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > 求助:什么情况下仿真会卡在`uvm_do_with(),不往下执行了?

求助:什么情况下仿真会卡在`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()的组合来代替,结果是一样的。不知道有没有谁遇到过这种情况,仿真工具只出状况,不报错,我真的不知道哪里有问题了。

时间在增加的话,那就应该不是卡着了,估计是没有产生需要的激励,最好把内部的数据打印出来看看。

找到问题所在了,因为采用的是virtual sequence,在connect phase的时候连错了sequencer,然后无论是用`uvm_do_with()还是`uvm_create()都没办法产生正确的序列。应该就是gaurson所说的激励产生有问题了

能分享下连接的代码吗?我也遇到同样的问题,而且发现virtual sequencer中connect_phase中的sequencer的连接没什么问题。

test的代码:

  1. `include "tb.sv"

  2. class base_test extends uvm_test;
  3. `uvm_component_utils(base_test)
  4. tbtb0;
  5. vsequencer vsqr;
  6. function new(string name="base_test",uvm_component parent);
  7. super.new(name,parent);
  8. endfunction:new
  9. virtual function void build_phase(uvm_phase phase);
  10. super.build_phase(phase);
  11. tb0= tb::type_id::create("tb0",this);
  12. vsqr = vsequencer::type_id::create("vsqr",this);
  13. //uvm_config_int::set(this,"tb0.apb0.bus_monitor","coverage_enable",0);
  14. uvm_config_db#(uvm_object_wrapper)::set(this,"vsqr.run_phase","default_sequence",apb_vdo_seq::type_id::get());
  15. endfunction : build_phase
  16. virtual function void connect_phase(uvm_phase phase);
  17. vsqr.apb_sqr=tb0.apb0.master.sequencer;
  18. vsqr.vdo_sqr=tb0.vdo0.master.sequencer;
  19. vsqr.regmodel=tb0.regmodel;
  20. endfunction : connect_phase
  21. virtual task run_phase(uvm_phase phase);
  22. endtask : run_phase
  23. endclass : base_test

复制代码

学习学习

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top