The run_phase function in my scoreboard is not executing. I just put a $display just to make sure there is no verbosity gotcha on my side.
Testbench topology shows that the scoreboard is instantiated and I also get messages from the write implementation.
Its only the run_phase that seems to have an issue.
You didn’t see message in check_phase, maybe your run_phase hadn’t finished yet. Why don’t you print message in your run_phase? Did your simulation finish?
In reply to verif_learner:
You didn’t see message in check_phase, maybe your run_phase hadn’t finished yet. Why don’t you print message in your run_phase? Did your simulation finish?
Yes, simulation completed. Hence I assume that all the phasing is completed.
In reply to verif_learner:
Did you see the following line in your simulation log-file:
reporter [TEST_DONE] ‘run’ phase is ready to proceed to the ‘extract’ phase
This is an indication the run_phase has been completed.
Again could you please show your run_phase implementation.
No. I don’t see that.
This is what I see towards the end.
INT TST SEQ
$finish called from file “…/tb/dma_tb.sv”, line 312.
Looks like testbench is executing $finish and not allowing UVM to finish gracefully.
For my understanding, when $finish is executed, I assume simulation would end immediately irrespective of any other threads active
You should lokk on line 312 of file …/tb/dma_tb.sv if there is a $finish coded.
In an UVM environment you should never code a $finish individually.
Unfortunately you did not show the run_phase of your scoreboard.
In reply to verif_learner:
You should lokk on line 312 of file …/tb/dma_tb.sv if there is a $finish coded.
In an UVM environment you should never code a $finish individually.
Unfortunately you did not show the run_phase of your scoreboard.
Thanks. I think I am getting a hang of the issue. I will modify the code and handle this purely using objections.
On the run_phase, I don’t have a run_phase in the scoreboard (this was debated in another thread. So, I wont go into details) here.
You should understand that performing the checking in the check_phase needs a lot of resources, slowing down your simulation.
The recommended way is to do the checking on the fly in the run_phase.
I believe what chr_sue mentioned is about storing all transactions and checking them at check_phase. Basically, it will consume big simulation memory resources especially when you have a lot of data traffics. Your simulation may slow down or crash. Therefore, the best way to check is on-the-fly.
If you do your checking in the check_phase you have to store all values you want to compare. This might be several millions of complex data. This requires a lot of storage in your computer.
Thanks. You are correct. With help of debug prints I could figure out the issue that the If statement was always false, hence run_phase did not executed. Now I have corrected.