Objection source count vs. total count

Hi,

I was confused with the relationship between objection Source Count and Total Count as I dumped the objections by EDA tools. (I was working on Simvision)

Suppose a task to drop all objections for phase is defined as below,

task drop_all_objection(uvm_phase phase);
  uvm_objection objection;
  uvm_object    object_list[$];
 
  // Fetching the objection from current phase
  objection = phase.get_objection();
 
  // Collecting all the objects which doesn't drop the objection 
  objection.get_objectors(object_list);
 
  // Dropping the objection forcefully
  foreach(object_list*) begin
    while(objection.get_objection_count(object_list[i]) != 0) begin
      objection.drop_objection(object_list[i]);
    end
  end
endtask: drop_all_objection

In main_phase(),
Before calling [i]drop_all_objection(phase)*, the objections for run and main_phase are listed as, (Objections for other phases are 0)

objections to phase "common.run"
UVM_INFO /tools/methodology/UVM/CDNS-1.2/sv/src/base/uvm_objection.svh(1072)@ 69780 ns: run [UVM/OBJ/DISPLAY] The total objection count is 7

| Source Count | Total Count | Object                 |
|--------------+-------------+------------------------|
|            0 |           7 | uvm_top                |
|            1 |           1 |   ex_seq               |
|            0 |           6 |   uvm_test_top         |
|            0 |           6 |     dut_env            |
|            0 |           6 |       apb_master_agent |
|            0 |           6 |         sequencer      |
|            1 |           1 |           a_seq        |
|            1 |           1 |           b_seq        |
|            1 |           1 |           c_seq        |
|            1 |           1 |           d_seq        |
|--------------+-------------+------------------------|

objections to phase "uvm.uvm_sched.main"
UVM_INFO /tools/methodology/UVM/CDNS-1.2/sv/src/base/uvm_objection.svh(1072)@ 69780 ns: main_objection [UVM/OBJ/DISPLAY] The total objection count is 4

| Source Count | Total Count | Object                 |
|--------------+-------------+------------------------|
|            0 |           4 | uvm_top                |
|            1 |           4 |   uvm_test_top         |
|            0 |           3 |     dut_env            |
|            0 |           3 |       apb_master_agent |
|            2 |           2 |         driver         |
|            1 |           1 |         monitor        |
|--------------+-------------+------------------------|

After calling drop_all_objection(phase), the objections for run and main_phase are listed as, (Objections for other phases are 0)

objections to phase "common.run"
UVM_INFO /tools/methodology/UVM/CDNS-1.2/sv/src/base/uvm_objection.svh(1072)@ 69780 ns: run [UVM/OBJ/DISPLAY] The total objection count is 7

| Source Count | Total Count | Object                 |
|--------------+-------------+------------------------|
|            0 |           7 | uvm_top                |
|            1 |           1 |   ex_seq               |
|            0 |           6 |   uvm_test_top         |
|            0 |           6 |     dut_env            |
|            0 |           6 |       apb_master_agent |
|            0 |           6 |         sequencer      |
|            1 |           1 |           a_seq        |
|            1 |           1 |           b_seq        |
|            1 |           1 |           c_seq        |
|            1 |           1 |           d_seq        |
|--------------+-------------+------------------------|

objections to phase "uvm.uvm_sched.main"
UVM_INFO /tools/methodology/UVM/CDNS-1.2/sv/src/base/uvm_objection.svh(1072)@ 69780 ns: main_objection [UVM/OBJ/DISPLAY] The total objection count is 2

| Source Count | Total Count | Object                 |
|--------------+-------------+------------------------|
|            0 |           2 | uvm_top                |
|            0 |           2 |   uvm_test_top         |
|            0 |           2 |     dut_env            |
|            0 |           2 |       apb_master_agent |
|--------------+-------------+------------------------|

So here are 2 questions,

  1. For common.run phase, the Total Count is 7 while the sum of Source Count is 5, why?
  2. For main phase, the Total Count is 2 while all the Source Count are 0. As my understanding, the Total Count should be counted base on the contribution of all the Source Count. Then why the total count is still non-zero while all the source counts are zero?

Anyone can help on this?

Thanks.

In reply to kooder:

In the command line us the following option:

+UVM_OBJECTION_TRACE

And then in the log file look for OBJ_TR*. You will get to know which component are holding the objection.

| Source Count | Total Count | Object                 |
|--------------+-------------+------------------------|
|            0 |           7 | uvm_top                |
|            1 |           1 |   ex_seq               |
|            0 |           6 |   uvm_test_top         |
|            0 |           6 |     dut_env            |
|            0 |           6 |       apb_master_agent |
|            0 |           6 |         sequencer      |
|            1 |           1 |           a_seq        |
|            1 |           1 |           b_seq        |
|            1 |           1 |           c_seq        |
|            1 |           1 |           d_seq        |
|--------------+-------------+------------------------|

sequencer has 6 undropped objection, but here just list 4 source. The rest is not printed, I think. If you check the count number above sequencer, they are good.

In reply to iostion:

What do you mean by ‘above sequencer’? Could you help to give more details on how to check that count?
Thanks.