anchor.diff:  	    ,Add#(1, a__, numServers)
   	    ,Add#(b__, TLog#(numServers), TAdd#(1, TLog#(TMul#(cmdQDepth,numServers))))
   	    ,Pipe::FunnelPipesPipelined#(1, numServers,Tuple2#(Bit#(TLog#(numServers)), MemTypes::MemengineCmd), TMin#(2,TLog#(numServers)))
  -	    ,Pipe::FunnelPipesPipelined#(1, numServers, Tuple2#(Bit#(dataWidth), Bool),TMin#(2, TLog#(numServers)))
   	    ,Add#(c__, TLog#(numServers), TLog#(TMul#(cmdQDepth, numServers)))
   	    ,Add#(d__, TLog#(numServers), 6)
   	    );
  
positive.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#(Tuple2#(Bit#(TLog#(numServers)), Tuple2#(Bit#(dataWidth),Bool))) read_data <- mkFIFOF;
     UnFunnelPipe#(1, numServers, Tuple2#(Bit#(dataWidth),Bool),bpc) read_data_unfunnel <- mkUnFunnelPipesPipelined(cons(toPipeOut(read_data),nil));
     Vector#(numServers, FIFOF#(Tuple2#(Bit#(dataWidth),Bool)))  read_data_buffs <- replicateM(mkSizedBRAMFIFOF(bufferSizeBeats));
     Vector#(numServers, PipeIn#(Tuple2#(Bit#(dataWidth),Bool))) foo = map(toPipeIn, read_data_buffs); 
     zipWithM(mkConnection, read_data_unfunnel, foo);
     function PipeOut#(Bit#(dataWidth)) check_out(PipeOut#(Tuple2#(Bit#(dataWidth),Bool)) x, Integer i) = 
        (interface PipeOut;
  	  method Bit#(dataWidth) first;
  	     return tpl_1(x.first);
  	  endmethod
  	  method Action deq;
  	     x.deq;
  	     buffCap[i].increment(1);
  	     if (tpl_2(x.first)) 
  		outfs[i].enq(?);
  	  endmethod
  	  method Bool notEmpty = x.notEmpty;
         endinterface);
     Vector#(numServers, PipeOut#(Bit#(dataWidth))) read_data_pipes = zipWith(check_out, map(toPipeOut,read_data_buffs), genVector);
     
  
negative.code:       end
     endrule
     
     rule read_data_rule;
        let d <- toGet(read_data).get();
        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_buffs[idx].enq(d);
     endrule
  
     function MemreadServer#(dataWidth) toMemreadServer(Server#(MemengineCmd,Bool) cs, PipeOut#(Bit#(dataWidth)) p) =
        (interface MemreadServer;
  	  interface cmdServer = cs;
  