anchor.diff:     provisos(Div#(dataWidth,8,dataWidthBytes)
   	    ,Mul#(dataWidthBytes,8,dataWidth)
   	    ,Log#(dataWidthBytes,beatShift)
  -	    ,Log#(bufferDepth, a__)
  -	    ,Add#(a__, 1, b__)
  -	    ,Add#(TLog#(bufferDepth), c__, 15)
  +	    ,Log#(bufferDepth,bufferDepthWidth)
  +	    ,Max#(TAdd#(bufferDepthWidth,1),8,availableWidth)
  +	    ,Add#(a__,8,availableWidth)
   	    );
   
  -   FIFOFLevel#(ObjectData#(dataWidth),bufferDepth)  readBuffer <- mkBRAMFIFOFLevel;
  +   FIFOF#(ObjectData#(dataWidth))   readBuffer <- mkSizedBRAMFIFOF(valueOf(bufferDepth));
      FIFOF#(ObjectRequest)        reqOutstanding <- mkFIFOF();
      FIFOF#(ObjectRequest)          reqCommitted <- mkFIFOF();
  -   ConfigCounter#(16) unfulfilled <- mkConfigCounter(0);
  +   ConfigCounter#(availableWidth) unfulfilled <- mkConfigCounter(0);
      let beat_shift = fromInteger(valueOf(beatShift));
      
      // only issue the readRequest when sufficient buffering is available.  This includes the bufering we have already comitted.
  -   Bit#(16) sreq = pack(satPlus(Sat_Bound, unpack(extend(reqOutstanding.first.burstLen>>beat_shift)), unfulfilled.read()));
  -
  -   rule commitReq if (readBuffer.lowWater(truncate(sreq)));
  +   rule commitReq if (unpack(extend(reqOutstanding.first.burstLen>>beat_shift)) + unfulfilled.read() < fromInteger(valueOf(bufferDepth)));
         let req <- toGet(reqOutstanding).get();
         unfulfilled.increment(unpack(extend(req.burstLen>>beat_shift)));
         reqCommitted.enq(req);
  
positive.code: 
     interface ObjectReadServer readServer;
        interface Put readReq = toPut(reqOutstanding);
        interface Get readData = toGet(readBuffer);
     endinterface
     interface ObjectReadClient readClient;
        interface Get readReq = toGet(reqCommitted);
        interface Put readData;
     	 method Action put(ObjectData#(dataWidth) x);
     	    readBuffer.fifo.enq(x);
     	    unfulfilled.decrement(1);
     	 endmethod
        endinterface
     endinterface
  
negative.code: 
  
  import BRAM::*;
  import BRAMFIFO::*;
  import FIFO::*;
  import Vector::*;
  import Gearbox::*;
  