anchor.diff:         else
   	  return 0;
       endfunction
  +   rule writeTlps if (writeDwCount > 0);
  +      TLPData#(16) tlp = defaultValue;
  +      tlp.sof = False;
  +      Vector#(4, Bit#(32)) v = unpack(0);
  +      if (writeDwCount > 4) begin
  +	 v = writeDataMimo.first();
  +	 writeDataMimo.deq(4);
  +	 writeDwCount <= writeDwCount - 4;
  +	 tlp.eof = True;
  +	 tlp.be = 16'hffff;
  +      end
  +      else begin
  +	 v = writeDataMimo.first();
  +	 writeDataMimo.deq(unpack(truncate(writeDwCount)));
  +	 writeDwCount <= 0;
  +	 tlp.eof = True;
  +	 if (writeDwCount == 4)
  +	    tlp.be = 16'hffff;
  +	 else if (writeDwCount == 3)
  +	    tlp.be = 16'hfff0;
  +	 else if (writeDwCount == 2)
  +	    tlp.be = 16'hff00;
  +	 else if (writeDwCount == 1)
  +	    tlp.be = 16'hf000;
  +      end
  +      tlp.data = pack(v);
  +      tlpOutFifo.enq(tlp);
  +   endrule
  +
       interface GetPut tlps = tuple2(
                 toGet(tlpOutFifo),
   	      (interface Put;
  
positive.code:     interface Axi3Slave slave;
  	interface Axi3SlaveWrite write;
  	   method Action writeAddr(Bit#(addrWidth) addr, Bit#(4) burstLen, Bit#(3) burstWidth,
  				   Bit#(2) burstType, Bit#(3) burstProt, Bit#(4) burstCache, Bit#(12) awid);
             endmethod: writeAddr
  	   method Action writeData(Bit#(busWidth) data, Bit#(busWidthBytes) byteEnable, Bit#(1) last);
             endmethod: writeData
  	   method ActionValue#(Bit#(2)) writeResponse();
  	       return 0;
  
negative.code:            endmethod: readAddr
  	   method ActionValue#(Bit#(buswidth)) readData();
  	      let data_v = completionMimo.first;
  	      completionMimo.deq(fromInteger(valueOf(busWidthWords)));
  	      completionTagMimo.deq(fromInteger(valueOf(busWidthWords)));
                Bit#(buswidth) v = 0;
  	      for (Integer i = 0; i < valueOf(busWidthWords); i = i+1)
  		 v[(i+1)*32-1:i*32] = byteSwap(data_v[i]);
  	      return v;
             endmethod: readData
  