anchor.diff:  	    return MemRequest { sglId: cmd.sglId, offset: cmd.base, burstLen:bl, tag: (cmd.tag << valueOf(serverIdxSz)) | extend(idx)};
   	 endmethod
         endinterface
  -      interface Put readData;
  -	 method Action put(MemData#(dataWidth) d);
  -	    match {.rc, .idx, .last} = workf.first;
  -	    let new_respCnt = respCnt+1;
  -	    let l = False;
  -	    //$display("%h %d", d.data, idx);
  -	    if (new_respCnt == rc) begin
  -	       respCnt <= 0;
  -	       workf.deq;
  -	       //$display("eob %d", idx);
  -	       l = last;
  -	    end
  -	    else begin
  -	       respCnt <= new_respCnt;
  -	    end
  -	    read_data.enq(tuple2(idx,tuple2(d.data,l)));
  -	 endmethod
  -      endinterface
  +      interface Put readData = toPut(read_data);
      endinterface 
      interface dataPipes = read_data_pipes;
      interface read_servers = zipWith(toMemreadServer, rs, read_data_pipes);
  
positive.code:       end
     endrule
     
     function MemreadServer#(dataWidth) toMemreadServer(Server#(MemengineCmd,Bool) cs, PipeOut#(Bit#(dataWidth)) p) =
        (interface MemreadServer;
  	  interface cmdServer = cs;
  
negative.code:    Vector#(numServers, FIFOF#(Tuple2#(Bit#(serverIdxSz), MemengineCmd))) cmds_in <- replicateM(mkSizedFIFOF(1));
     FunnelPipe#(1, numServers, Tuple2#(Bit#(serverIdxSz), MemengineCmd),bpc) cmds_in_funnel <- mkFunnelPipesPipelined(map(toPipeOut,cmds_in));
  
     FIFOF#(MemData#(dataWidth))                             read_data <- mkFIFOF;
     Vector#(numServers, FIFOF#(MemData#(dataWidth)))  read_data_buffs <- replicateM(mkSizedBRAMFIFOF(bufferSizeBeats));
     function PipeOut#(Bit#(dataWidth)) check_out(PipeOut#(MemData#(dataWidth)) inpipe, Integer i) = 
        (interface PipeOut;
  	  method Bit#(dataWidth) first;
  	     return inpipe.first.data;
  	  endmethod
  	  method Action deq;
  	     inpipe.deq;
  	     buffCap[i].increment(1);
  	     if (inpipe.first.last)
  		outfs[i].enq(?);
  	  endmethod
  	  method Bool notEmpty = inpipe.notEmpty;
         endinterface);
     Vector#(numServers, PipeOut#(Bit#(dataWidth))) read_data_pipes = zipWith(check_out, map(toPipeOut,read_data_buffs), genVector);
     
  