Handling delay by using two monitors instead of buffer

Hi,
I dont understand how to use two analysis ports. In my case I have to compute the output at a particular valid signal but send it to scoreboard after a delay of three clock cycles based another signal flag.
This is how i am currently implementing using the buffer approach but i am curious to know how to implement using two ports to create a new class of trasaction then use that newly created to class trasaction as temparory storage to store the prev transaction
instead.

class normal_add_ref_monitor_after extends uvm_monitor;
`uvm_component_utils(normal_add_ref_monitor_after)
jelly_bean_transaction jb_txm;
jelly_bean_transaction jb_txm_q[$];
virtual simpleadder_if jb_vi;
uvm_analysis_port#(jelly_bean_transaction) ref_mon_a_port_after;
function new(string name="normal_add_ref_monitor_after",uvm_component parent);
super.new(name,parent);
endfunction :new
function void build_phase(uvm_phase phase);
super.build_phase(phase);
void'(uvm_resource_db#(virtual simpleadder_if)::read_by_name(.scope("ifs"), .name("simpleadder_if"), .val(jb_vi)));
ref_mon_a_port_after=new("ref_mon_a_port_after",this);
endfunction:build_phase
task run_phase(uvm_phase phase);
jb_txm=jelly_bean_transaction::type_id::create("jb_txm");
fork
forever begin 
@(posedge jb_vi.clk)

if(jb_vi.valid == 1) begin
jelly_bean_transaction jb_txmq = new;

jb_txmq.a = jb_vi.a;
jb_txmq.b=jb_vi.b;
jb_txmq.c=jb_txmq.a +jb_txmq.b ;
// add_mon_ref_add_result();
jb_txm_q.push_back(jb_txmq);
$display("queue = %p",jb_txm_q);




end
end
forever begin 
@(posedge jb_vi.clk) 
if(jb_vi.valid_out == 1) begin
jelly_bean_transaction jb_txmq = jb_txm_q[0];
ref_mon_a_port_after.write(jb_txmq);
`uvm_info("input_pop",$sformatf("value: %0d", jb_txm_q.pop_front()),UVM_LOW);

end
end // forever begin
join
endtask:run_phase
endclass:normal_add_ref_monitor_after

In reply to pallavi rajanna:

In my eyes you do not need 2 analysis ports. You can put all your data into 1 transaction, the input data as well as the output data. Then you transmit this transaction to the scoreboard. In the scorboard you can perform the functionality to calculate the expetd result and compare it with the observed result.