anchor.diff:  
      FIFOF#(EtherData) data_in_ff <- mkFIFOF;
      FIFOF#(EtherData) data_out_ff <- mkFIFOF;
  -   FIFOF#(MetadataT) meta_in_ff <- printTimedTraceM("deparse_meta_in_ff", mkSizedFIFOF(16));
  +   FIFOF#(MetadataT) meta_in_ff <- printTimedTraceM("Deparser:meta_in_ff", mkSizedFIFOF(16));
      FIFOF#(Maybe#(Bit#(128))) data_ff <- mkDFIFOF(tagged Invalid);
      FIFO#(DeparserState) deparse_state_ff <- mkPipelineFIFO();
      Array#(Reg#(Bit#(32))) rg_next_header_len <- mkCReg(3, 0);
  
positive.code:     rg_processed[1] <= rg_processed[1] - amt;
      rg_shift_amt[1] <= rg_shift_amt[1] - amt;
      data_out_ff.enq(data);
      dbprint(4, $format("Deparser rg_processed=%d rg_shift_amt=%d amt=%d", rg_processed[1], rg_shift_amt[1], amt, fshow(data)));
    endrule
  
    rule rl_deparse_header_done if (w_deparse_header_done);
      fetch_next_header(0);
      header_done[0] <= True;
      dbprint(4, $format("deparse header done"));
    endrule
  
    // wait till all processed bits are sent, cont. to send payload.
    // some data are buffered not processed.
    rule rl_wait_till_processed_done if (!deparse_done[1] && header_done[1] && (rg_processed[1] == 0));
      deparse_done[1] <= True;
      dbprint(3, $format("deparse processed done"));
    endrule
  
    `define DEPARSER_RULES
  
negative.code:        amt = rg_processed[1];
      end
      let v = data_in_ff.first;
      dbprint(3, $format("Deparser:rl_deparse_send ", fshow(v)));
      Bit#(128) data_out = truncate(rg_tmp[1] & create_mask(cExtend(amt)));
      Bit#(16) mask_out = create_mask(cExtend(amt >> 3));
      let data = EtherData { sop: sop_this_cycle, eop: False, data: data_out, mask: mask_out };
  