anchor.diff:     endrule
   
      Reg#(TLPTag) lastTag <- mkReg(0);
  -   rule handleTlpIn;
  -      let tlp = tlpInFifo.first;
  +   FIFOF#(TLPData#(16)) tlpDecodeFifo <- mkFIFOF();
  +   FIFOF#(LUInt#(4))    tlpWordCountFifo <- mkFIFOF();
  +   rule tlpInRule;
  +      let tlp <- toGet(tlpInFifo).get();
  +      tlpWordCountFifo.enq(tlpWordCount(tlp));
  +      tlpDecodeFifo.enq(tlp);
  +   endrule
  +
  +   rule handleTlpRule;
  +      let tlp = tlpDecodeFifo.first;
  +      let count = tlpWordCountFifo.first;
         Bool handled = False;
         TLPMemoryIO3DWHeader h = unpack(tlp.data);
         hitReg <= tlp.hit;
  
positive.code: 	    handled = True;
        end
        //$display("tlpIn handled=%d tlp=%h\n", handled, tlp);
        if (handled)
  	 tlpInFifo.deq();
     endrule
  
      interface Client        tlp;
  
negative.code:     FIFOF#(TLPTag) writeTag <- mkSizedFIFOF(16);
      FIFOF#(TLPTag) doneTag <- mkSizedFIFOF(16);
  
      function LUInt#(4) tlpWordCount(TLPData#(16) tlp);
         if (tlp.be == 16'h0000)
  	  return 0;
         else if (tlp.be == 16'h000f || tlp.be == 16'hf000)
  