How about something like the following in your driver:
task run_phase(uvm_phase phase);
data_seq_item req;
bit[9:0] data;
forever begin
seq_item_port.get_next_item(req);
data = convert_to_8b10b(req.data); // Function call to do the 8b10b conversion
// PISO code - clocked by the virtual interface - or you call a task that
// does the PISO taking data as the input.
seq_item_port.item_done();
end
endtask: run_phase
function bit[9:0] convert_to_8b10b(bit[7:0] data);
// Conversion function
endfunction: convert_to_8b10b