anchor.diff:      end
       else begin
         dbprint(4, $format("Deparser:rl_deparse_payload ", fshow(v)));
  -      deparse_send_r <= v;
  +      let data = ByteStream { sop: data_in_tmp[1].sop,
  +                              eop: data_in_tmp[1].eop,
  +                              data: data_in_tmp[1].data,
  +                              mask: data_in_tmp[1].mask,
  +                              user: data_in_tmp[1].user };
  +      deparse_send_r <= data;
         flit_ff.enq(?);
       end
     endrule
   
     // reset all temporary states at last beat
  -  rule rl_reset if (deparse_done[1] && eop_this_cycle);
  -    // forward data_in to data_out
  -    let v = data_in_ff.first;
  -    data_in_ff.deq;
  +  rule rl_reset if (deparse_done[1] && data_in_tmp[1].eop);
  +    data_in_tmp[1] <= defaultValue;
       rg_tmp[1] <= 0;
       rg_buffered[2] <= 0;
       rg_processed[2] <= 0;
       dbprint(4, $format("Deparser:rl_reset"));
  -    deparse_send_r <= v;
  +    let data = ByteStream { sop: data_in_tmp[1].sop,
  +                            eop: data_in_tmp[1].eop,
  +                            data: data_in_tmp[1].data,
  +                            mask: data_in_tmp[1].mask,
  +                            user: data_in_tmp[1].user };
  +    deparse_send_r <= data;
       flit_ff.enq(?);
     endrule
   
  
positive.code: 
    // key: we let rl_deparse_start preempts rl_deparse_payload
    (* preempts = "rl_deparse_start, rl_deparse_payload" *)
    rule rl_deparse_start if (deparse_done[1] && sop_this_cycle);
      // get new metadata
      deparse_done[1] <= False;
      header_done[1] <= False;
  
negative.code:   endrule
  
    // process payload portion of packet, until last beat
    rule rl_deparse_payload if (deparse_done[1] && !data_in_tmp[1].eop);
      let v = data_in_ff.first;
      data_in_ff.deq;
      data_in_tmp[1] <= v;
      if (rg_buffered[1] != 0) begin
        Bit#(128) data_mask = create_mask(cExtend(rg_buffered[1]));
        Bit#(16) mask_out = create_mask(cExtend(rg_buffered[1] >> 3));
        let data = ByteStream { sop: data_in_tmp[1].sop,
                                eop: data_in_tmp[1].eop,
                                data: truncate(rg_tmp[1]) & data_mask,
                                mask: mask_out,
                                user:data_in_tmp[1].user};
        deparse_send_r <= data;
        flit_ff.enq(?);
        dbprint(4, $format("Deparser:rl_deparse_payload rg_buffered=%d", rg_buffered[1], fshow(data)));
  