anchor.diff:     interface PipeOut#(Float) pipe;
   endinterface
   
  +typedef 1 NUM_MACS;
  +
   (* synthesize *)
   module [Module] mkDotProdServer#(UInt#(TLog#(K)) label)(DotProdServer#(N));
   
  
positive.code: 	    accum = tagged Valid accumFifo[i].first();
  	    accumFifo[i].deq();
  	 end
           macs[i].request.put(tuple4(accum, x, y, defaultValue));
  	 if (verbose) $display($format(fshow("label=")+fshow(label)+fshow(" dotprod x=") + fshow(x) + fshow(" y=") + fshow(y)
  				       + fshow(" isFirst=") + fshow(isFirst) + fshow(" accum=")+fshow(pack(accum))));
        endrule
     end
  
     for (Integer i = 0; i < valueOf(N); i = i + 1) begin
        rule macout;
  	 let isLast = lastFifos[i].first();
  	 lastFifos[i].deq();
  	 Float vi;
  	 let resp <- macs[i].response.get();
  	 vi = tpl_1(resp);
  	 if (!isLast) begin
  	    accumFifo[i].enq(vi);
  
negative.code:    Vector#(N,FIFOF#(Bool)) lastFifos <- replicateM(mkFIFOF());
     Vector#(N, PipeOut#(Tuple3#(Bool,Float,Float))) abpipes = map(toPipeOut,abfifos);
  
     Vector#(NUM_MACS, Server#(Tuple4#(Maybe#(Float), Float, Float, RoundMode), Tuple2#(Float,Exception))) macs <- replicateM(mkFloatMac);
     Vector#(1, FIFOF#(Bit#(TLog#(N)))) chanFifo <- replicateM(mkFIFOF());
     Vector#(N, FIFO#(Float)) accumFifo <- replicateM(mkFIFO());
     Vector#(N, FIFOF#(Float)) resultFifos <- replicateM(mkFIFOF());
  
  