Transition Coverage for multiple write port data

Hi all,


class sb extends uvm_scourboard;
  write_tr wr_q[];
  read_tr  rd_q[];
  bit [1:0] tr_type;

//some code....with analysis port connection and declaration
  function void write_wr_port(wr_tr item);
    //....
    bit wr_type;     //identified type of write transaction either wr_cmd or wr_resp
    wr_q.push_back(item);
    wr_type = set_type(item);   //define which type used;
    tr_type = set_type ? 0:1;
    cg1.sample();
  endfunction
  function void write_rd_port(rd_tr item);
    //....
    bit rd_type;     //identified type of read transaction either rd_cmd or rd_resp
    rd_q.push_back(item);
    rd_type = set_type(item);   //define which type used;
    tr_type = set_type ? 2:3;
    cg1.sample();
  endfunction

  coverage cg1(ref wr_tr wr_t, ref rd_tr rd_t);
    transition_cg: coverpoint tr_type{
        bins wr_rd = (1=>2=>3=>1);
        //...same as above other transition bins
    }
  endgroup
endclass

I go with above mention code to evaluate mentioned transition coverage But here the problem was both write_.*_port used the sample() method due to that both port samples multiple times and transition does not cover as per acceptance. If any one has any idea to resolve this issue???