Jump to content

Virtual Sequence not work in some condition with uvm1.1


Recommended Posts

Currently we download UVM1.1 and run simulation with it in our project, some tests passed with uvm1.0p1, but failed with uvm1.1.

We have used three methods to issue sequence in virtual sequence. Below method1 and method2 work, method3 not work(can't get item in driver).

method1: `uvm_do_on_with(....)

method2:

step1: wr_seq = new ("test_seq")

step2: randomize wr_seq

step3: wr_seq.start(p_sequencer.wr_seqr)

method3:

step1: `uvm_create_on(wr_seq, p_sequencer.wr_seqr)

step2: randomize wr_seq

step3: `uvm_send(wr_seq)

Link to comment
Share on other sites

Could you please run the ubus example? uvm_create_on in virtual sequence not work.

test case name: test_2m_4s_azhang

The virtual sequence test_2m_4s_azhang_vseq used in this testcase.

// This way, can work

`uvm_do_on_with(read_byte_seq0, p_sequencer.seqr1, {read_byte_seq0.transmit_del == 0; })

// This way can not work

`uvm_create_on(read_byte_seq0, p_sequencer.seqr1)

assert(read_byte_seq0.randomize() with {read_byte_seq0.transmit_del == 0; })

`uvm_send(read_byte_seq0)

You can try this simulation with command:

% make -f Makefile.ius

The simulation can not exit normally.

Link to comment
Share on other sites

ok,

the issue is that even when you initialized the item using `uvm_create_on with a SQR specified the uvm_send() sends the sequence to the local sequencer. if you simply replace uvm_send with an appropriate seq.start(targetsequener,this) your example works (probably) as expected.

/uwe

--- a/ubus/examples/test_lib.sv

+++ b/ubus/examples/test_lib.sv

@@ -231,7 +231,7 @@ class test_2m_4s_azhang_vseq extends uvm_sequence;

//// `uvm_do_on_with(read_byte_seq0, p_sequencer.seqr1, {read_byte_seq0.transmit_del == 0; })

`uvm_create_on(read_byte_seq0, p_sequencer.seqr1)

assert(read_byte_seq0.randomize() with {read_byte_seq0.transmit_del == 0; })

- `uvm_send(read_byte_seq0)

+ read_byte_seq0.start(p_sequencer.seqr1,this);

addr_check = read_byte_seq0.rsp.addr;

m_data0_check = read_byte_seq0.rsp.data[0] + 1;

// WRITE MODIFIED READ DATA

Link to comment
Share on other sites

I know it work if it replaced with + read_byte_seq0.start(p_sequencer.seqr1,this);

I said in this thread 'uvm_do_on_with(....)' and 'seq.start(seqr, this )' all works.

the `uvm_send(seq) not work, but this work in UVM1.0p1.

i added http://eda.org/svdb/view.php?id=3633 to track this. it seems only the do_on familiy of macros honors the sequencer of the item correctly.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...