anchor.diff:        endaction
      endfunction
   
  -   FIFOF#(EtherData) data_in_ff <- mkFIFOF;
  -   FIFOF#(EtherData) data_out_ff <- mkFIFOF;
  +   FIFOF#(EtherData) data_in_ff <- printTimedTraceM("Deparser:data_in", mkFIFOF);
  +   FIFOF#(EtherData) data_out_ff <- printTimedTraceM("Deparser:data_out", mkFIFOF);
      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();
  
positive.code:     end
    endrule
  
    rule rl_data_ff_load if (!deparse_done[1] && (rg_buffered[2] < rg_next_header_len[2]));
      dbprint(4, $format("Deparser:rl_data_ff_load %d < %d", rg_buffered[2], rg_next_header_len[2]));
      data_in_ff.deq;
    endrule
  
    rule rl_deparse_send if (!deparse_done[1] && (rg_processed[1] > 0));
      let amt = 128;
      if (rg_processed[1] < 128) begin
  
negative.code:   `include "DeparserGenerated.bsv"
    `undef DEPARSER_STATE
  
    // 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);
      deparse_done[1] <= False;
      header_done[1] <= False;
      let metadata = meta_in_ff.first;
      meta_in_ff.deq;
      meta[1] <= metadata;
      transit_next_state(metadata);
      dbprint(4, $format("Deparser:rl_start_state start deparse %d", valueOf(SizeOf#(DeparserState))));
    endrule
  
    // process payload portion of packet, until last beat
    rule rl_deparse_payload if (deparse_done[1] && !eop_this_cycle);
      let v = data_in_ff.first;
      data_in_ff.deq;
      if (rg_shift_amt[1] != 0) begin
        Bit#(128) data_mask = create_mask(cExtend(rg_shift_amt[1]));
        Bit#(16) mask_out = create_mask(cExtend(rg_shift_amt[1] >> 3));
  