微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > 求助:UVM中peek与read的区别这样大么?

求助:UVM中peek与read的区别这样大么?

时间:10-02 整理:3721RD 点击:
各位:
我还在折腾UVM。终于能用virtual sequence来启动register sequence了,但是又出来了一个新问题。我是这样操作的,先用poke将memory中填上数,然后用read读出来,结果,仿真在进行到read的时候就直接退出了,但是什么都不变,把read变成peek就能正确读出数据。这到底是为什么呀,我想dump个波形也dump不出来,感觉没地下手啊。
我的register sequence:

  1. class base_reg_seq extends uvm_reg_sequence;
  2. my_reg_block regmodel;
  3. `uvm_object_utils(base_reg_seq)
  4. function new(string name="base_reg_seq");
  5. super.new(name);
  6. endfunction : new
  7. rand uvm_reg_addr_t addr;
  8. rand uvm_reg_data_t data;
  9. virtual task body();
  10. starting_phase.raise_objection(this);
  11. uvm_status_e status;
  12. addr=32'h0;
  13. data=32'h1;
  14. repeat(1024) begin
  15. regmodel.n_ram.poke(status,addr,data);
  16. addr++;
  17. data += 32'h10;
  18. end
  19. addr=32'h0;
  20. repeat(1024) begin
  21. $display("=====Read data=====");
  22. regmodel.n_ram.read(status,addr,data);
  23. $display("Read Method : %0h@%0h",data,addr);
  24. addr++;
  25. end
  26. starting_phase.drop_objection(this);
  27. endtask : body()
  28. endclass : base_reg_seq

  29. class vsequence extends uvm_sequence;
  30. `uvm_object_utils(vsequence)
  31. `uvm_declare_p_sequencer(vsequencer)
  32. base_reg_seq reg_seq
  33. function new(string name="vsequence");
  34. super.new(name);
  35. endfunction : new
  36. virtual task body();
  37. reg_seq=base_reg_seq::type_id::create("reg_seq");
  38. reg_seq.regmodel=p_sequencer.regmodel;
  39. reg_seq.start(null);
  40. endtask : body
  41. endclass : vsequence

复制代码

仿真的话,能出来第一个“=====Read data=====”,之后就仿真结束了,工具也没给出其他多余的信息。如果将read换成peek,就能正确读1024次。反正不管哪种方法,波形都dump不出,peek是不花仿真时间的,这个可以理解,那么read出问题又是为什么呢?

同求解释

poke和peek都是backdoor操作,所以波形上是看不出来的。至于read操作错误,期待高手。

试下UVM_FULL看下打印信息吧。看是不是你sequence 启动的phase和driver是不是在同一个phase。或者是driver错了,或者是reg_model set_sequencer不对,这个情况很多。你懂得。你给的代码太少了。

有没有可能你适配到总线出错,导致使用front_door的操作就会结束

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

网站地图

Top