anchor.diff:     return v;
   endfunction
   
  -typedef struct {
  -   Bit#(indexSize)    idx;
  -   SGLId              sglId;
  -   Bit#(32)           base;
  -   Bit#(MemTagSize)   tag;
  -   Bool               last;
  -   Bit#(BurstLenSize) burstLen;
  -} ServerRequest#(numeric type indexSize) deriving (Bits, Eq);
  -
   interface MemReadChannel#(numeric type busWidth, numeric type userWidth, numeric type cmdQDepth);
      interface PipeOut#(MemRequest)        readReq;
      interface PipeIn#(MemData#(busWidth)) readData;
  
positive.code: 	     Mul#(busWidthBytes,8,busWidth),
  	     Log#(busWidthBytes,beatShift),
  	     Log#(cmdQDepth,logCmdQDepth),
  	     Log#(cmdQDepth, cmdBuffAddrSz),
  	     Log#(1, serverIdxSz),
  	     Add#(busWidth, 0, userWidth),
  	     Add#(1,logCmdQDepth, outCntSz),
  	     Add#(1, c__, 1),
  	     Add#(b__, TLog#(1), cmdBuffAddrSz),
  	     Add#(e__, TLog#(1), TAdd#(1, cmdBuffAddrSz)),
  	     Add#(a__, serverIdxSz, cmdBuffAddrSz),
  	     Min#(2,TLog#(1),bpc),
  	     Add#(d__, TLog#(1), TAdd#(1, serverIdxSz)),
  	     Add#(f__, serverIdxSz, MemTagSize));
     let verbose = False;
     let beatShift = fromInteger(valueOf(beatShift));
  
  
negative.code: 
  `include "ConnectalProjectConfig.bsv"
  
  typedef 2 MemReadFunnelBPC;
  
  module mkMemReadEngine(MemReadEngine#(busWidth, userWidth, cmdQDepth, numServers))
     provisos( Mul#(TDiv#(busWidth, 8), 8, busWidth)
  	    ,Add#(1, a__, numServers)
  	    ,Add#(busWidth, 0, userWidth)
  //	     ,Min#(MemReadFunnelBPC, TLog#(numServers), bpc)
  	     ,Add#(0,MemReadFunnelBPC,bpc)
  	    ,FunnelPipesPipelined#(1, numServers, MemTypes::MemData#(userWidth), bpc)
  	    ,Pipe::FunnelPipesPipelined#(1, numServers, MemTypes::MemRequest, bpc)
  	    ,Add#(b__, TLog#(numServers), MemTagSize)
        	    );
     let rv <- mkMemReadEngineBuff(valueOf(cmdQDepth) * valueOf(TExp#(BurstLenSize)));
     return rv;
  