hugemx830202 Posted April 20, 2011 Report Posted April 20, 2011 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 Quote
R_C1363912821 Posted April 20, 2011 Report Posted April 20, 2011 (edited) 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 April 20, 2011 by R_C Quote
barindraju Posted April 20, 2011 Report Posted April 20, 2011 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 Quote
R_C1363912821 Posted April 20, 2011 Report Posted April 20, 2011 The behavior when raise_objection is present (drop_objection removed) is expected, the point to confirm is when raise_objection is not used the sequence is not started and all subsequent sub-phase (reset, configure, main,....) and report phase are executed. Does this means that raise_objection is mandatory? Quote
Bart Posted April 20, 2011 Report Posted April 20, 2011 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. Quote
R_C1363912821 Posted April 20, 2011 Report Posted April 20, 2011 So yes - in UVM1.0p1, and in the absence of any other simulation control, raise_objections are mandatory. Hi Bart, Thanks for the reply, yes i was looking of UVM 1.0p1. BR, RC Quote
hezin Posted November 6, 2011 Report Posted November 6, 2011 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 Quote
Erling Posted November 7, 2011 Report Posted November 7, 2011 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 Quote
Recommended Posts
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.