anchor.diff:  
   module [Module] mkDotProd#(PipeOut#(Vector#(n,Float)) xpipe, PipeOut#(Vector#(n,Float)) ypipe, UInt#(nwidth) numElts)(PipeOut#(Float))
      provisos (
  -      Add#(1,a__,n)
  +      Add#(1,a__,n),
  +      ReducePipe#(n,Float)
         );
   
      Bool verbose = True;
  
positive.code:    Vector#(n, FIFO#(Maybe#(Float))) accumFifo <- replicateM(mkFIFO());
     Reg#(UInt#(nwidth)) countInReg <- mkReg(0);
     Reg#(UInt#(nwidth)) countOutReg <- mkReg(0);
     FIFOF#(Float) resultFifo <- mkFIFOF();
  
     rule mul;
        let v = xypipe.first;
  
negative.code: 	 if (c < numElts) begin
  	    accumFifo[i].enq(tagged Valid tpl_1(resp));
  	 end
        end
        Vector#(n,Bit#(32)) ivs = unpack(pack(vs));
        resultFifo.enq(vs);
  
        if (c == numElts)
  	 c = 0;
        countOutReg <= c;
        if (verbose) $display(fshow("countOutReg=")+fshow(countOutReg)+fshow(" numElts=")+fshow(numElts)+fshow(" mul=") + fshow(ivs));
     endrule
  
     PipeOut#(Vector#(n,Float)) resultPipe = toPipeOut(resultFifo);
     PipeOut#(Float) dotpipe <- mkReducePipe(mkFloatAddPipe, resultPipe);
     return dotpipe;
  endmodule
  
  