I've a UVM test env where both golden C++ model and RTL are instantiated. In some cases my C++ model and RTL outputs will go out of order as C++ model is not cycle accurate. For in-order outputs, I just have infinite queues in my scoreboard. Whenever I see output in RTL interface, I try to match it with the head of c++ model-output queue. Here the assumption is outputs from c++ model will always come before RTL output as there is no notion of time in c++ model.
However in-order output between golden model and RTL is not guaranteed (as an example, arbiter). In that case, what is the standard way to write scoreboard and checking codes in UVM?