anchor.diff:     Reg#(UInt#(20)) numEltsReg <- mkReg(0);
      Reg#(UInt#(20)) countInReg <- mkReg(0);
      Vector#(N,FIFOF#(Tuple3#(Bool,Float,Float))) abfifos <- replicateM(mkFIFOF());
  -   FIFOF#(Bool) lastFifo <- mkFIFOF();
  +   Vector#(N,FIFOF#(Bool)) lastFifos <- replicateM(mkFIFOF());
      Vector#(N, PipeOut#(Tuple3#(Bool,Float,Float))) abpipes = map(toPipeOut,abfifos);
   
      Vector#(N, Server#(Tuple4#(Maybe#(Float), Float, Float, RoundMode), Tuple2#(Float,Exception))) macs <- replicateM(mkFloatMac);
      Vector#(N, FIFO#(Float)) accumFifo <- replicateM(mkFIFO());
      Vector#(N, FIFOF#(Float)) resultFifos <- replicateM(mkFIFOF());
   
  -   rule mul;
  -      for (Integer i = 0; i < valueOf(N); i = i + 1) begin
  +   for (Integer i = 0; i < valueOf(N); i = i + 1) begin
  +      rule mul;
   	 let v = abpipes[i].first;
   	 abpipes[i].deq;
   	 let isFirst = tpl_1(v);
  
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))));
        end
     endrule
  
     rule macout;
        let isLast = lastFifo.first();
        lastFifo.deq();
        for (Integer i = 0; i < valueOf(N); i = i + 1) begin
  	 Float vi;
  	 let resp <- macs[i].response.get();
  	 vi = tpl_1(resp);
  
negative.code: 	    let avec = tpl_1(tpl);
  	    let bvec = tpl_2(tpl);
  	    abfifos[i].enq(tuple3(isFirst,avec[i], bvec[i]));
  	    lastFifos[i].enq(isLast);
  	 end
        endmethod
     endinterface : request
     interface PipeOut pipe = dotpipe;
  