Jump to content

About the UVM objections.


Recommended Posts

Hi,

Recently, I have a new question about UVM objections, firstly, I know that in ubus example, the base sequence will call 'raise_objection' in pre_body() and call 'low_objection' in post_body(), but the problem is that if I commented out these lines, meaning never use UVM objection in our TB, I found that the sequence will never start, the simulation will be quit at 0 time point. This is different from OVM2.1.1, so I want to ask why this simulation time is holding at 0ns? Is OBJECTION the mandatory feature for us? Thanks for your helps!

BR

MEIXIAO

Link to comment
Share on other sites

Hi MEIXIAO,

Your observation is correct, I had a working example which does not start sequence when raise_objection is removed, As per raise_objection description in UVM Reference ‘Raise an objection to ending this phase’, which seems to be appropriate here. When raise_objection is commented, this phase ends immediately and all other phases are executed after this (including report).

Another case when only drop_objection is commented (with raise_objection in place), the sequence is executed (including body and post_body) and the run phase exists after default timeout with message

# UVM_ERROR: /base/uvm_phases.svh(1855) @ 9200000000000: reporter [PH_TIMEOUT] Default phase timeout of 9200000000000 hit. All processes are waiting, indicating a probable testbench issue. Phase 'run' ready to end

Hope this helps.

UVM Developers,

Please update if this behavior is intentional or not.

Thanks,

RC

Edited by R_C
Link to comment
Share on other sites

Hi All,

This is not the issue with objection mechnism. Timeout is coming because "run_phase" method of "uvm_test" is not ending properly. The default value for the phase_timeout limit is controlled by `UVM_DEFAULT_TIMEOUT macro and has a default timeout value of 9200 seconds. Therefore that timeout error message is being reported. This value can be changed by using the set_global_timeout() method.

When all objection are droped properly, an implicit global_stop_request() is called to end the test.

if anyone is not using objection mechnism then have to use global_stop_request() method from test to complete or end up the simulation.

Regards,

Barindra Ghosh

Link to comment
Share on other sites

Hi R_C

Short answer is it depends which version of UVM you are using...

The usage model in UVM1.0EA is to call global_stop_request() explicitly, and then raise/drop objections in sequences to hold off the stop request while the sequences are still running.

If you call global_stop_request() and do not raise an objection, the stop is executed and the simulation ends.

If you raise, but not drop objections, then the global_stop_request() is never executed, and the simulation continues until the Global Timeout.

Likewise if you never call global_stop_request(), then the simulation can only be terminated by the Global Timeout.

In UVM1.0p1, this behavior changes. A global_stop_request() is called automatically. So if you do not raise objections, then the automatic stop request is executed and the simulation ends.

So yes - in UVM1.0p1, and in the absence of any other simulation control, raise_objections are mandatory.

Link to comment
Share on other sites

  • 6 months later...

Hello,

I implement environment which drive few points of DUT based on log files.

There is no need for sequences. However, I can noticed that part of my drivers (in seperate agents of course) doesn't finish their sub tasks in the run_phase.

1) Do you know for a method how to enable all the drivers to finish their run_phase taks even though there is no objection mechanism?

2) Is the run_phase can stop iif some of the sequence do not raised objection even though other sequence which run in paralle does?

3) How should I use the global stop method?

Best Regards,

Hezi Naor

Link to comment
Share on other sites

1) Do you know for a method how to enable all the drivers to finish their run_phase taks even though there is no objection mechanism?

There is no such method. You'll have to put at least one objection raise/drop pair somewhere, or the phase/test will be terminated abortively. A good place is in a base class common to all tests. That way you don't have to think about objections in actual tests, and can code as if objections does not exist.

2) Is the run_phase can stop iif some of the sequence do not raised objection even though other sequence which run in paralle does?

If there are two sequences A and B running in parallel in the same phase, and A has a raise/drop pair and B does not, the phase/test will end when A drops the objection, because the entire phase process ensemble, including the process running sequence B, will be terminated.

3) How should I use the global stop method?

Don't use it. Just drop the phase objection instead.

By the way, it may be a good idea to run your file input through sequences. That way, the driver can be made generic and can serve other tests, i.e the file driven test will be just another test.

Erling

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...