Search the Community
Showing results for tags 'uvm_do_with'.
-
Following is the sequence code class basic_sequence extends from uvm_sequence(#sequence_item); sequence_item item; task body() fp1 =fscanf("abc.txt", addr, data); `uvm_do_with(item,{ item.addr = addr; item.data = data; }); endtask endclass I have constrained addr and data from file reading data. It is not happening with the above code. data_item is getting a random value. I have written a user-defined task to solve this problem like below task do_rw(int addr, int data); begin item = sequence_item::type_id::create("item",,get_full_name()); item.wr_adr.rand_mode(0); item.wr_dat.rand_mode(0); item.wr_adr = addr; item.wr_dat = data; start_item(item); randomize(if_item); finish_item(item); end endtask inplace of uvm_do_with call uder defined do_rw task like below fp1 = fscanf("abc.txt", addr, data); while(!eof(fp1) { do_rw(addr, data); } This will work. I used above solution to work. I really don't understand why uvm is not supporting it with uvm_do_with. any answers for fit?? Thanks, Satya
- 5 replies
-
- uvm_do_with
- sequence
-
(and 1 more)
Tagged with:
-
Hi, all I have met such a problem, when i use uvm_do_with to start item, then it is stuck at uvm_do_with. The hierarchy struct of the sequence is v_seq |- cfg_seq |- sub_seq |- slv_seq The hierarchy struct of the sequencer is v_sqr |- cfg_sqr |- sub_sqr |- slv_sqr pieces of code in test.sv task run_phase(uvm_phase phase); //uvm_config_db#(uvm_phase)::set(this, "*", "starting_phase", phase); for (int i = 0; i < num; i++) begin fork begin env.v_seq[i].starting_phase = phase; env.v_seq[i].start(env.subenv[i].v_sqr); end join end //set a drain-time for the environment if desired phase.phase_done.set_drain_time(this, 50); endtask : run_phase pieces of code in v_seq virtual task body() cfg_seq.start(p_sequencer.cfg_sqr, this); fork begin : sub_seq // thread1 sub_seq.start(p_sequencer.sub_sqr, this); end //begin : slave_seq // thread2 // slv_seq.start(p_sequencer.slv_sqr, this); //end join endtask ... // declare vsequencer as the p_sequencer of vsequence `uvm_declare_p_sequencer(vsequencer) pieces of code in sub_seq virtual task body(); `uvm_info(get_type_name(),$sformatf("%0s starting...", get_sequence_path()), UVM_LOW) repeat(10) begin `uvm_do_with(req, { req.addr == `CFG_ADDR; req.req_typ == MWr; }) get_response(rsp); end endtask : body pieces of code in v_sqr class vsequencer extends uvm_sequencer; ... function void build_phase(uvm_phase phase); super.build_phase(phase); // instantiates sequencers and config_db cfg_sqr = config_sequencer::type_id::create("cfg_sqr", this); sub_sqr = sub_sequencer::type_id::create("sub_sqr", this); slv_sqr = slave_sequencer::type_id::create("slv_sqr", this); endfunction : build_phase ... endclass: vsequencer I find that it is stuck at line m_wait_for_arbitration_completed(req_s.request_id); of task wait_for_grant() in file uvm_sequencer_base.svh. Could anybody tell me the reason? Thanks in advance!