it’s hard to answer without seeing any code, but in general, the DUT will have some latency, which means that the actual response transaction coming from the monitor will arrive at the scoreboard AFTER the expected transactiopn coming from your predictor.
This means that your scoreboard needs to implement a queue (or some other means of storage) to hold the expected result until such time as the actual response arrives. Only when both transactions have arrived can it then perform the comparison.
I’m sure there must be coded examples you can find online.
Take a look at the UVM Framework library that you can download from here :
Inside the uvmf_base_pkg\src folder are a number of scoreboard examples
The simplest is the in_order scoreboard, but there are other examples such as the out_of_order scoreboard, race scoreboards, etc