anchor.diff:     UInt#(32) col;
   `endif
      Float v;
  +   Bool first;
  +   Bool last;
      } Token deriving (Eq,Bits);
   
   interface SharedDotProdServer#(numeric type k);
  -   interface Reg#(UInt#(20)) numElts;
      interface Put#(Token)                 aInput;
      interface Put#(Token)                 bInput;
      interface Vector#(k, PipeOut#(Token)) pipes;
  
positive.code: 	 Vector#(N,Token) rv;
  `ifdef TAGGED_TOKENS
  	 for(Integer i = 0; i < valueOf(N); i=i+1)
  	    rv[i] = Token{row:tagFifo.first, col:col+fromInteger(i), v:vs.pipe.first[i]};
  `else
  	 for(Integer i = 0; i < valueOf(N); i=i+1)
  	    rv[i] = Token{v:vs.pipe.first[i]};
  `endif
  	 return rv;
        endmethod
        method Action deq;
  
negative.code:    interface Vector aInputs = map(toCountedPut(aTokensPutReg), map(toPut, aFifos));
     interface Vector bInputs = map(toCountedPut(bTokensPutReg), map(toPut, bFifos));
     interface Vector fxPipes = fxPipesN;
     interface MmTileDebug debug;
        interface PipeOut macCount = macCountPipe;
        method Bit#(RowsPerTile) aNotEmpty(); return pack(map(fifofNotEmpty, aFifos)); endmethod
  