anchor.diff:     Reg#(Bool)         reqInFlight <- mkReg(False);
      FIFOF#(MemRequest)          writeReqFifo <- mkFIFOF();
      FIFOF#(MemData#(userWidth)) writeDataFifo <- mkFIFOF();
  -   FIFOF#(Bit#(MemTagSize))    writeDoneFifo <- mkFIFOF();
  -
  -   FIFOF#(Bit#(MemTagSize)) arbFifo <- mkFIFOF1();
      FunnelPipe#(1,numServers,MemRequest,2) reqFunnel <- mkFunnelPipesPipelined(genWith(writeChannelDmaWriteReq));
      FunnelPipe#(1,numServers,MemData#(userWidth),2) dataFunnel <- mkFunnelPipesPipelined(genWith(writeChannelDmaWriteData));
  -   function Tuple2#(Bit#(TLog#(numServers)),Bit#(MemTagSize)) tagDone(Bit#(MemTagSize) tag);
  -      return tuple2(truncate(tag), tag);
  -   endfunction
  -   UnFunnelPipe#(1,numServers,Bit#(MemTagSize),2) arbPipes <- mkUnFunnelPipesPipelined(vec(mapPipe(tagDone, toPipeOut(arbFifo))));
  -   UnFunnelPipe#(1,numServers,Bit#(MemTagSize),2) donePipes <- mkUnFunnelPipesPipelined(vec(mapPipe(tagDone, toPipeOut(writeDoneFifo))));
  -   // FIXME: pass arbPipe and donePipe as parameters to mkMemWriteChannel
  -   for (Integer channel = 0; channel < valueOf(numServers); channel = channel + 1) begin
  -      mkConnection(arbPipes[channel], writeChannels[channel].writeGnt);
  -      mkConnection(donePipes[channel], writeChannels[channel].writeDone);
  -   end
   
      rule rl_arbitration if (!reqInFlight);
         let req <- toGet(reqFunnel[0]).get();
  
positive.code: 	 interface PipeOut requestCycles = toPipeOut(clientCyclesFifo);
  	 endinterface);
     interface writeServer = ws;
     interface writeGnt = toPipeIn(writeGntFifo);
     interface writeReq = toPipeOut(writeReqFifo);
     interface writeData = toPipeOut(writeDataFifo);
     interface writeDone = toPipeIn(writeDoneFifo);
  endmodule
  
  module mkMemWriteEngineBuff#(Integer bufferSizeBytes)(MemWriteEngine#(busWidth, userWidth, cmdQDepth, numServers))
  
negative.code:    interface MemWriteEngineServer#(userWidth) writeServer;
  endinterface
  
  module mkMemWriteChannel#(Integer bufferSizeBytes, Integer channelNumber,
  			  PipeOut#(Bit#(MemTagSize)) writeGntPipe, PipeOut#(Bit#(MemTagSize)) writeDonePipe)
     (MemWriteChannel#(busWidth, userWidth, cmdQDepth))
     provisos ( Div#(busWidth,8,busWidthBytes)
  	     ,Log#(busWidthBytes,beatShift)
  	     ,Add#(1, d__, userWidth)
  