anchor.diff:  
     // 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);
  +  rule rl_deparse_start if (deparse_done[1] && data_in_ff.first.sop);
       // get new metadata
       deparse_done[1] <= False;
       header_done[1] <= False;
  
positive.code:    Array#(Reg#(Bool)) header_done <- mkCReg(2, True);
     Array#(Reg#(MetadataT)) meta <- mkCReg(2, defaultValue);
     PulseWire w_deparse_header_done <- mkPulseWire();
     Array#(Reg#(Bool)) sop_tmp <- mkCReg(2, False);
     Array#(Reg#(Bool)) eop_tmp <- mkCReg(2, False);
  
     let mask_this_cycle = data_in_ff.first.mask;
     let sop_this_cycle = data_in_ff.first.sop;
     let eop_this_cycle = data_in_ff.first.eop;
     let data_this_cycle = data_in_ff.first.data;
  
     // stage 1
     FIFO#(void) flit_ff <- mkFIFO;
  
negative.code:         // take data from data_in_ff, shift and append
          // rg_tmp = data << rg_buffered | rg_tmp;
          // rg_buffered += len
          let v = data_in_ff.first;
          data_in_tmp[0] <= v;
          rg_tmp[0] <= zeroExtend(v.data) << rg_buffered[0] | rg_tmp[0];
  
          dbprint(4, $format("Deparser:rl_data_ff_load "));
          data_in_ff.deq;
  
          UInt#(NumBytes) n_bytes_used = countOnes(v.mask);
          UInt#(NumBits) n_bits_used = cExtend(n_bytes_used) << 3;
          move_buffered_amt(cExtend(n_bits_used));
          dbprint(4, $format("load state %d %d ", rg_buffered[0], n_bits_used, fshow(state)));
  