No run_phase

I have a scoreboard in the testbench.
It gets DUT data from multiple agent’s monitors.
The transactions are pushed to scoreboard from monitors using the write_* methods
The scoreboard accumulates these transactions and processes the data only once at the end of the simulation.
I have put these checks in check_phase.

So, essentially, I have only check_phase implemented in the scoreboard without any run_phase.
I would like to know if is this a common (not having run_phase) in scoreboard?

PS: I understand the downside of processing only once at the end but this question is not about this

In reply to verif_learner:
A scoreboard with no run_phase is typical. Doing ALL checking in the check_phase is not so typical. Most of the time checks are made from the write_* methods.

In reply to verif_learner:
A scoreboard with no run_phase is typical. Doing ALL checking in the check_phase is not so typical. Most of the time checks are made from the write_* methods.

In reply to verif_learner:

Processing all data in check_phase is very expensive. You have to collect all data, store them in a queue/fifo, it wastes the simulation resources. Incase your simulation has large traffic/data, that will be problem. So, if possible, you check them on-the-fly in write method or run_phase.

In reply to dave_59:

In reply to verif_learner:
A scoreboard with no run_phase is typical. Doing ALL checking in the check_phase is not so typical. Most of the time checks are made from the write_* methods.

Doing it in check_phase is more of a convenience and to make scoreboard less complicated.
The issue is, in this design, transactions can come out of order.
This itself is not an issue but a lot of queue traversal has to happen.
Doing this every time a transaction is received is a performance killer.
So, I am doing it at the end where there is no ambiguity that a transaction has or has not come. If a transaction is expected and not present then it is an error, no ambiguities.

In reply to verif_learner:

If you have a good reason, then go for it. You were asking what was “common”.

Sometimes using a hash, or associative array is easer than traversing a queue.

In reply to dave_59:

In reply to verif_learner:
If you have a good reason, then go for it. You were asking what was “common”.
Sometimes using a hash, or associative array is easer than traversing a queue.

Thanks. Having reviewed my code, I was a bit confused due to lack of run_phase. So, the question was more to do with that then the check_phase itself. But I get the gist of what you are saying.

In reply to chris_le:

In reply to verif_learner:
Processing all data in check_phase is very expensive. You have to collect all data, store them in a queue/fifo, it wastes the simulation resources. Incase your simulation has large traffic/data, that will be problem. So, if possible, you check them on-the-fly in write method or run_phase.

Agree. Unfortunately, quite a bit of base coding is done now and don’t want to change that now.
This reminds me of what i learned years ago. Don’t code unless you put it on paper and see that it makes sense. I did not do that in this case.