anchor.diff:  	    Mul#(dataWidthBytes,8,dataWidth),
   	    Log#(dataWidthBytes,beatShift));
   
  -   FIFOFLevel#(ObjectData#(dataWidth),bufferDepth) writeBuffer <- mkFIFOFLevel;
  +   FIFO#(ObjectData#(dataWidth)) writeBuffer <- mkSizedFIFO(valueOf(bufferDepth));
      FIFOF#(ObjectRequest)        reqOutstanding <- mkFIFOF();
      FIFOF#(Bit#(6))                        doneTags <- mkFIFOF();
      Ratchet#(TAdd#(1,TLog#(bufferDepth))) availableWords <- mkRatchet(fromInteger(valueOf(bufferDepth)));
      let beat_shift = fromInteger(valueOf(beatShift));
      
  -   FIFO#(Bool) readyToGet <- mkFIFO();
  +   FIFOF#(Bool) hasEnoughCapacity <- mkFIFOF();
      rule updateReady;
  -      readyToGet.enq(unpack(truncate(reqOutstanding.first.burstLen>>beat_shift)) <= availableWords.read());
  +      Bit#(TAdd#(1,TLog#(bufferDepth))) requested = truncate(reqOutstanding.first.burstLen>>beat_shift);
  +      if (unpack(truncate(reqOutstanding.first.burstLen>>beat_shift)) <= availableWords.read())
  +	 hasEnoughCapacity.enq(True);
      endrule
   
      // only issue the writeRequest when sufficient data is available.  This includes the data we have already committed.
  
positive.code:       endinterface
        interface Put readData;
  	 method Action put(ObjectData#(dataWidth) x);
  	    readBuffer.fifo.enq(x);
  	 endmethod
        endinterface
     endinterface
  
negative.code:       endinterface
        interface Get writeData;
  	 method ActionValue#(ObjectData#(dataWidth)) get();
  	    writeBuffer.deq;
  	    return writeBuffer.first;
  	 endmethod
        endinterface
        interface Put writeDone = toPut(doneTags);
  