|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
各位:
我还在折腾UVM。终于能用virtual sequence来启动register sequence了,但是又出来了一个新问题。我是这样操作的,先用poke将memory中填上数,然后用read读出来,结果,仿真在进行到read的时候就直接退出了,但是什么都不变,把read变成peek就能正确读出数据。这到底是为什么呀,我想dump个波形也dump不出来,感觉没地下手啊。
我的register sequence:
- class base_reg_seq extends uvm_reg_sequence;
- my_reg_block regmodel;
- `uvm_object_utils(base_reg_seq)
- function new(string name="base_reg_seq");
- super.new(name);
- endfunction : new
- rand uvm_reg_addr_t addr;
- rand uvm_reg_data_t data;
- virtual task body();
- starting_phase.raise_objection(this);
- uvm_status_e status;
- addr=32'h0;
- data=32'h1;
- repeat(1024) begin
- regmodel.n_ram.poke(status,addr,data);
- addr++;
- data += 32'h10;
- end
- addr=32'h0;
- repeat(1024) begin
- $display("=====Read data=====");
- regmodel.n_ram.read(status,addr,data);
- $display("Read Method : %0h@%0h",data,addr);
- addr++;
- end
- starting_phase.drop_objection(this);
- endtask : body()
- endclass : base_reg_seq
- class vsequence extends uvm_sequence;
- `uvm_object_utils(vsequence)
- `uvm_declare_p_sequencer(vsequencer)
- base_reg_seq reg_seq
- function new(string name="vsequence");
- super.new(name);
- endfunction : new
- virtual task body();
- reg_seq=base_reg_seq::type_id::create("reg_seq");
- reg_seq.regmodel=p_sequencer.regmodel;
- reg_seq.start(null);
- endtask : body
- endclass : vsequence
复制代码 仿真的话,能出来第一个“=====Read data=====”,之后就仿真结束了,工具也没给出其他多余的信息。如果将read换成peek,就能正确读1024次。反正不管哪种方法,波形都dump不出,peek是不花仿真时间的,这个可以理解,那么read出问题又是为什么呢? |
|