anchor.diff:     FIFOF#(MemRequestCycles) clientCyclesFifo <- mkFIFOF();
      
      FIFO#(Tuple3#(Bool,Bool,Bit#(BurstLenSize))) serverCheckAvail <- mkSizedFIFO(1);
  -   FIFOF#(ServerRequest#(serverIdxSz))      serverRequest <- mkFIFOF();
      FIFOF#(MemRequest)                          dmaRequest <- mkSizedFIFOF(valueOf(cmdQDepth));
      FIFO#(Tuple3#(Bit#(8),Bit#(MemTagSize),Bool)) serverProcessing <- mkSizedFIFO(valueOf(cmdQDepth));
      FIFOF#(MemData#(busWidth))                       serverDataFifo <- mkFIFOF;
  
positive.code:    provisos (Div#(busWidth,8,busWidthBytes),
  	     Mul#(busWidthBytes,8,busWidth),
  	     Add#(busWidth, 0, userWidth),
  	     FunnelPipesPipelined#(1, numServers, MemTypes::MemData#(userWidth), 2),
  	     FunnelPipesPipelined#(1, numServers, MemTypes::MemRequest, 2),
  	     Add#(a__, TLog#(numServers), 6)
  	     );
     let verbose = False;
  
     let clock <- exposeCurrentClock();
  
negative.code:    endfunction
  
     FIFOF#(MemRequest) reqFifo <- mkFIFOF();
     FunnelPipe#(1,numServers,MemRequest,bpc) reqFunnel <- mkFunnelPipesPipelined(genWith(readChannelDmaReadReq));
     FIFOF#(MemData#(busWidth)) readDataFifo <- mkFIFOF();
     function Tuple2#(Bit#(TLog#(numServers)),MemData#(userWidth)) tagData(MemData#(userWidth) md);
        return tuple2(truncate(md.tag), md);
     endfunction
     UnFunnelPipe#(1,numServers,MemData#(userWidth),bpc) dataPipes <- mkUnFunnelPipesPipelined(vec(mapPipe(tagData, toPipeOut(readDataFifo))));
     // FIXME: pass this a parameter to mkMemReadChannel
     for (Integer channel = 0; channel < valueOf(numServers); channel = channel + 1)
        mkConnection(dataPipes[channel], readChannels[channel].readData);
  