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: 
     rule sinkDone;
        // each time we write a burst of k values via sinkC
        let xy = xypipes[k+1].first;
        xypipes[k+1].deq;
        let b <- sinkC.vector.finish();
        let c = dotprodCount-fromInteger(k);
        if (verbose) $display($format(fshow(cycles)+fshow("    sinkDone c")+fshow(c)+fshow("    xy=")+fshow(xy)));
  
negative.code:       FIFO#(UInt#(addrwidth)) startCFifo <- mkFIFO();
        FIFO#(UInt#(addrwidth))    colFifo <- mkFIFO();
        rule startDotProd1;
  	 Tuple2#(UInt#(addrwidth),UInt#(addrwidth)) xy = indexpipes[i].first;
  	 indexpipes[i].deq();
  	 
  	 let row = tpl_1(xy);
  	 let col = tpl_2(xy)+fromInteger(i);
  