anchor.diff:  		     hitReg <= tlp.hit;
   		     TLPMemoryIO3DWHeader hdr_3dw = unpack(tlp.data);
   		     Vector#(4, Bit#(32)) vec = unpack(0);
  +		     Vector#(4, Bit#(32)) tlpvec = unpack(tlp.data);
   		     if (!tlp.sof) begin
  -			for (Integer i = 0; i < 4; i = i+1) begin
  -			   if (tlp.be[(i+1)*4-1:i*4] == 4'hf) begin
  -			      vec[i] = tlp.data[(i+1)*32-1:i*32];
  -			   end
  +			let count = tlpWordCount(tlp);
  +			for (Integer i = 0; i < count; i = i+1) begin
  +			   vec[i] = tlpvec[count-1-i];
   			end
  -			let count = tlpWordCount(tlp);
   			completionMimo.enq(count, vec);
   			completionTagMimo.enq(count, replicate(lastTag));
   		     end
  
positive.code:         timerReg <= timerReg - 1;
      endrule
  
      rule interruptTlpOut if (interruptRequestedReg // && !interruptSecondHalf
         );
         TLPData#(16) tlp = defaultValue;
         tlp.sof = True;
         tlp.eof = False;
         tlp.hit = 7'h00;
         tlp.be = 16'hffff;
  
         if (interruptAddrReg[63:32] == '0) begin
            TLPMemoryIO3DWHeader hdr_3dw = defaultValue();
            hdr_3dw.format = MEM_WRITE_3DW_DATA;
  	  //hdr_3dw.pkttype = MEM_READ_WRITE;
  
negative.code: 	  hdr_4dw.lastbe = 0;
  	  tlp.data = pack(hdr_4dw);
  
  	  sendInterrupt = True;
  	  interruptSecondHalf <= True;
         end
  
         if (!interruptRequested)
  	  interruptRequestedReg <= False;
         if (sendInterrupt)
  	  tlpOutFifo.enq(tlp);
      endrule
  
      rule interruptTlpDataOut if (interruptSecondHalf);
         TLPData#(16) tlp = defaultValue;
         tlp.sof = False;
         tlp.eof = True;
         tlp.hit = 7'h00;
         tlp.be = 16'hf000;
         tlp.data[7+8*15:8*12] = byteSwap(interruptDataReg);
         tlpOutFifo.enq(tlp);
         interruptSecondHalf <= False;
         interruptRequestedReg <= False;
      endrule
  
      interface Put tlp_in;
          method Action put(TLPData#(16) tlp);
  