anchor.diff:     MIMO#(K,N,K,Float) dfifo <- mkMIMO(mimoCfg);
      let sinkC <- mkSink(toPipeOut(dfifo));
   
  -   XYRangePipeIfc#(UInt#(addrwidth)) xypipeifc <- mkXYRangePipeOut();
  -
  -   Vector#(TAdd#(K,2), PipeOut#(Tuple2#(UInt#(addrwidth),UInt#(addrwidth)))) xypipes <- mkForkVector(xypipeifc.pipe);
  +   XYRangePipeIfc#(UInt#(addrwidth)) indexpipeifc <- mkXYRangePipeOut();
  +
  +   Vector#(TAdd#(K,2), PipeOut#(Tuple2#(UInt#(addrwidth),UInt#(addrwidth)))) indexpipes <- mkForkVector(indexpipeifc.pipe);
   
      Reg#(Bool) running <- mkReg(False);
      FIFOF#(Bool) doneFifo <- mkFIFOF();
  
positive.code:    end
  
     rule dotProdValue;
        Tuple2#(UInt#(addrwidth),UInt#(addrwidth)) xy = xypipes[k].first;
        xypipes[k].deq;
        Vector#(K,Float) vs;
        for (Integer i = 0; i < k; i = i + 1) begin
  	 let v = fxdotprods[i].pipe.first;
  
negative.code:       if (verbose) $display("mm pointerA=%d pointerB=%d pointerC=%d\n", pointerA, pointerB, pointerC);
        if (verbose) $display("mm.start ra=%d ca=%d rb=%d cb=%d dotprodCount=%d", numRowsA, numColumnsA, numRowsB, numColumnsB, dotprodCount);
        if (verbose) $display($format(fshow("mm.start ")+fshow(xycfg)));
        indexpipeifc.start(xycfg);
        for (Integer i = 0; i < k; i = i + 1) begin
  	 fxdotprods[i].numElts <= truncate(numColumnsA);
        end
  