anchor.diff:     endinterface
      interface ObjectReadClient dmaClient;
         interface Get readReq;
  -	 method ActionValue#(ObjectRequest) get;
  -	    readyToGet.deq();
  +	 method ActionValue#(ObjectRequest) get if (hasEnoughCapacity.notEmpty);
  +	    hasEnoughCapacity.deq();
   	    reqOutstanding.deq;
   	    availableBuffers.decrement(unpack(truncate(reqOutstanding.first.burstLen>>beat_shift)));
   	    return reqOutstanding.first;
  
positive.code: 	    Mul#(dataWidthBytes,8,dataWidth),
  	    Log#(dataWidthBytes,beatShift));
  
     FIFOFLevel#(ObjectData#(dataWidth),bufferDepth) writeBuffer <- mkFIFOFLevel;
     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();
     rule updateReady;
        readyToGet.enq(unpack(truncate(reqOutstanding.first.burstLen>>beat_shift)) <= availableWords.read());
     endrule
  
     // only issue the writeRequest when sufficient data is available.  This includes the data we have already committed.
  
negative.code:       interface Put writeReq = toPut(reqOutstanding);
        interface Put writeData;
  	 method Action put(ObjectData#(dataWidth) d);
  	    writeBuffer.enq(d);
  	    availableWords.increment(1);
  	 endmethod
        endinterface
  